packages feed

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

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

module Test.Tutorial.Exercise2 where

import           Data.Registry
import           Data.Registry.Hedgehog
import           Hedgehog                hiding (test)
import           Hedgehog.Gen
import           Hedgehog.Range
import           Protolude
import           Test.Tasty.Hedgehogx
import           Test.Tutorial.DataModel

registry :: Registry _ _
registry =
     genFun Company
  <: genFun Department
  <: genFun Employee
  <: fun    (listOf @Employee)
  <: fun    (listOf @Department)
  <: fun    (maybeOf @Int)
  <: genVal genEmployeeStatus
  <: genVal genInt
  <: genVal genText

genInt :: Gen Int
genInt = integral (linear 1 3)

genText :: Gen Text
genText = text (linear 1 10) alpha

genEmployeeStatus :: Gen EmployeeStatus
genEmployeeStatus = pure Permanent

-- this compiles ok now
makeCompanyGen :: GenIO Company
makeCompanyGen = make @(GenIO Company) registry

forall :: forall a . (Typeable a, Show a) => PropertyT IO a
forall = forAllT $ genWith @a registry

test_company = test "make a company" $ do
  _ <- forall @Company
  success