polysemy-hasql-0.0.1.0: integration/Polysemy/Hasql/Test/AtomicStateTest.hs
module Polysemy.Hasql.Test.AtomicStateTest where
import Exon (exon)
import Polysemy.Db.Data.DbError (DbError)
import Polysemy.Test (UnitTest, (===))
import Sqel.Data.TableSchema (TableSchema)
import Sqel.PgType (MkTableSchema (tableSchema))
import Sqel.Prim (prims)
import Sqel.Product (prod)
import Polysemy.Hasql.Interpreter.AtomicState (interpretAtomicStateDb)
import Polysemy.Hasql.Interpreter.DbTable (interpretTable)
import Polysemy.Hasql.Test.RunIntegration (integrationTest)
data Cat =
Cat {
number :: Int,
name :: Text
}
deriving stock (Eq, Show, Generic)
test_atomicStateDb :: UnitTest
test_atomicStateDb =
integrationTest $ interpretTable ts do
r <- interpretAtomicStateDb ts (pure (Cat 5 "fuzzyboots")) do
restop @DbError do
atomicModify' \ (Cat _ nam) -> Cat 200 [exon|mr. #{nam}|]
atomicGet
Cat 200 "mr. fuzzyboots" === r
where
ts :: TableSchema Cat
ts = tableSchema (prod prims)