diff --git a/persistent-sqlite/test/main.hs b/persistent-sqlite/test/main.hs index f8a7a87ea..3f097a927 100644 --- a/persistent-sqlite/test/main.hs +++ b/persistent-sqlite/test/main.hs @@ -43,6 +43,7 @@ import qualified RawSqlTest import qualified ReadWriteTest import qualified Recursive import qualified RenameTest +import qualified SchemaTest import qualified SumTypeTest import qualified TransactionLevelTest import qualified TypeLitFieldDefsTest @@ -175,6 +176,7 @@ main = do , MigrationColumnLengthTest.migration , TransactionLevelTest.migration , LongIdentifierTest.migration + , SchemaTest.migration ] PersistentTest.cleanDB ForeignKey.cleanDB @@ -243,6 +245,7 @@ main = do MigrationTest.specsWith db LongIdentifierTest.specsWith db GeneratedColumnTestSQL.specsWith db + SchemaTest.specsWith db it "issue #328" $ asIO $ runSqliteInfo (mkSqliteConnectionInfo ":memory:") $ do void $ runMigrationSilent migrateAll diff --git a/persistent-test/persistent-test.cabal b/persistent-test/persistent-test.cabal index 72e900b80..a75414e96 100644 --- a/persistent-test/persistent-test.cabal +++ b/persistent-test/persistent-test.cabal @@ -15,7 +15,7 @@ bug-reports: https://github.com/yesodweb/persistent/issues extra-source-files: ChangeLog.md library - exposed-modules: + exposed-modules: CompositeTest CustomPersistField CustomPersistFieldTest @@ -51,6 +51,7 @@ library RenameTest Recursive SumTypeTest + SchemaTest TransactionLevelTest TreeTest TypeLitFieldDefsTest @@ -60,7 +61,7 @@ library hs-source-dirs: src - build-depends: + build-depends: base >= 4.9 && < 5 , aeson >= 1.0 , blaze-html >= 0.9 diff --git a/persistent-test/src/SchemaTest.hs b/persistent-test/src/SchemaTest.hs new file mode 100644 index 000000000..64bf79d66 --- /dev/null +++ b/persistent-test/src/SchemaTest.hs @@ -0,0 +1,32 @@ +{-# LANGUAGE UndecidableInstances #-} +module SchemaTest where + +import Init +import qualified PersistentTestModels as PTM + +share [mkPersist persistSettings, mkMigrate "migration"] [persistLowerCase| +Person schema=my_special_schema + name Text + age Int + weight Int + deriving Show Eq +|] + +cleanDB :: (MonadIO m, PersistQuery backend, PersistEntityBackend Person ~ backend) => ReaderT backend m () +cleanDB = do + deleteWhere ([] :: [Filter Person]) + deleteWhere ([] :: [Filter PTM.Person]) + +specsWith :: (MonadIO m, MonadFail m) => RunDb SqlBackend m -> Spec +specsWith runDb = describe "schema support" $ do + it "insert a Person under non-default schema" $ runDb $ do + insert_ $ Person "name" 1 2 + return () + it "insert PTM.Person and Person and check they end up in different tables" $ runDb $ do + cleanDB + insert_ $ Person "name" 1 2 + insert_ $ PTM.Person "name2" 3 Nothing + schemaPersonCount <- count ([] :: [Filter Person]) + ptmPersoncount <- count ([] :: [Filter PTM.Person]) + -- both tables should contain only one record despite similarly named Entities + schemaPersonCount + ptmPersoncount @== 2 diff --git a/persistent/test/Database/Persist/THSpec.hs b/persistent/test/Database/Persist/THSpec.hs index 0ea783206..cf9be8e51 100644 --- a/persistent/test/Database/Persist/THSpec.hs +++ b/persistent/test/Database/Persist/THSpec.hs @@ -318,6 +318,7 @@ spec = describe "THSpec" $ do EntityDef { entityHaskell = EntityNameHS "HasSimpleCascadeRef" , entityDB = EntityNameDB "HasSimpleCascadeRef" + , entitySchema = Nothing , entityId = EntityIdField FieldDef { fieldHaskell = FieldNameHS "Id"