123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- {-# LANGUAGE ExistentialQuantification #-}
- {-# LANGUAGE FlexibleInstances #-}
- {-# LANGUAGE QuasiQuotes #-}
- {-# LANGUAGE MultiParamTypeClasses #-}
- {-# LANGUAGE TemplateHaskell #-}
- {-# LANGUAGE TypeFamilies #-}
- {-# LANGUAGE UndecidableInstances #-}
- {-# OPTIONS_GHC -Wno-unused-top-binds #-}
- import MyInit
- import Data.Time (Day, UTCTime (..), TimeOfDay, timeToTimeOfDay, timeOfDayToTime)
- import Data.Time.Clock.POSIX (utcTimeToPOSIXSeconds, posixSecondsToUTCTime)
- import Data.Fixed
- import Test.QuickCheck
- import qualified Data.Text as T
- import Data.IntMap (IntMap)
- import qualified Data.ByteString as BS
- import qualified CompositeTest
- import qualified CustomPersistFieldTest
- import qualified CustomPrimaryKeyReferenceTest
- import qualified DataTypeTest
- import qualified EmbedOrderTest
- import qualified EmbedTest
- import qualified EmptyEntityTest
- import qualified EquivalentTypeTest
- import qualified HtmlTest
- import qualified InsertDuplicateUpdate
- import qualified LargeNumberTest
- import qualified MaxLenTest
- import qualified MigrationColumnLengthTest
- import qualified MigrationIdempotencyTest
- import qualified MigrationOnlyTest
- import qualified MpsNoPrefixTest
- import qualified PersistentTest
- import qualified PersistUniqueTest
- -- FIXME: Not used... should it be?
- -- import qualified PrimaryTest
- import qualified RawSqlTest
- import qualified ReadWriteTest
- import qualified Recursive
- import qualified RenameTest
- import qualified SumTypeTest
- import qualified TransactionLevelTest
- import qualified UniqueTest
- import qualified UpsertTest
- type Tuple a b = (a, b)
- -- Test lower case names
- share [mkPersist persistSettings, mkMigrate "dataTypeMigrate"] [persistLowerCase|
- DataTypeTable no-json
- text Text
- textMaxLen Text maxlen=100
- bytes ByteString
- bytesTextTuple (Tuple ByteString Text)
- bytesMaxLen ByteString maxlen=100
- int Int
- intList [Int]
- intMap (IntMap Int)
- double Double
- bool Bool
- day Day
- pico Pico
- time TimeOfDay
- utc UTCTime
- -- For MySQL, provide extra tests for time fields with fractional seconds,
- -- since the default (used above) is to have no fractional part. This
- -- requires the server version to be at least 5.6.4, and should be switched
- -- off for older servers by defining OLD_MYSQL.
- timeFrac TimeOfDay sqltype=TIME(6)
- utcFrac UTCTime sqltype=DATETIME(6)
- |]
- instance Arbitrary (DataTypeTableGeneric backend) where
- arbitrary = DataTypeTable
- <$> arbText -- text
- <*> (T.take 100 <$> arbText) -- textManLen
- <*> arbitrary -- bytes
- <*> liftA2 (,) arbitrary arbText -- bytesTextTuple
- <*> (BS.take 100 <$> arbitrary) -- bytesMaxLen
- <*> arbitrary -- int
- <*> arbitrary -- intList
- <*> arbitrary -- intMap
- <*> arbitrary -- double
- <*> arbitrary -- bool
- <*> arbitrary -- day
- <*> arbitrary -- pico
- <*> (truncateTimeOfDay =<< arbitrary) -- time
- <*> (truncateUTCTime =<< arbitrary) -- utc
- <*> (truncateTimeOfDay =<< arbitrary) -- timeFrac
- <*> (truncateUTCTime =<< arbitrary) -- utcFrac
- setup :: MonadIO m => Migration -> ReaderT SqlBackend m ()
- setup migration = do
- printMigration migration
- runMigrationUnsafe migration
- main :: IO ()
- main = do
- runConn $ do
- mapM_ setup
- [ PersistentTest.testMigrate
- , PersistentTest.noPrefixMigrate
- , EmbedTest.embedMigrate
- , EmbedOrderTest.embedOrderMigrate
- , LargeNumberTest.numberMigrate
- , UniqueTest.uniqueMigrate
- , MaxLenTest.maxlenMigrate
- , Recursive.recursiveMigrate
- , CompositeTest.compositeMigrate
- , PersistUniqueTest.migration
- , RenameTest.migration
- , CustomPersistFieldTest.customFieldMigrate
- , InsertDuplicateUpdate.duplicateMigrate
- , MigrationIdempotencyTest.migration
- , CustomPrimaryKeyReferenceTest.migration
- , MigrationColumnLengthTest.migration
- , TransactionLevelTest.migration
- ]
- PersistentTest.cleanDB
- hspec $ do
- RenameTest.specsWith db
- DataTypeTest.specsWith
- db
- (Just (runMigrationSilent dataTypeMigrate))
- [ TestFn "text" dataTypeTableText
- , TestFn "textMaxLen" dataTypeTableTextMaxLen
- , TestFn "bytes" dataTypeTableBytes
- , TestFn "bytesTextTuple" dataTypeTableBytesTextTuple
- , TestFn "bytesMaxLen" dataTypeTableBytesMaxLen
- , TestFn "int" dataTypeTableInt
- , TestFn "intList" dataTypeTableIntList
- , TestFn "intMap" dataTypeTableIntMap
- , TestFn "bool" dataTypeTableBool
- , TestFn "day" dataTypeTableDay
- , TestFn "time" (roundTime . dataTypeTableTime)
- , TestFn "utc" (roundUTCTime . dataTypeTableUtc)
- , TestFn "timeFrac" (dataTypeTableTimeFrac)
- , TestFn "utcFrac" (dataTypeTableUtcFrac)
- ]
- [ ("pico", dataTypeTablePico) ]
- dataTypeTableDouble
- HtmlTest.specsWith
- db
- (Just (runMigrationSilent HtmlTest.htmlMigrate))
- EmbedTest.specsWith db
- EmbedOrderTest.specsWith db
- LargeNumberTest.specsWith db
- UniqueTest.specsWith db
- MaxLenTest.specsWith db
- Recursive.specsWith db
- SumTypeTest.specsWith db (Just (runMigrationSilent SumTypeTest.sumTypeMigrate))
- MigrationOnlyTest.specsWith db
- (Just
- $ runMigrationSilent MigrationOnlyTest.migrateAll1
- >> runMigrationSilent MigrationOnlyTest.migrateAll2
- )
- PersistentTest.specsWith db
- PersistentTest.filterOrSpecs db
- ReadWriteTest.specsWith db
- RawSqlTest.specsWith db
- UpsertTest.specsWith
- db
- UpsertTest.Don'tUpdateNull
- UpsertTest.UpsertPreserveOldKey
- MpsNoPrefixTest.specsWith db
- EmptyEntityTest.specsWith db (Just (runMigrationSilent EmptyEntityTest.migration))
- CompositeTest.specsWith db
- PersistUniqueTest.specsWith db
- CustomPersistFieldTest.specsWith db
- CustomPrimaryKeyReferenceTest.specsWith db
- InsertDuplicateUpdate.specs
- MigrationColumnLengthTest.specsWith db
- EquivalentTypeTest.specsWith db
- TransactionLevelTest.specsWith db
- MigrationIdempotencyTest.specsWith db
- roundFn :: RealFrac a => a -> Integer
- roundFn = round
- roundTime :: TimeOfDay -> TimeOfDay
- roundTime t = timeToTimeOfDay $ fromIntegral $ roundFn $ timeOfDayToTime t
- roundUTCTime :: UTCTime -> UTCTime
- roundUTCTime t =
- posixSecondsToUTCTime $ fromIntegral $ roundFn $ utcTimeToPOSIXSeconds t
|