module Conformance.Edge.Occupied (story) where
import Conformance.Story.Live
( Context (Context)
, Edge (..)
, EdgeRequest (..)
, Story
, compareWithModel
, observe
, submit
)
story :: Context reg wal -> Story reg wal step obs cmp ()
story :: forall reg wal step obs cmp.
Context reg wal -> Story reg wal step obs cmp ()
story (Context reg
registry wal
holder) = do
EdgeRequest wal
-> ProgramT (Step (LiveI reg wal step obs cmp)) Identity ()
forall {wal} {a} {obs} {cmp}.
EdgeRequest wal
-> ProgramT (Step (LiveI reg wal a obs cmp)) Identity ()
checked (Edge -> String -> wal -> EdgeRequest wal
forall wal. Edge -> String -> wal -> EdgeRequest wal
EdgeRequest Edge
InsertActive String
"occupied" wal
holder)
EdgeRequest wal
-> ProgramT (Step (LiveI reg wal step obs cmp)) Identity ()
forall {wal} {a} {obs} {cmp}.
EdgeRequest wal
-> ProgramT (Step (LiveI reg wal a obs cmp)) Identity ()
checked (Edge -> String -> wal -> EdgeRequest wal
forall wal. Edge -> String -> wal -> EdgeRequest wal
EdgeRequest Edge
InsertActive String
"occupied" wal
holder)
EdgeRequest wal
-> ProgramT (Step (LiveI reg wal step obs cmp)) Identity ()
forall {wal} {a} {obs} {cmp}.
EdgeRequest wal
-> ProgramT (Step (LiveI reg wal a obs cmp)) Identity ()
checked (Edge -> String -> wal -> EdgeRequest wal
forall wal. Edge -> String -> wal -> EdgeRequest wal
EdgeRequest Edge
UpdateActive String
"occupied" wal
holder)
where
checked :: EdgeRequest wal
-> ProgramT (Step (LiveI reg wal a obs cmp)) Identity ()
checked EdgeRequest wal
request = do
step <- reg -> EdgeRequest wal -> Story reg wal a obs cmp a
forall reg wal step obs cmp.
reg -> EdgeRequest wal -> Story reg wal step obs cmp step
submit reg
registry EdgeRequest wal
request
observation <- observe step
_ <- compareWithModel step observation
pure ()