packages feed

keiro-dsl-0.11.0.0: test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Harness.hs

{-# LANGUAGE OverloadedLabels #-}
-- @generated by keiro-dsl 0.11.0.0 (language keiro-dsl 4) from aggregate Project; do not edit.
module Generated.WorkspaceNominalProof.Project.Harness (harnessAssertions) where

import Generated.WorkspaceNominalProof.Project.Domain
import Generated.WorkspaceNominalProof.Project.Codec (encodeProjectEvent, parseProjectEvent, projectCodec)
import Generated.WorkspaceNominalProof.Project.Transducer (projectTransducer)
import Keiki.Core (applyEventsEither, defaultValidationOptions, step, validateTransducer, (!))
import Keiro.Codec (eventType)
import Generated.WorkspaceNominalProof.Nominals (ProjectId, parseProjectId, ProjectPhase (..))

-- | (label, passed). A driver runs these and exits non-zero on any False,
-- naming the failing assertion. Filling a hole wrongly turns a specific
-- entry False; the scaffold cannot.
harnessAssertions :: [(String, Bool)]
harnessAssertions =
  [ ("validateTransducer is empty", null (validateTransducer defaultValidationOptions projectTransducer))
  -- clock-free: spec samples no wall clock (verified at scaffold time)
  , ("golden round-trip: ProjectRegistered", roundTrips sampleEventProjectRegistered)
  , ("golden round-trip: ArchivalRecorded", roundTrips sampleEventArchivalRecorded)
  , ("accepts RegisterProject from ProjectEmpty", acceptRegisterProject)
  ]
  ++ forwardReplayRegisterProject

roundTrips :: ProjectEvent -> Bool
roundTrips e = parseProjectEvent (eventType projectCodec e) (encodeProjectEvent e) == Right e

sampleProjectId :: ProjectId
sampleProjectId =
  case parseProjectId "proj_01h455vb4pex5vsknk084sn02q" of
    Right parsed -> parsed
    Left problem -> error (show problem)

sampleEventProjectRegistered :: ProjectEvent
sampleEventProjectRegistered = ProjectRegistered (ProjectRegisteredData sampleProjectId Draft)

sampleEventArchivalRecorded :: ProjectEvent
sampleEventArchivalRecorded = ArchivalRecorded (ArchivalRecordedData sampleProjectId Draft)

acceptRegisterProject :: Bool
acceptRegisterProject =
  case step projectTransducer (ProjectEmpty, initialProjectRegs) (RegisterProject (RegisterProjectData sampleProjectId Draft)) of
    Just (v, _, _) -> v == ProjectLive
    Nothing -> False

-- forward/replay equality (plan 147): cross the persisted codec boundary,
-- replay the emitted chain, and compare the final vertex and every register.
forwardReplayRegisterProject :: [(String, Bool)]
forwardReplayRegisterProject =
  case step projectTransducer (ProjectEmpty, initialProjectRegs) (RegisterProject (RegisterProjectData sampleProjectId Draft)) of
    Nothing -> [(prefix <> "forward step accepted", False)]
    Just (forwardVertex, forwardRegs, emitted) ->
      case mapM (\event -> parseProjectEvent (eventType projectCodec event) (encodeProjectEvent event)) emitted of
        Left _ -> [(prefix <> "emitted chain decodes", False)]
        Right decodedEvents ->
          case applyEventsEither projectTransducer (ProjectEmpty, initialProjectRegs) decodedEvents of
            Left _ -> [(prefix <> "replay succeeds", False)]
            Right (replayVertex, replayRegs) ->
              [ (prefix <> "final vertex", replayVertex == forwardVertex)
              , (prefix <> "register projectId", (replayRegs ! #projectId) == (forwardRegs ! #projectId))
              , (prefix <> "register phase", (replayRegs ! #phase) == (forwardRegs ! #phase))
              ]
  where
    prefix = "forward/replay equality: RegisterProject from ProjectEmpty -- "