orville-postgresql-1.0.0.0: test/Test/Expr/SequenceDefinition.hs
module Test.Expr.SequenceDefinition
( sequenceDefinitionTests
)
where
import qualified Control.Monad.IO.Class as MIO
import Hedgehog ((===))
import qualified Orville.PostgreSQL as Orville
import qualified Orville.PostgreSQL.Expr as Expr
import qualified Orville.PostgreSQL.PgCatalog as PgCatalog
import qualified Test.PgAssert as PgAssert
import qualified Test.Property as Property
sequenceDefinitionTests :: Orville.ConnectionPool -> Property.Group
sequenceDefinitionTests pool =
Property.group
"Expr - SequenceDefinition"
[ prop_createWithNoOptions pool
, prop_createWithWithOptions pool
]
prop_createWithNoOptions :: Property.NamedDBProperty
prop_createWithNoOptions =
Property.singletonNamedDBProperty "Create sequence with no options" $ \pool -> do
MIO.liftIO $
Orville.runOrville pool $ do
Orville.executeVoid Orville.DDLQuery $ Expr.dropSequenceExpr (Just Expr.ifExists) exprSequenceName
Orville.executeVoid Orville.DDLQuery $ Expr.createSequenceExpr exprSequenceName Nothing Nothing Nothing Nothing Nothing Nothing
_ <- PgAssert.assertSequenceExists pool sequenceNameString
pure ()
prop_createWithWithOptions :: Property.NamedDBProperty
prop_createWithWithOptions =
Property.singletonNamedDBProperty "Create sequence with no options" $ \pool -> do
MIO.liftIO $
Orville.runOrville pool $ do
Orville.executeVoid Orville.DDLQuery $ Expr.dropSequenceExpr (Just Expr.ifExists) exprSequenceName
Orville.executeVoid Orville.DDLQuery $
Expr.createSequenceExpr
exprSequenceName
(Just $ Expr.incrementBy 2)
(Just $ Expr.minValue 100)
(Just $ Expr.maxValue 200)
(Just $ Expr.startWith 107)
(Just $ Expr.cache 10)
(Just Expr.cycle)
relation <- PgAssert.assertSequenceExists pool sequenceNameString
pgSequence <- PgAssert.assertRelationHasPgSequence relation
PgCatalog.pgSequenceIncrement pgSequence === 2
PgCatalog.pgSequenceStart pgSequence === 107
PgCatalog.pgSequenceMin pgSequence === 100
PgCatalog.pgSequenceMax pgSequence === 200
PgCatalog.pgSequenceCache pgSequence === 10
PgCatalog.pgSequenceCycle pgSequence === True
exprSequenceName :: Expr.Qualified Expr.SequenceName
exprSequenceName =
Expr.qualifySequence Nothing (Expr.sequenceName sequenceNameString)
sequenceNameString :: String
sequenceNameString =
"sequence_definition_test"