pg-migrate-1.0.0.0: test/unit/Test/PublicApi.hs
module Test.PublicApi (tests) where
import Data.Set qualified as Set
import Database.PostgreSQL.Migrate
( DefinitionError,
Migration,
MigrationComponent,
MigrationPlan,
PlanError,
ledgerSchemaVersion,
migrationComponent,
migrationFingerprint,
migrationPlan,
migrationStatus,
sessionMigration,
transactionMigration,
verifyMigrationPlan,
)
import PgMigrate.Prelude
import Test.Tasty (TestTree, testGroup)
import Test.Tasty.HUnit (assertFailure, testCase)
tests :: TestTree
tests =
testGroup
"public API"
[ testCase "manual definitions compile through the singular public module" $
case publicPlan of
Left err -> assertFailure (show err)
Right (Left err) -> assertFailure (show err)
Right (Right plan) ->
length (show plan) `seq`
migrationStatus `seq`
verifyMigrationPlan `seq`
ledgerSchemaVersion `seq`
pure ()
]
publicPlan :: Either DefinitionError (Either PlanError MigrationPlan)
publicPlan = do
transaction <- publicTransaction
session <- publicSession
component <- publicComponent transaction session
pure (migrationPlan (component :| []))
publicTransaction :: Either DefinitionError Migration
publicTransaction =
transactionMigration "0001-transaction" (migrationFingerprint "transaction-v1") (pure ())
publicSession :: Either DefinitionError Migration
publicSession =
sessionMigration "0002-session" (migrationFingerprint "session-v1") (pure ())
publicComponent :: Migration -> Migration -> Either DefinitionError MigrationComponent
publicComponent transaction session =
migrationComponent "public-api" Set.empty (transaction :| [session])