polysemy-hasql-0.0.1.0: integration/Polysemy/Hasql/Test/WithInitTest.hs
module Polysemy.Hasql.Test.WithInitTest where
import Conc (interpretAtomic)
import Hasql.Decoders (column, int8, nonNullable)
import Polysemy.Db.Data.DbError (DbError)
import Polysemy.Test (Hedgehog, UnitTest, assertEq)
import Sqel.Statement (unprepared)
import Polysemy.Hasql.Data.InitDb (InitDb (InitDb))
import qualified Polysemy.Hasql.Effect.Database as Database
import Polysemy.Hasql.Effect.Database (Database)
import Polysemy.Hasql.Test.RunIntegration (integrationTest)
prog ::
Members [Hedgehog IO, Database, AtomicState Int] r =>
Sem r Int
prog = do
assertEq 1 =<< run
Database.release
assertEq 1 =<< run
assertEq 1 =<< run
pure ()
atomicGet
where
run = Database.withInit initDb (Database.statement () stmt)
stmt = runIdentity <$> unprepared "select 1" (column (nonNullable int8)) mempty
initDb = (InitDb "test" False \ _ -> atomicModify' (1 +))
test_withInit :: UnitTest
test_withInit = do
integrationTest do
assertEq 2 =<< restop @DbError @Database (interpretAtomic 0 prog)