packages feed

registry-hedgehog-0.2.1.1: test/Test/Tutorial/Exercise5.hs

{-# LANGUAGE DataKinds             #-}
{-# LANGUAGE KindSignatures        #-}
{-# LANGUAGE PartialTypeSignatures #-}
{-# OPTIONS_GHC -fno-warn-partial-type-signatures #-}

module Test.Tutorial.Exercise5 where

import           Data.Registry
import           Data.Text as T
import           Data.Registry.Hedgehog
import           Hedgehog                 hiding (test)
import           Protolude
import           Test.Tasty.Hedgehogx
import           Test.Tutorial.DataModel
import           Test.Tutorial.Exercise2 (genText)
import           Test.Tutorial.Exercise3 (registry3)
import           Test.Tutorial.Exercise4 (genDepartmentName)

runGens = runS registry3

genEmployeeName :: Gen Text
genEmployeeName = T.take 10 . T.toLower <$> genText

setDepartmentName = specializeGenS @Department genDepartmentName
setEmployeeName   = specializeGenS @Employee genEmployeeName

setOneDepartment = addFunS $ listOfMinMax @Department 1 1
setOneEmployee   = addFunS $ listOfMinMax @Employee 1 1
setSmallCompany = setOneEmployee >> setOneDepartment

test_small_company = prop "make a small company" $ runGens $ do
  setSmallCompany
  setEmployeeName
  setDepartmentName
  collect =<< forallS @Company