File: CompositeKeyStyleSpec.hs

package info (click to toggle)
haskell-persistent 2.17.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,196 kB
  • sloc: haskell: 14,076; makefile: 3
file content (64 lines) | stat: -rw-r--r-- 1,932 bytes parent folder | download | duplicates (2)
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"
          ]