1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wname-shadowing -Werror=name-shadowing #-}
module Database.Persist.TH.CompositeKeyStyleSpec where
import Data.Data (Data, constrFields, toConstr)
import Data.Text (Text)
import Database.Persist.Sql
import Database.Persist.TH
import Test.Hspec hiding (Selector)
mkPersist sqlSettings
[persistLowerCase|
CompanyUserLegacyStyle
companyName Text
userName Text
Primary companyName userName
|]
deriving instance Data CompanyUserLegacyStyle
deriving instance Data (Key CompanyUserLegacyStyle)
mkPersist sqlSettings {mpsCamelCaseCompositeKeySelector = True}
[persistLowerCase|
CompanyUserCamelStyle
companyName Text
userName Text
Primary companyName userName
|]
deriving instance Data CompanyUserCamelStyle
deriving instance Data (Key CompanyUserCamelStyle)
spec :: Spec
spec = describe "CompositeKeyStyleSpec" $ do
describe "mpsCamelCaseCompositeKeySelector is False" $ do
it "Should generate Legacy style key selectors" $ do
let key = CompanyUserLegacyStyleKey "cName" "uName"
constrFields (toConstr key)
`shouldBe`
[ "companyUserLegacyStyleKeycompanyName"
, "companyUserLegacyStyleKeyuserName"
]
describe "mpsCamelCaseCompositeKeySelector is True" $ do
it "Should generate CamelCase style key selectors" $ do
let key = CompanyUserCamelStyleKey "cName" "uName"
constrFields (toConstr key)
`shouldBe`
[ "companyUserCamelStyleKeyCompanyName"
, "companyUserCamelStyleKeyUserName"
]
|