{-# 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])