sydtest-persistent-0.0.0.0: test/Test/Syd/PersistentSpec.hs
{-# LANGUAGE OverloadedStrings #-}
module Test.Syd.PersistentSpec (spec) where
import Control.Monad.Logger
import Database.Persist
import Database.Persist.Sql
import Database.Persist.Sqlite
import Test.Syd
import Test.Syd.Persistent
import Test.Syd.Persistent.Example
spec :: Spec
spec = do
let persistSpec :: SpecWith ConnectionPool -> Spec
persistSpec = setupAround $
SetupFunc $ \takeConnectionPool ->
runNoLoggingT $
withSqlitePool ":memory:" 1 $ \pool -> do
_ <- flip runSqlPool pool $ migrationRunner migrateExample
liftIO $ takeConnectionPool pool
persistSpec $ do
it "can write and read this example person" $ \pool -> runPersistentTest pool $ do
let p = Person {personName = "John Doe", personAge = Just 21}
i <- insert p
mp <- get i
liftIO $ mp `shouldBe` Just p
describe "shared data" $ do
it "can write this example person" $ \pool -> runPersistentTest pool $ do
let p = Person {personName = "John Doe", personAge = Just 21}
insert_ p
it "cannot read anything that has not been written yet" $ \pool -> runPersistentTest pool $ do
mp <- get (toSqlKey 0)
liftIO $ mp `shouldBe` (Nothing :: Maybe Person)