polysemy-hasql-0.0.1.0: integration/Polysemy/Hasql/Test/RetryTest.hs
module Polysemy.Hasql.Test.RetryTest where
import qualified Hasql.Connection as Hasql
import Hasql.Decoders (column, int8, nonNullable)
import Polysemy.Db.Data.DbConnectionError (DbConnectionError)
import qualified Polysemy.Db.Data.DbError as DbError
import Polysemy.Db.Data.DbError (DbError)
import Polysemy.Test (Hedgehog, UnitTest, assertEq)
import Time (Seconds (Seconds))
import Sqel.Statement (unprepared)
import qualified Polysemy.Hasql.Effect.Database as Database
import Polysemy.Hasql.Effect.Database (Databases, withDatabaseUnique)
import qualified Polysemy.Hasql.Effect.DbConnectionPool as DbConnectionPool
import Polysemy.Hasql.Effect.DbConnectionPool (DbConnectionPool)
import Polysemy.Hasql.Test.RunIntegration (integrationTest)
prog ::
Members [Hedgehog IO, Databases, DbConnectionPool !! DbConnectionError, Stop DbError, Embed IO] r =>
Sem r ()
prog = do
withDatabaseUnique (Just "retry") do
assertEq 1 =<< restop run
conn <- stopNote "no connection" =<< resumeHoist DbError.Connection (DbConnectionPool.unsafeGet "retry")
embed (Hasql.release conn)
assertEq 1 =<< restop (Database.retry (Seconds 1) (Just 1) run)
where
run = Database.statement () stmt
stmt = runIdentity <$> unprepared "select 1" (column (nonNullable int8)) mempty
test_retry :: UnitTest
test_retry =
integrationTest do
prog