{-# LANGUAGE RecordWildCards #-} {-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -Wno-unused-top-binds #-} module GeneratedColumnTestSQL (specsWith) where import Database.Persist.TH import Init share [mkPersist sqlSettings, mkMigrate "migrate1", mkDeleteCascade sqlSettings] [persistLowerCase| GenTest sql=gen_test fieldOne Text Maybe fieldTwo Text Maybe fieldThree Text Maybe generated=COALESCE(field_one,field_two) deriving Show Eq MigrateTestV1 sql=gen_migrate_test sickness Int cromulence Int generated=5 |] share [mkPersist sqlSettings, mkMigrate "migrate2", mkDeleteCascade sqlSettings] [persistLowerCase| MigrateTestV2 sql=gen_migrate_test sickness Int generated=3 cromulence Int |] specsWith :: Runner SqlBackend m => RunDb SqlBackend m -> Spec specsWith :: RunDb SqlBackend m -> Spec specsWith RunDb SqlBackend m runDB = String -> Spec -> Spec forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "PersistLiteral field" (Spec -> Spec) -> Spec -> Spec forall a b. (a -> b) -> a -> b $ do String -> IO () -> SpecWith (Arg (IO ())) forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String "should read a generated column" (IO () -> SpecWith (Arg (IO ()))) -> IO () -> SpecWith (Arg (IO ())) forall a b. (a -> b) -> a -> b $ RunDb SqlBackend m runDB RunDb SqlBackend m -> RunDb SqlBackend m forall a b. (a -> b) -> a -> b $ do Text -> [PersistValue] -> ReaderT SqlBackend m () forall (m :: * -> *) backend. (MonadIO m, BackendCompatible SqlBackend backend) => Text -> [PersistValue] -> ReaderT backend m () rawExecute Text "DROP TABLE IF EXISTS gen_test;" [] Text -> [PersistValue] -> ReaderT SqlBackend m () forall (m :: * -> *) backend. (MonadIO m, BackendCompatible SqlBackend backend) => Text -> [PersistValue] -> ReaderT backend m () rawExecute Text "DROP TABLE IF EXISTS gen_migrate_test;" [] Migration -> ReaderT SqlBackend m () forall (m :: * -> *). MonadIO m => Migration -> ReaderT SqlBackend m () runMigration Migration migrate1 GenTest -> ReaderT SqlBackend m () forall backend record (m :: * -> *). (PersistStoreWrite backend, MonadIO m, PersistRecordBackend record backend) => record -> ReaderT backend m () insert_ GenTest :: Maybe Text -> Maybe Text -> Maybe Text -> GenTest GenTest { genTestFieldOne :: Maybe Text genTestFieldOne = Text -> Maybe Text forall a. a -> Maybe a Just Text "like, literally this exact string" , genTestFieldTwo :: Maybe Text genTestFieldTwo = Text -> Maybe Text forall a. a -> Maybe a Just Text "like, totally some other string" , genTestFieldThree :: Maybe Text genTestFieldThree = Maybe Text forall a. Maybe a Nothing } Just (Entity Key GenTest _ GenTest{Maybe Text genTestFieldThree :: Maybe Text genTestFieldTwo :: Maybe Text genTestFieldOne :: Maybe Text genTestFieldThree :: GenTest -> Maybe Text genTestFieldTwo :: GenTest -> Maybe Text genTestFieldOne :: GenTest -> Maybe Text ..}) <- [Filter GenTest] -> [SelectOpt GenTest] -> ReaderT SqlBackend m (Maybe (Entity GenTest)) forall backend (m :: * -> *) record. (PersistQueryRead backend, MonadIO m, PersistRecordBackend record backend) => [Filter record] -> [SelectOpt record] -> ReaderT backend m (Maybe (Entity record)) selectFirst [] [] IO () -> ReaderT SqlBackend m () forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO () -> ReaderT SqlBackend m ()) -> IO () -> ReaderT SqlBackend m () forall a b. (a -> b) -> a -> b $ Maybe Text genTestFieldThree Maybe Text -> Maybe Text -> IO () forall a. (HasCallStack, Eq a, Show a) => a -> a -> IO () @?= Text -> Maybe Text forall a. a -> Maybe a Just Text "like, literally this exact string" Key MigrateTestV1 k1 <- MigrateTestV1 -> ReaderT SqlBackend m (Key MigrateTestV1) forall backend record (m :: * -> *). (PersistStoreWrite backend, MonadIO m, PersistRecordBackend record backend) => record -> ReaderT backend m (Key record) insert (MigrateTestV1 -> ReaderT SqlBackend m (Key MigrateTestV1)) -> MigrateTestV1 -> ReaderT SqlBackend m (Key MigrateTestV1) forall a b. (a -> b) -> a -> b $ Int -> Int -> MigrateTestV1 MigrateTestV1 Int 0 Int 0 Just (MigrateTestV1 Int sickness1 Int cromulence1) <- Key MigrateTestV1 -> ReaderT SqlBackend m (Maybe MigrateTestV1) forall backend record (m :: * -> *). (PersistStoreRead backend, MonadIO m, PersistRecordBackend record backend) => Key record -> ReaderT backend m (Maybe record) get Key MigrateTestV1 k1 IO () -> ReaderT SqlBackend m () forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO () -> ReaderT SqlBackend m ()) -> IO () -> ReaderT SqlBackend m () forall a b. (a -> b) -> a -> b $ Int sickness1 Int -> Int -> IO () forall a. (HasCallStack, Eq a, Show a) => a -> a -> IO () @?= Int 0 IO () -> ReaderT SqlBackend m () forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO () -> ReaderT SqlBackend m ()) -> IO () -> ReaderT SqlBackend m () forall a b. (a -> b) -> a -> b $ Int cromulence1 Int -> Int -> IO () forall a. (HasCallStack, Eq a, Show a) => a -> a -> IO () @?= Int 5 String -> IO () -> SpecWith (Arg (IO ())) forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String "should support adding or removing generation expressions from columns" (IO () -> SpecWith (Arg (IO ()))) -> IO () -> SpecWith (Arg (IO ())) forall a b. (a -> b) -> a -> b $ RunDb SqlBackend m runDB RunDb SqlBackend m -> RunDb SqlBackend m forall a b. (a -> b) -> a -> b $ do Migration -> ReaderT SqlBackend m () forall (m :: * -> *). MonadIO m => Migration -> ReaderT SqlBackend m () runMigration Migration migrate2 Key MigrateTestV2 k2 <- MigrateTestV2 -> ReaderT SqlBackend m (Key MigrateTestV2) forall backend record (m :: * -> *). (PersistStoreWrite backend, MonadIO m, PersistRecordBackend record backend) => record -> ReaderT backend m (Key record) insert (MigrateTestV2 -> ReaderT SqlBackend m (Key MigrateTestV2)) -> MigrateTestV2 -> ReaderT SqlBackend m (Key MigrateTestV2) forall a b. (a -> b) -> a -> b $ Int -> Int -> MigrateTestV2 MigrateTestV2 Int 0 Int 0 Just (MigrateTestV2 Int sickness2 Int cromulence2) <- Key MigrateTestV2 -> ReaderT SqlBackend m (Maybe MigrateTestV2) forall backend record (m :: * -> *). (PersistStoreRead backend, MonadIO m, PersistRecordBackend record backend) => Key record -> ReaderT backend m (Maybe record) get Key MigrateTestV2 k2 IO () -> ReaderT SqlBackend m () forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO () -> ReaderT SqlBackend m ()) -> IO () -> ReaderT SqlBackend m () forall a b. (a -> b) -> a -> b $ Int sickness2 Int -> Int -> IO () forall a. (HasCallStack, Eq a, Show a) => a -> a -> IO () @?= Int 3 IO () -> ReaderT SqlBackend m () forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO () -> ReaderT SqlBackend m ()) -> IO () -> ReaderT SqlBackend m () forall a b. (a -> b) -> a -> b $ Int cromulence2 Int -> Int -> IO () forall a. (HasCallStack, Eq a, Show a) => a -> a -> IO () @?= Int 0