main.hs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. {-# LANGUAGE ExistentialQuantification #-}
  2. {-# LANGUAGE FlexibleInstances #-}
  3. {-# LANGUAGE QuasiQuotes #-}
  4. {-# LANGUAGE MultiParamTypeClasses #-}
  5. {-# LANGUAGE TemplateHaskell #-}
  6. {-# LANGUAGE TypeFamilies #-}
  7. {-# LANGUAGE UndecidableInstances #-}
  8. {-# OPTIONS_GHC -Wno-unused-top-binds #-}
  9. import PgInit
  10. import Data.Aeson
  11. import qualified Data.ByteString as BS
  12. import Data.IntMap (IntMap)
  13. import Data.Fixed
  14. import qualified Data.Text as T
  15. import Data.Time
  16. import Test.QuickCheck
  17. -- FIXME: should probably be used?
  18. -- import qualified ArrayAggTest
  19. import qualified CompositeTest
  20. import qualified CustomPersistFieldTest
  21. import qualified CustomPrimaryKeyReferenceTest
  22. import qualified DataTypeTest
  23. import qualified EmbedOrderTest
  24. import qualified EmbedTest
  25. import qualified EmptyEntityTest
  26. import qualified EquivalentTypeTestPostgres
  27. import qualified HtmlTest
  28. import qualified JSONTest
  29. import qualified LargeNumberTest
  30. import qualified MaxLenTest
  31. import qualified MigrationColumnLengthTest
  32. import qualified MigrationOnlyTest
  33. import qualified MpsNoPrefixTest
  34. import qualified PersistentTest
  35. import qualified PersistUniqueTest
  36. import qualified PrimaryTest
  37. import qualified RawSqlTest
  38. import qualified ReadWriteTest
  39. import qualified Recursive
  40. import qualified RenameTest
  41. import qualified SumTypeTest
  42. import qualified TransactionLevelTest
  43. import qualified TreeTest
  44. import qualified UniqueTest
  45. import qualified UpsertTest
  46. type Tuple = (,)
  47. -- Test lower case names
  48. share [mkPersist persistSettings, mkMigrate "dataTypeMigrate"] [persistLowerCase|
  49. DataTypeTable no-json
  50. text Text
  51. textMaxLen Text maxlen=100
  52. bytes ByteString
  53. bytesTextTuple (Tuple ByteString Text)
  54. bytesMaxLen ByteString maxlen=100
  55. int Int
  56. intList [Int]
  57. intMap (IntMap Int)
  58. double Double
  59. bool Bool
  60. day Day
  61. pico Pico
  62. time TimeOfDay
  63. utc UTCTime
  64. jsonb Value
  65. |]
  66. instance Arbitrary DataTypeTable where
  67. arbitrary = DataTypeTable
  68. <$> arbText -- text
  69. <*> (T.take 100 <$> arbText) -- textManLen
  70. <*> arbitrary -- bytes
  71. <*> liftA2 (,) arbitrary arbText -- bytesTextTuple
  72. <*> (BS.take 100 <$> arbitrary) -- bytesMaxLen
  73. <*> arbitrary -- int
  74. <*> arbitrary -- intList
  75. <*> arbitrary -- intMap
  76. <*> arbitrary -- double
  77. <*> arbitrary -- bool
  78. <*> arbitrary -- day
  79. <*> arbitrary -- pico
  80. <*> (arbitrary) -- utc
  81. <*> (truncateUTCTime =<< arbitrary) -- utc
  82. <*> arbitrary -- value
  83. setup :: MonadIO m => Migration -> ReaderT SqlBackend m ()
  84. setup migration = do
  85. printMigration migration
  86. runMigrationUnsafe migration
  87. main :: IO ()
  88. main = do
  89. runConn $ do
  90. mapM_ setup
  91. [ PersistentTest.testMigrate
  92. , PersistentTest.noPrefixMigrate
  93. , EmbedTest.embedMigrate
  94. , EmbedOrderTest.embedOrderMigrate
  95. , LargeNumberTest.numberMigrate
  96. , UniqueTest.uniqueMigrate
  97. , MaxLenTest.maxlenMigrate
  98. , Recursive.recursiveMigrate
  99. , CompositeTest.compositeMigrate
  100. , TreeTest.treeMigrate
  101. , PersistUniqueTest.migration
  102. , RenameTest.migration
  103. , CustomPersistFieldTest.customFieldMigrate
  104. , PrimaryTest.migration
  105. , CustomPrimaryKeyReferenceTest.migration
  106. , MigrationColumnLengthTest.migration
  107. , TransactionLevelTest.migration
  108. ]
  109. PersistentTest.cleanDB
  110. hspec $ do
  111. RenameTest.specsWith db
  112. DataTypeTest.specsWith db
  113. (Just (runMigrationSilent dataTypeMigrate))
  114. [ TestFn "text" dataTypeTableText
  115. , TestFn "textMaxLen" dataTypeTableTextMaxLen
  116. , TestFn "bytes" dataTypeTableBytes
  117. , TestFn "bytesTextTuple" dataTypeTableBytesTextTuple
  118. , TestFn "bytesMaxLen" dataTypeTableBytesMaxLen
  119. , TestFn "int" dataTypeTableInt
  120. , TestFn "intList" dataTypeTableIntList
  121. , TestFn "intMap" dataTypeTableIntMap
  122. , TestFn "bool" dataTypeTableBool
  123. , TestFn "day" dataTypeTableDay
  124. , TestFn "time" (DataTypeTest.roundTime . dataTypeTableTime)
  125. , TestFn "utc" (DataTypeTest.roundUTCTime . dataTypeTableUtc)
  126. , TestFn "jsonb" dataTypeTableJsonb
  127. ]
  128. [ ("pico", dataTypeTablePico) ]
  129. dataTypeTableDouble
  130. HtmlTest.specsWith
  131. db
  132. (Just (runMigrationSilent HtmlTest.htmlMigrate))
  133. EmbedTest.specsWith db
  134. EmbedOrderTest.specsWith db
  135. LargeNumberTest.specsWith db
  136. UniqueTest.specsWith db
  137. MaxLenTest.specsWith db
  138. Recursive.specsWith db
  139. SumTypeTest.specsWith db (Just (runMigrationSilent SumTypeTest.sumTypeMigrate))
  140. MigrationOnlyTest.specsWith db
  141. (Just
  142. $ runMigrationSilent MigrationOnlyTest.migrateAll1
  143. >> runMigrationSilent MigrationOnlyTest.migrateAll2
  144. )
  145. PersistentTest.specsWith db
  146. ReadWriteTest.specsWith db
  147. PersistentTest.filterOrSpecs db
  148. RawSqlTest.specsWith db
  149. UpsertTest.specsWith
  150. db
  151. UpsertTest.Don'tUpdateNull
  152. UpsertTest.UpsertPreserveOldKey
  153. MpsNoPrefixTest.specsWith db
  154. EmptyEntityTest.specsWith db (Just (runMigrationSilent EmptyEntityTest.migration))
  155. CompositeTest.specsWith db
  156. TreeTest.specsWith db
  157. PersistUniqueTest.specsWith db
  158. PrimaryTest.specsWith db
  159. CustomPersistFieldTest.specsWith db
  160. CustomPrimaryKeyReferenceTest.specsWith db
  161. MigrationColumnLengthTest.specsWith db
  162. EquivalentTypeTestPostgres.specs
  163. TransactionLevelTest.specsWith db
  164. JSONTest.specs
  165. -- FIXME: not used, probably should?
  166. -- ArrayAggTest.specs db