packages feed

headroom-0.3.0.0: test/Headroom/Command/ReadersSpec.hs

{-# LANGUAGE NoImplicitPrelude   #-}
{-# LANGUAGE OverloadedStrings   #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications    #-}
module Headroom.Command.ReadersSpec
  ( spec
  )
where

import           Headroom.Command.Readers
import           Headroom.Configuration.Types   ( LicenseType )
import           Headroom.Data.EnumExtra        ( EnumExtra(..) )
import           Headroom.FileType.Types        ( FileType )
import           RIO
import qualified RIO.Text                      as T
import           Test.Hspec
import           Test.Hspec.QuickCheck          ( prop )
import           Test.QuickCheck


spec :: Spec
spec = do
  describe "parseLicenseAndFileType" $ do
    prop "should parse license and file type from raw input"
         prop_parseLicenseAndFileType

 where
  licenseTypes = fmap (T.toLower . enumToText) (allValues @LicenseType)
  fileTypes = fmap (T.toLower . enumToText) (allValues @FileType)
  licenseAndFileTypesGen = elements
    $ concatMap (\lt -> fmap (\ft -> lt <> ":" <> ft) fileTypes) licenseTypes
  prop_parseLicenseAndFileType =
    forAll licenseAndFileTypesGen (isJust . parseLicenseAndFileType)