{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE DeriveGeneric #-}
module PrimaryTest where
import Init
-- mpsGeneric = False is due to a bug or at least lack of a feature in mkKeyTypeDec TH.hs
share [mkPersist persistSettings { mpsGeneric = False }, mkMigrate "migration"] [persistLowerCase|
Foo
name String
Primary name
Bar
quux FooId
Trees sql=trees
name String
parent String Maybe
Primary name
Foreign Trees fkparent parent
CompositePrimary
name String
age Int
Primary name age
|]
cleanDB :: (MonadIO m, PersistQuery backend, PersistEntityBackend Foo ~ backend) => ReaderT backend m ()
cleanDB = do
deleteWhere ([] :: [Filter Foo])
deleteWhere ([] :: [Filter Bar])
specsWith :: (MonadIO m, MonadFail m) => RunDb SqlBackend m -> Spec
specsWith runDb = describe "primary key reference" $ do
it "insert a primary reference" $ runDb $ do
kf <- insert $ Foo "name"
_kb <- insert $ Bar kf
return ()
it "uses RawSql for a Primary key" $ runDb $ do
key <- insert $ Foo "name"
keyFromRaw <- rawSql "SELECT name FROM foo LIMIT 1" []
[key] @== keyFromRaw
describe "keyFromRecordM" $ do
it "works on singleton case" $ do
let
foo = Foo "hello"
fooKey = fmap ($ foo) keyFromRecordM
fooKey `shouldBe` Just (FooKey "hello")
it "works on multiple fields" $ do
let
name = "hello"
age = 31
rec = CompositePrimary name age
fmap ($ rec) keyFromRecordM
`shouldBe`
Just (CompositePrimaryKey name age)