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