packages feed

symantic-http-test-0.0.1.20190410: Hspec/Server/Raw.hs

{-# LANGUAGE NoMonomorphismRestriction #-}
{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS -Wno-missing-signatures #-}
module Hspec.Server.Raw where

import Data.Int (Int)
import Data.String (String, IsString(..))
import System.IO (IO)
import Text.Show (Show(..))
import qualified Control.Monad.Classes as MC
import qualified Network.HTTP.Types as HTTP
import qualified Network.Wai as Wai
import qualified Network.Wai.Test as Wai
import qualified Network.Wai.Test
import Data.Function (const)

import Symantic.HTTP
import Symantic.HTTP.Server
import Hspec.Utils

api = "foo" </> raw

rawApplication :: Show a => (Wai.Request -> a) -> Wai.Application
rawApplication f req res =
	res $ Wai.responseLBS HTTP.ok200 [] (fromString $ show $ f req)

hspec = testSpecs $ describe "Raw" $ do
	it "runs applications" $ do
		(`Wai.runSession` server api (rawApplication (const (42 :: Int)))) $ do
			res <- Network.Wai.Test.request Wai.defaultRequest
			 { Wai.pathInfo = ["foo"] }
			MC.exec @IO $ do
				Wai.simpleBody res `shouldBe` "42"
	it "gets the pathInfo modified" $ do
		(`Wai.runSession` server api (rawApplication Wai.pathInfo)) $ do
			res <- Network.Wai.Test.request Wai.defaultRequest
			 { Wai.pathInfo = ["foo", "bar"] }
			MC.exec @IO $ do
				Wai.simpleBody res `shouldBe` fromString (show ["bar" :: String])