packages feed

registry-hedgehog-0.3.0.0: 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.Registry.Hedgehog
import Data.Text as T
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