packages feed

webgear-server-1.1.0: test/Unit/Trait/Header.hs

module Unit.Trait.Header (
  tests,
) where

import Data.Functor.Identity (runIdentity)
import Network.Wai (defaultRequest, requestHeaders)
import Test.Tasty (TestTree, testGroup)
import Test.Tasty.HUnit (assertFailure, testCase, (@?=))
import WebGear.Core.Request (Request (..))
import WebGear.Core.Trait (getTrait, wzero)
import WebGear.Core.Trait.Header (HeaderNotFound (..), RequestHeader (..), RequiredRequestHeader)
import WebGear.Server.Handler (runServerHandler)
import WebGear.Server.Trait.Header ()

testMissingHeaderFails :: TestTree
testMissingHeaderFails = testCase "Missing header fails Header trait" $ do
  let req = wzero $ Request $ defaultRequest{requestHeaders = []}
  runIdentity $ do
    res <- runServerHandler (getTrait (RequestHeader :: RequiredRequestHeader "foo" Int)) [""] req
    pure $ case res of
      Right (Left e) -> e @?= Left HeaderNotFound
      _ -> assertFailure "unexpected success"

tests :: TestTree
tests = testGroup "Trait.Header" [testMissingHeaderFails]