packages feed

servant-routes-0.1.1.0: test/Servant/API/Routes/ParamSpec.hs

module Servant.API.Routes.ParamSpec where

import qualified Data.Text as T
import Servant.API.Routes.Param
import Servant.API.Routes.Util
import Test.Hspec as H
import qualified Test.QuickCheck as Q

sing, arrayElem, flag :: Param
sing = singleParam @"sing_sym" @Int
arrayElem = arrayElemParam @"array_sym" @Int
flag = flagParam @"flag_sym"

singExpected, arrayElemExpected, flagExpected :: T.Text
singExpected = "sing_sym=<Int>"
arrayElemExpected = "array_sym=<[Int]>"
flagExpected = "flag_sym"

newtype ParamBasicQInstance = ParamBasicQInstance Param
  deriving (Show, Eq, Ord) via Param

instance Q.Arbitrary ParamBasicQInstance where
  arbitrary = ParamBasicQInstance <$> Q.elements [sing, arrayElem, flag]

spec :: Spec
spec = do
  describe "renderParam" $ do
    it "should render singleParam correctly" $ do
      renderParam sing `shouldBe` singExpected
    it "should render arrayElemParam correctly" $ do
      renderParam arrayElem `shouldBe` arrayElemExpected
    it "should render flagParam correctly" $ do
      renderParam flag `shouldBe` flagExpected

  describe "Hand-rolled instances" $ do
    testEqInstances @ParamBasicQInstance
    testOrdInstances @ParamBasicQInstance