-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE MonoLocalBinds #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE RecordWildCards #-}
import Control.Exception
import Control.Monad
-import Control.Monad.Base (liftBase)
-import Control.Monad.Trans.Control (MonadBaseControl)
-import qualified Data.ByteString.Char8 as BSC
-import qualified Database.Postgres.Temp as Temp
-import Generics.SOP (K)
+import Control.Monad.Base (liftBase)
+import qualified Data.ByteString.Char8 as BSC
+import qualified Database.Postgres.Temp as Temp
+import Generics.SOP (K)
import Squeal.PostgreSQL
-import Squeal.PostgreSQL.Migration
import Squeal.PostgreSQL.Pool
import Test.Hspec
-- ^ Pool of 50 connections to the temporary @postgres@
}
-type Migrations schema m a = (MonadBaseControl IO m) =>
- PQ (("schema_migrations" ::: Table MigrationsTable) ': '[])
- (("schema_migrations" ::: Table MigrationsTable) ': schema) m a
-
type Fixtures schema = (Pool (K Connection schema) -> IO ())
type Actions schema a = PoolPQ schema IO a
-type SquealContext (schema :: SchemaType) = TestDB (K Connection schema)
+type SquealContext schema = TestDB (K Connection schema)
-- | Start a temporary @postgres@ process and create a pool of connections to it
setupDB
- :: Migrations schema IO a
+ :: AlignedList (Migration (Terminally PQ IO)) schema0 schema
-> Fixtures schema
-> IO (SquealContext schema)
setupDB migration fixtures = do
singleStripe
keepConnectionForOneHour
poolSizeOfFifty
- withConnection connectionString migration
+ withConnection connectionString (migrateUp migration)
fixtures pool
pure TestDB {..}
--
-- hook for stopping a db.
describeDB
- :: Migrations schema IO a
+ :: AlignedList (Migration (Terminally PQ IO)) schema0 schema
-> Fixtures schema
-> String
-> SpecWith (SquealContext schema)