packages feed

keiro-dsl-0.2.0.0: test/conformance/Generated/HospitalCapacity/Reservation/Harness.hs

{-# LANGUAGE OverloadedStrings #-}

-- @generated by keiro-dsl; do not edit. Regenerated from the .keiro spec.
module Generated.HospitalCapacity.Reservation.Harness (harnessAssertions) where

import Generated.HospitalCapacity.Reservation.Codec (encodeReservationEvent, parseReservationEvent, reservationCodec)
import Generated.HospitalCapacity.Reservation.Domain
import HospitalCapacity.Reservation.Holes (reservationTransducer)
import Keiki.Core (defaultValidationOptions, step, validateTransducer)
import Keiro.Codec (eventType)

{- | (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 reservationTransducer))
    , ("clock-free: spec samples no wall clock", True)
    , ("golden round-trip: TransferReservationCreated", roundTrips sampleEventTransferReservationCreated)
    , ("golden round-trip: TransferReservationConfirmed", roundTrips sampleEventTransferReservationConfirmed)
    , ("accepts RequestTransferReservation from ReservationUnrequested", acceptRequestTransferReservation)
    ]

roundTrips :: ReservationEvent -> Bool
roundTrips e = parseReservationEvent (eventType reservationCodec e) (encodeReservationEvent e) == Right e

sampleEventTransferReservationCreated :: ReservationEvent
sampleEventTransferReservationCreated = (TransferReservationCreated (TransferReservationCreatedData (TransferReservationId "sample") (HospitalId "sample") (CommandId "sample") RedTag Open False))

sampleEventTransferReservationConfirmed :: ReservationEvent
sampleEventTransferReservationConfirmed = (TransferReservationConfirmed (TransferReservationConfirmedData (TransferReservationId "sample") (HospitalId "sample") (CommandId "sample")))

acceptRequestTransferReservation :: Bool
acceptRequestTransferReservation =
    case step reservationTransducer (ReservationUnrequested, initialReservationRegs) ((RequestTransferReservation (RequestTransferReservationData (TransferReservationId "sample") (HospitalId "sample") (CommandId "sample") RedTag Open False))) of
        Just (v, _, _) -> v == ReservationHeld
        Nothing -> False