packages feed

keiro-dsl-0.12.0.0: test/conformance-projection-catalog/Generated/CatalogDemo/StructuralConformance.hs

-- @generated by keiro-dsl 0.12.0.0 (language keiro-dsl 5) from context catalog-demo structural conformance; do not edit.
module Generated.CatalogDemo.StructuralConformance
  ( structuralConformanceAssertions
  ) where

import Data.Aeson qualified as Aeson
import Data.List (nub)
import Data.List.NonEmpty qualified as NonEmpty
import Data.Maybe (isJust, isNothing)
import Data.Proxy (Proxy (..))
import Data.Text qualified as T
import Keiki.Core (fieldWitnessAgrees)
import Keiki.Shape (CanonicalTypeName (..))
import Keiro.Codec.Structural (FixtureCases (..), bindingDomainRoundTrip, bindingShapeRoundTrip, bindingToShape)
import Generated.CatalogDemo.StructuralProjections qualified as StructuralProjections
import CatalogDemo.MappedBindings qualified as MappedBindings
import CatalogDemo.MappedDomain (QualificationPayload)
import Generated.CatalogDemo.Structural.Shape.QualificationPayload qualified as ShapeQualificationPayload

structuralConformanceAssertions :: [(String, Bool)]
structuralConformanceAssertions =
  concat
    [ qualificationPayloadBindingAssertions
    , orderPayloadOpaqueAssertions
    , qualificationResultOpaqueAssertions
    , queryCriteriaOpaqueAssertions
    , queueMetadataOpaqueAssertions
    , registerStateOpaqueAssertions
    , sharedReferenceOpaqueAssertions
    , unusedQualificationOpaqueAssertions
    , [("fixture coverage: catalog-demo.QualificationPayload.v1", coverageQualificationPayload)]
    , structuralProjectionAssertions
    ]

validFixtureLabels :: NonEmpty.NonEmpty (T.Text, value) -> Bool
validFixtureLabels cases =
  all (not . T.null) labels && length labels == length (nub labels)
  where
    labels = map fst (NonEmpty.toList cases)

qualificationPayloadBindingAssertions :: [(String, Bool)]
qualificationPayloadBindingAssertions =
  ("fixture labels: catalog-demo.QualificationPayload.v1", validFixtureLabels cases) :
  ("canonical identity: catalog-demo.QualificationPayload.v1", canonicalTypeName (Proxy @QualificationPayload) == "catalog-demo.QualificationPayload.v1") :
  concat
    [ [ ("binding domain round-trip: catalog-demo.QualificationPayload.v1/" <> T.unpack label, bindingDomainRoundTrip MappedBindings.qualificationPayloadBinding value)
      , ("binding shape round-trip: catalog-demo.QualificationPayload.v1/" <> T.unpack label, bindingShapeRoundTrip MappedBindings.qualificationPayloadBinding (bindingToShape MappedBindings.qualificationPayloadBinding value))
      ]
    | (label, value) <- NonEmpty.toList cases
    ]
  where
    cases = fixtureCases MappedBindings.qualificationPayloadCases

orderPayloadOpaqueAssertions :: [(String, Bool)]
orderPayloadOpaqueAssertions =
  ("opaque boundary fixtures: catalog-demo.order-payload.json@1", validFixtureLabels cases) :
  [ ("opaque codec round-trip: catalog-demo.order-payload.json@1/" <> T.unpack caseLabel, case Aeson.fromJSON (Aeson.toJSON value) of Aeson.Success decoded -> decoded == value; Aeson.Error _ -> False)
  | (caseLabel, value) <- NonEmpty.toList cases
  ]
  where
    cases = fixtureCases MappedBindings.orderPayloadCases

qualificationResultOpaqueAssertions :: [(String, Bool)]
qualificationResultOpaqueAssertions =
  ("opaque boundary fixtures: catalog-demo.qualification-result.json@1", validFixtureLabels cases) :
  [ ("opaque codec round-trip: catalog-demo.qualification-result.json@1/" <> T.unpack caseLabel, case Aeson.fromJSON (Aeson.toJSON value) of Aeson.Success decoded -> decoded == value; Aeson.Error _ -> False)
  | (caseLabel, value) <- NonEmpty.toList cases
  ]
  where
    cases = fixtureCases MappedBindings.qualificationResultCases

