module Data.CQRS.Test.Internal.Scope
( ScopeM
, ask
, mkRunScope
, randomUUID
, verify
) where
import Control.Exception (bracket)
import Control.Monad.IO.Class (liftIO)
import Control.Monad.Trans.Reader (ReaderT, ask, runReaderT)
import Data.CQRS.Test.Internal.TestKitSettings
import Data.UUID.Types (UUID)
import System.Random (randomIO)
type ScopeM s r = ReaderT s IO r
verify :: IO r -> ScopeM s r
verify = liftIO
randomUUID :: ScopeM s UUID
randomUUID = liftIO $ randomIO
mkRunScope :: TestKitSettings a ctx -> (a -> IO s) -> (ScopeM s r -> IO r)
mkRunScope testKitSettings mkScope = \action -> do
bracket (tksSetUp testKitSettings)
(tksTearDown testKitSettings) $ \a -> do
mkScope a >>= runReaderT action