@@ -10,6 +10,7 @@ module Network.Wai.Test
1010 , SRequest (..)
1111 , SResponse (..)
1212 , defaultRequest
13+ , setPath
1314 , setRawPathInfo
1415 -- * Assertions
1516 , assertStatus
@@ -30,6 +31,7 @@ import Data.ByteString (ByteString)
3031import qualified Data.ByteString.Char8 as S8
3132import Data.Conduit.Blaze (builderToByteString)
3233import Blaze.ByteString.Builder (flush)
34+import qualified Blaze.ByteString.Builder as B
3335import qualified Data.ByteString.Lazy as L
3436import qualified Data.ByteString.Lazy.Char8 as L8
3537import qualified Network.HTTP.Types as H
@@ -87,6 +89,17 @@ defaultRequest = Request
8789#endif
8890 }
8991
92+-- | Set whole path (request path + query string).
93+setPath :: Request -> S8.ByteString -> Request
94+setPath req path = req {
95+ pathInfo = segments
96+ , rawPathInfo = B.toByteString (H.encodePathSegments segments)
97+ , queryString = query
98+ , rawQueryString = (H.renderQuery True query)
99+ }
100+ where
101+ (segments, query) = H.decodePath path
102+
90103setRawPathInfo :: Request -> S8.ByteString -> Request
91104setRawPathInfo r rawPinfo =
92105 let pInfo = T.split (== '/') $ TE.decodeUtf8 rawPinfo