{-# LANGUAGE ExistentialQuantification #-} {-# LANGUAGE OverloadedStrings, DataKinds, FlexibleInstances #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# OPTIONS_GHC -Wno-unused-top-binds #-} module MigrationReferenceSpec where import PgInit import Control.Monad.Trans.Writer (censor, mapWriterT) import Data.Text (Text, isInfixOf) share [mkPersist sqlSettings, mkMigrate "referenceMigrate"] [persistLowerCase| LocationCapabilities Id Text bio Text LocationCapabilitiesPrintingProcess locationCapabilitiesId LocationCapabilitiesId LocationCapabilitiesPrintingFinish locationCapabilitiesId LocationCapabilitiesId LocationCapabilitiesSubstrate locationCapabilitiesId LocationCapabilitiesId |] spec :: Spec spec = describe "MigrationReferenceSpec" $ do it "works" $ runConnAssert $ do let noForeignKeys :: CautiousMigration -> CautiousMigration noForeignKeys = filter ((not . isReference) . snd) onlyForeignKeys :: CautiousMigration -> CautiousMigration onlyForeignKeys = filter (isReference . snd) isReference :: Text -> Bool isReference migration = "REFERENCES" `isInfixOf` migration runMigration $ mapWriterT (censor noForeignKeys) $ referenceMigrate runMigration $ mapWriterT (censor onlyForeignKeys) $ referenceMigrate