queryCriteriaOpaqueAssertions :: [(String, Bool)]
queryCriteriaOpaqueAssertions =
  ("opaque boundary fixtures: catalog-demo.query-criteria.json@1", validFixtureLabels cases) :
  [ ("opaque codec round-trip: catalog-demo.query-criteria.json@1/" <> T.unpack caseLabel, case Aeson.fromJSON (Aeson.toJSON value) of Aeson.Success decoded -> decoded == value; Aeson.Error _ -> False)
  | (caseLabel, value) <- NonEmpty.toList cases
  ]
  where
    cases = fixtureCases MappedBindings.queryCriteriaCases

queueMetadataOpaqueAssertions :: [(String, Bool)]
queueMetadataOpaqueAssertions =
  ("opaque boundary fixtures: catalog-demo.queue-metadata.json@1", validFixtureLabels cases) :
  [ ("opaque codec round-trip: catalog-demo.queue-metadata.json@1/" <> T.unpack caseLabel, case Aeson.fromJSON (Aeson.toJSON value) of Aeson.Success decoded -> decoded == value; Aeson.Error _ -> False)
  | (caseLabel, value) <- NonEmpty.toList cases
  ]
  where
    cases = fixtureCases MappedBindings.queueMetadataCases

registerStateOpaqueAssertions :: [(String, Bool)]
registerStateOpaqueAssertions =
  ("opaque boundary fixtures: catalog-demo.register-state.json@1", validFixtureLabels cases) :
  [ ("opaque codec round-trip: catalog-demo.register-state.json@1/" <> T.unpack caseLabel, case Aeson.fromJSON (Aeson.toJSON value) of Aeson.Success decoded -> decoded == value; Aeson.Error _ -> False)
  | (caseLabel, value) <- NonEmpty.toList cases
  ]
  where
    cases = fixtureCases MappedBindings.registerStateCases

sharedReferenceOpaqueAssertions :: [(String, Bool)]
sharedReferenceOpaqueAssertions =
  ("opaque boundary fixtures: catalog-demo.shared-reference.json@1", validFixtureLabels cases) :
  [ ("opaque codec round-trip: catalog-demo.shared-reference.json@1/" <> T.unpack caseLabel, case Aeson.fromJSON (Aeson.toJSON value) of Aeson.Success decoded -> decoded == value; Aeson.Error _ -> False)
  | (caseLabel, value) <- NonEmpty.toList cases
  ]
  where
    cases = fixtureCases MappedBindings.sharedReferenceCases

unusedQualificationOpaqueAssertions :: [(String, Bool)]
unusedQualificationOpaqueAssertions =
  ("opaque boundary fixtures: catalog-demo.unused-qualification.json@1", validFixtureLabels cases) :
  [ ("opaque codec round-trip: catalog-demo.unused-qualification.json@1/" <> T.unpack caseLabel, case Aeson.fromJSON (Aeson.toJSON value) of Aeson.Success decoded -> decoded == value; Aeson.Error _ -> False)
  | (caseLabel, value) <- NonEmpty.toList cases
  ]
  where
    cases = fixtureCases MappedBindings.unusedQualificationCases

coverageQualificationPayload :: Bool
coverageQualificationPayload = any (isNothing . ShapeQualificationPayload.note) shapes && any (isJust . ShapeQualificationPayload.note) shapes
  where
    shapes = map (bindingToShape MappedBindings.qualificationPayloadBinding . snd) (NonEmpty.toList (fixtureCases MappedBindings.qualificationPayloadCases))

structuralProjectionAssertions :: [(String, Bool)]
structuralProjectionAssertions =
  [ ("projection witness agreement: catalog-demo.QualificationPayload.v1/qualification_id", all (\(_, owner) -> fieldWitnessAgrees StructuralProjections.qualificationPayloadQualificationIdWitness (\referenceOwner -> ShapeQualificationPayload.qualificationId (bindingToShape MappedBindings.qualificationPayloadBinding referenceOwner)) owner) (NonEmpty.toList (fixtureCases MappedBindings.qualificationPayloadCases)))
  ]