packages feed

polysemy-log-0.1.0.0: test/Polysemy/Log/Test/DataLogTest.hs

module Polysemy.Log.Test.DataLogTest where

import Polysemy.Test (UnitTest, assertEq, runTestAuto)

import Polysemy.Log.Atomic (interpretDataLogAtomic)
import qualified Polysemy.Log.Data.DataLog as DataLog
import Polysemy.Log.Data.DataLog (DataLog)

data CustomLog =
  User Text
  |
  Fatal Int
  deriving (Eq, Show)

prog ::
  Members [DataLog CustomLog, AtomicState [CustomLog]] r =>
  Sem r [CustomLog]
prog = do
  DataLog.dataLog (User "user")
  DataLog.dataLog (Fatal 5)
  atomicGet

target :: [CustomLog]
target =
  [Fatal 5, User "user"]

test_dataLog :: UnitTest
test_dataLog =
  runTestAuto do
    assertEq @_ @IO target =<< interpretDataLogAtomic @CustomLog prog