persistent-2.18.0.0: test/Database/Persist/TH/CompositeKeyStyleSpec.hs
{-# 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"
]