@@ -5,6 +5,8 @@ module Network.Wai.Test
55 , runSession
66 -- * Requests
77 , request
8+ , srequest
9+ , SRequest (..)
810 , SResponse (..)
911 -- * Assertions
1012 , assertStatus
@@ -16,6 +18,7 @@ module Network.Wai.Test
1618import Network.Wai
1719import qualified Test.HUnit.Base as H
1820import Control.Monad.IO.Class (liftIO)
21+import Control.Monad.Trans.Class (lift)
1922import Control.Monad.Trans.State (StateT, evalStateT, get, put)
2023import Control.Monad.Trans.Reader (ReaderT, runReaderT, ask)
2124import Data.Map (Map)
@@ -23,7 +26,7 @@ import qualified Data.Map as Map
2326import Data.ByteString (ByteString)
2427import qualified Data.ByteString as S
2528import qualified Data.ByteString.Char8 as S8
26−import Data.Enumerator (joinI, consume, ($$))
29+import Data.Enumerator (joinI, consume, ($$), run_, enumList)
2730import Blaze.ByteString.Builder.Enumerator (builderToByteString)
2831import qualified Data.ByteString.Lazy as L
2932import qualified Data.ByteString.Lazy.Char8 as L8
@@ -40,6 +43,10 @@ initState = ClientState Map.empty
4043runSession :: Session a -> Application -> IO a
4144runSession session app = evalStateT (runReaderT session app) initState
4245
46+data SRequest = SRequest
47+ { simpleRequest :: Request
48+ , simpleRequestBody :: L.ByteString
49+ }
4350data SResponse = SResponse
4451 { simpleStatus :: Status
4552 , simpleHeaders :: [(CIByteString, ByteString)]
@@ -47,9 +54,13 @@ data SResponse = SResponse
4754 }
4855 deriving (Show, Eq)
4956request :: Request -> Session SResponse
50−request req = do
57+request = srequest . flip SRequest L.empty
58+
59+srequest :: SRequest -> Session SResponse
60+srequest (SRequest req bod) = do
5161 app <- ask
52− sres <- liftIO $ app req >>= runResponse
62+ res <- liftIO $ run_ $ enumList 4 (L.toChunks bod) $$ app req
63+ sres <- liftIO $ runResponse res
5364 -- FIXME cookie processing
5465 return sres
5566