packages feed

keiro-dsl-0.2.0.0: test/conformance-intake-runtime/Main.hs

{- | EP-4 runtime conformance: the scaffolded intake @Inbox@ module's disposition
wiring — the dedupe policy (a real @Keiro.Inbox.Types.InboxDedupePolicy@) and
the disposition over the real @InboxResult@ — compiled against the LIVE keiro
runtime. Running it pins the two dangerous inversions: a duplicate redelivery
is ackOk (success), and a previously-failed delivery dead-letters (not retry).
-}
module Main (main) where

import Control.Monad (unless)
import Generated.HospitalCapacity.IncidentInbox.Inbox (InboxAck (..), inboxDisposition, inboxPersistence)
import Keiro.Inbox.Types (InboxPersistence (..), InboxResult (..))
import System.Exit (exitFailure)

main :: IO ()
main = do
    let dupOk = inboxDisposition (InboxDuplicate :: InboxResult ()) == InboxAckOk
        pfOk = inboxDisposition (InboxPreviouslyFailed Nothing :: InboxResult ()) == InboxDeadLetter
        procOk = inboxDisposition (InboxProcessed () :: InboxResult ()) == InboxAckOk
        ipOk = inboxDisposition (InboxInProgress :: InboxResult ()) == InboxRetry
        persistenceOk = inboxPersistence == PersistDedupeOnly
    putStrLn ("duplicate => ackOk (inversion 1): " <> show dupOk)
    putStrLn ("previouslyFailed => deadLetter (inversion 2): " <> show pfOk)
    putStrLn ("processed => ackOk: " <> show procOk)
    putStrLn ("inProgress => retry: " <> show ipOk)
    putStrLn ("success persistence => dedupe-only: " <> show persistenceOk)
    unless (dupOk && pfOk && procOk && ipOk && persistenceOk) exitFailure