packages feed

keiro-dsl-0.2.0.0: test/conformance-v2/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 (..), decodeRaw, 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)
    , ("upcaster wired: a v1 TransferReservationCreated payload decodes through the chain", upcastsTransferReservationCreated)
    ]

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 "sample"))

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

upcastsTransferReservationCreated :: Bool
upcastsTransferReservationCreated =
    either
        (const False)
        (const True)
        (decodeRaw reservationCodec (EventType "TransferReservationCreated") 1 (encodeReservationEvent sampleEventTransferReservationCreated))