genvalidity-persistent-0.0.0.0: test/Data/GenValidity/PersistSpec.hs
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
module Data.GenValidity.PersistSpec
( spec,
)
where
import Data.GenValidity.Persist
import Data.Validity.Containers
import Database.Persist
import Database.Persist.TH
import GHC.Generics (Generic)
import Test.Hspec
import Test.QuickCheck
import Test.Validity
share
[mkPersist sqlSettings]
[persistLowerCase|
Thing
number Int
deriving Show
deriving Eq
deriving Ord
deriving Generic
|]
instance Validity Thing
instance GenUnchecked Thing
instance GenValid Thing
spec :: Spec
spec = do
genValidSpec @ThingId
shrinkValidSpec @ThingId
genValidSpec @(Entity Thing)
shrinkValidSpec @(Entity Thing)
describe "genSeperateIds"
$ it "generates values with seperate ids"
$ forAll genSeperateIds
$ \is -> distinctOrd (is :: [Key Thing])
describe "genSeperateIdsFor"
$ it "generates values with seperate ids"
$ forAll genValid
$ \as ->
forAll (genSeperateIdsFor as) $ \es -> distinctOrd $ map entityKey (es :: [Entity Thing])
describe "genValidsWithSeperateIds" $ do
it "generates values with seperate ids"
$ forAll (genValidsWithSeperateIDs genValid)
$ \es ->
distinctOrd $ map entityKey (es :: [Entity Thing])
it "generates values with seperate ids"
$ forAll (genValidsWithSeperateIDs genValid)
$ \es ->
distinctOrd $ map entityKey (es :: [Entity Thing])
describe "validsWithSeperateIDs"
$ it "generates values with seperate ids"
$ forAll validsWithSeperateIDs
$ \es -> distinctOrd $ map entityKey (es :: [Entity Thing])