38 lines
1.4 KiB
Haskell
38 lines
1.4 KiB
Haskell
{-# LANGUAGE OverloadedStrings #-}
|
|
module YesodCoreTest.ParameterizedSite
|
|
( parameterizedSiteTest
|
|
) where
|
|
|
|
import Data.ByteString.Lazy (ByteString)
|
|
import Network.Wai.Test (runSession, request, defaultRequest, assertBodyContains)
|
|
import Test.Hspec (Spec, describe, it)
|
|
import Yesod.Core (YesodDispatch)
|
|
import Yesod.Core.Dispatch (toWaiApp)
|
|
|
|
import YesodCoreTest.ParameterizedSite.PolyAny (PolyAny (..))
|
|
import YesodCoreTest.ParameterizedSite.PolyShow (PolyShow (..))
|
|
import YesodCoreTest.ParameterizedSite.Compat (Compat (..))
|
|
|
|
-- These are actually tests for template haskell. So if it compiles, it works
|
|
parameterizedSiteTest :: Spec
|
|
parameterizedSiteTest = describe "Polymorphic Yesod sites" $ do
|
|
it "Polymorphic unconstrained stub" $ runStub (PolyAny ())
|
|
it "Polymorphic stub with Show" $ runStub' "1337" (PolyShow 1337)
|
|
it "Polymorphic unconstrained stub, old-style" $ runStub (Compat () ())
|
|
|
|
runStub :: YesodDispatch a => a -> IO ()
|
|
runStub stub =
|
|
let actions = do
|
|
res <- request defaultRequest
|
|
assertBodyContains "Stub" res
|
|
in toWaiApp stub >>= runSession actions
|
|
|
|
|
|
runStub' :: YesodDispatch a => ByteString -> a -> IO ()
|
|
runStub' body stub =
|
|
let actions = do
|
|
res <- request defaultRequest
|
|
assertBodyContains "Stub" res
|
|
assertBodyContains body res
|
|
in toWaiApp stub >>= runSession actions
|