module Polysemy.Hasql.Test.Migration where import qualified Data.Text as Text import Hedgehog.Internal.Property (failWith) import Path (reldir) import qualified Polysemy.Test as Test import Polysemy.Test (Hedgehog, Test, liftH) import Sqel.Data.Migration (Migrations) import Sqel.Migration.Consistency (migrationConsistency) testMigration' :: ∀ migs r . Members [Test, Hedgehog IO, Embed IO] r => Migrations (Sem r) migs -> Bool -> Sem r () testMigration' :: forall (migs :: [Mig]) (r :: EffectRow). Members '[Test, Hedgehog IO, Embed IO] r => Migrations (Sem r) migs -> Bool -> Sem r () testMigration' Migrations (Sem r) migs migs Bool write = forall a. HasCallStack => (HasCallStack => a) -> a withFrozenCallStack do Path Abs Dir dir <- forall p (r :: EffectRow). Member Test r => Path Rel p -> Sem r (Path Abs p) Test.fixturePath [reldir|migration|] forall (m :: * -> *) (migs :: [Mig]). MonadIO m => Path Abs Dir -> Migrations m migs -> Bool -> m (Maybe (NonEmpty Text)) migrationConsistency Path Abs Dir dir Migrations (Sem r) migs migs Bool write forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= \case Just NonEmpty Text errors -> forall (m :: * -> *) a (r :: EffectRow). Member (Hedgehog m) r => TestT m a -> Sem r a liftH (forall (m :: * -> *) a. (MonadTest m, HasCallStack) => Maybe Diff -> FilePath -> m a failWith forall a. Maybe a Nothing (forall a. ToString a => a -> FilePath toString (Text -> [Text] -> Text Text.intercalate Text "\n" (forall (t :: * -> *) a. Foldable t => t a -> [a] toList NonEmpty Text errors)))) Maybe (NonEmpty Text) Nothing -> forall (f :: * -> *). Applicative f => f () unit testMigration :: ∀ migs r . Members [Test, Hedgehog IO, Embed IO] r => Migrations (Sem r) migs -> Bool -> Sem r () testMigration :: forall (migs :: [Mig]) (r :: EffectRow). Members '[Test, Hedgehog IO, Embed IO] r => Migrations (Sem r) migs -> Bool -> Sem r () testMigration Migrations (Sem r) migs migs Bool write = forall a. HasCallStack => (HasCallStack => a) -> a withFrozenCallStack do forall (migs :: [Mig]) (r :: EffectRow). Members '[Test, Hedgehog IO, Embed IO] r => Migrations (Sem r) migs -> Bool -> Sem r () testMigration' Migrations (Sem r) migs migs Bool write