{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
-- | Testing with an in-memory sqlite database using persistent-sqlite
module Test.Syd.Persistent
( runSqlPool,
runPersistentTest,
migrationRunner,
)
where
import Control.Monad.Reader
import Database.Persist.Sql
import Test.Syd
instance IsTest (SqlPersistM ()) where
type Arg1 (SqlPersistM ()) = ()
type Arg2 (SqlPersistM ()) = ConnectionPool
runTest func = runTest (\() -> func)
instance IsTest (outerArgs -> SqlPersistM ()) where
type Arg1 (outerArgs -> SqlPersistM ()) = outerArgs
type Arg2 (outerArgs -> SqlPersistM ()) = ConnectionPool
runTest func = runTest (\outerArgs pool -> runPersistentTest pool (func outerArgs))
-- | A flipped version of 'runSqlPool' to run your tests
runPersistentTest :: ConnectionPool -> SqlPersistM a -> IO a
runPersistentTest = flip runSqlPersistMPool
-- | Helper function to run a 'Migration' before/in a test suite that works accross versions of @persistent@.
#if MIN_VERSION_persistent(2,10,2)
migrationRunner :: MonadIO m => Migration -> ReaderT SqlBackend m ()
migrationRunner = void . runMigrationQuiet
#else
migrationRunner :: MonadIO m => Migration -> ReaderT SqlBackend m ()
migrationRunner = runMigration
#endif