packages feed

keiro-dsl-0.18.0.0: test/conformance-id-admission-domains/Generated/IdAdmissionDomains/StructuralConformance.hs

-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from context id-admission-domains structural conformance; do not edit.
module Generated.IdAdmissionDomains.StructuralConformance
  ( structuralConformanceAssertions
  ) where

import Data.Aeson qualified as Aeson
import Data.Aeson.Types qualified as AesonTypes
import Data.List (nub)
import Data.List.NonEmpty qualified as NonEmpty
import Data.Map.Strict qualified as Map
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.IdAdmissionDomains.StructuralProjections qualified as StructuralProjections
import Generated.IdAdmissionDomains.Structural.Shape.IdentityEnvelope (IdentityEnvelopeShape(previousId))
import Conformance.IdAdmissionDomains.Bindings qualified as Bindings
import Conformance.IdAdmissionDomains.Domain (IdentityEnvelope)
import Generated.IdAdmissionDomains.Nominals qualified as Nominals
import Generated.IdAdmissionDomains.Structural.NominalLeaves qualified as NominalLeaves
import Generated.IdAdmissionDomains.Structural.Shape.IdentityEnvelope qualified as ShapeIdentityEnvelope

structuralConformanceAssertions :: [(String, Bool)]
structuralConformanceAssertions =
  concat
    [ identityEnvelopeBindingAssertions
    , [("generated nominal canonical text: conformance.id-admission-domains.IdentityEnvelope.v1/LegacyId", all (\(_, value) -> (case bindingToShape Bindings.identityEnvelopeBinding value of ShapeIdentityEnvelope.IdentityEnvelope field0_0 field0_1 field0_2 -> ((NominalLeaves.encodeLegacyIdLeaf (field0_0) == Aeson.String (Nominals.legacyIdText (field0_0)) && AesonTypes.parseEither NominalLeaves.parseLegacyIdLeaf (NominalLeaves.encodeLegacyIdLeaf (field0_0)) == Right (field0_0))) && (maybe True (\item1 -> (NominalLeaves.encodeLegacyIdLeaf (item1) == Aeson.String (Nominals.legacyIdText (item1)) && AesonTypes.parseEither NominalLeaves.parseLegacyIdLeaf (NominalLeaves.encodeLegacyIdLeaf (item1)) == Right (item1))) (field0_1)) && ((all (\key1 -> (NominalLeaves.encodeLegacyIdLeaf (key1) == Aeson.String (Nominals.legacyIdText (key1)) && AesonTypes.parseEither NominalLeaves.parseLegacyIdLeaf (NominalLeaves.encodeLegacyIdLeaf (key1)) == Right (key1))) (Map.keys (field0_2)))))) (NonEmpty.toList (fixtureCases Bindings.identityEnvelopeFixtures)))]
    , [("fixture coverage: conformance.id-admission-domains.IdentityEnvelope.v1", coverageIdentityEnvelope)]
    , 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)

identityEnvelopeBindingAssertions :: [(String, Bool)]
identityEnvelopeBindingAssertions =
  ("fixture labels: conformance.id-admission-domains.IdentityEnvelope.v1", validFixtureLabels cases) :
  ("canonical identity: conformance.id-admission-domains.IdentityEnvelope.v1", canonicalTypeName (Proxy @IdentityEnvelope) == "conformance.id-admission-domains.IdentityEnvelope.v1") :
  concat
    [ [ ("binding domain round-trip: conformance.id-admission-domains.IdentityEnvelope.v1/" <> T.unpack label, bindingDomainRoundTrip Bindings.identityEnvelopeBinding value)
      , ("binding shape round-trip: conformance.id-admission-domains.IdentityEnvelope.v1/" <> T.unpack label, bindingShapeRoundTrip Bindings.identityEnvelopeBinding (bindingToShape Bindings.identityEnvelopeBinding value))
      ]
    | (label, value) <- NonEmpty.toList cases
    ]
  where
    cases = fixtureCases Bindings.identityEnvelopeFixtures

coverageIdentityEnvelope :: Bool
coverageIdentityEnvelope = any (isNothing . (.previousId)) shapes && any (isJust . (.previousId)) shapes
  where
    shapes = map (bindingToShape Bindings.identityEnvelopeBinding . snd) (NonEmpty.toList (fixtureCases Bindings.identityEnvelopeFixtures))

structuralProjectionAssertions :: [(String, Bool)]
structuralProjectionAssertions =
  [ ("projection witness agreement: conformance.id-admission-domains.IdentityEnvelope.v1/legacyId", all (\(_, owner) -> fieldWitnessAgrees StructuralProjections.identityEnvelopeLegacyIdWitness (\referenceOwner -> StructuralProjections.identityEnvelopeLegacyIdGet referenceOwner) owner) (NonEmpty.toList (fixtureCases Bindings.identityEnvelopeFixtures)))
  ]