{-# LANGUAGE ScopedTypeVariables #-} module ReadWriteTest where import Init import PersistentTestModels specsWith :: forall m. Runner SqlBackend m => RunDb SqlBackend m -> Spec specsWith originalRunDb = describe "ReadWriteTest" $ do let personFilters = [] :: [Filter Person] describe "SqlReadBackend" $ do let runDb :: RunDb SqlReadBackend m runDb = changeBackend SqlReadBackend originalRunDb it "type checks on all PersistStoreRead functions" $ do runDb $ do _ <- get (PersonKey 3) _ <- getMany [PersonKey 1, PersonKey 2] pure () it "type checks on all PersistQueryRead functions" $ do runDb $ do _ <- selectList personFilters [] _ <- count personFilters pure () it "type checks on PersistUniqueRead functions" $ do runDb $ do _ <- getBy (PersonNameKey "Matt") pure () describe "SqlWriteBackend" $ do let runDb :: RunDb SqlWriteBackend m runDb = changeBackend SqlWriteBackend originalRunDb it "type checks on PersistStoreWrite and Read functions" $ do runDb $ do let person = Person "Matt Parsons" 30 Nothing k <- insert person mperson <- get k Just person @== mperson it "type checks on PersistQueryWrite and Read functions" $ do runDb $ do _ <- selectList personFilters [] updateWhere personFilters [] it "type checks on PersistUniqueWrite/Read functions" $ do runDb $ do let name_ = "Matt Parsons New" person = Person name_ 30 Nothing _mkey0 <- insertUnique person mkey1 <- insertUnique person mkey1 @== Nothing mperson <- selectFirst [PersonName ==. name_] [] fmap entityVal mperson @== Just person