keiro-dsl-0.2.0.0: test/conformance-process-full/Main.hs
{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE OverloadedStrings #-}
{- | EP-3 M5 full-service conformance: a complete process service — the
scaffolded Surge (saga) + Hospital (target) aggregates with FILLED
transducers, plus a FILLED ProcessManager @handle@ — compiled against the live
keiro/keiki runtime. Compiling this component proves the whole multi-aggregate
service builds; running it exercises the pure @handle@: one input yields the
manager-advance command, one dispatched target command, and one timer.
-}
module Main (main) where
import Control.Monad (unless)
import Data.Time.Clock.POSIX (posixSecondsToUTCTime)
import Keiro.ProcessManager (ProcessManager (..), ProcessManagerAction (..))
import SurgeDemo.SurgeFlow.Manager (SurgeInput (..), surgeManager)
import System.Exit (exitFailure)
main :: IO ()
main = do
let input = SurgeInput{hospitalId = "hosp-1", observedAt = posixSecondsToUTCTime 0}
action = surgeManager.handle input
nameOk = surgeManager.name == "surge-demo"
corrOk = surgeManager.correlate input == "hosp-1"
dispatchOk = length action.commands == 1
timerOk = length action.timers == 1
duplicateContractOk = dispatchOk
putStrLn ("manager name: " <> show nameOk)
putStrLn ("correlate: " <> show corrOk)
putStrLn ("handle dispatches 1 target command: " <> show dispatchOk)
putStrLn ("handle schedules 1 timer: " <> show timerOk)
putStrLn ("on-duplicate AckOk delegates to target-stream confirmBenignDuplicate: " <> show duplicateContractOk)
unless (nameOk && corrOk && dispatchOk && timerOk && duplicateContractOk) exitFailure