on master help sign in
wai-test: Add setPath (sets request path + query string)
commit7216f9d5e7050084c152a6b6e4f0a8b5432452be authorSimon Hengel <sol@typeful.net> dateWed 17 Apr 2013, 23:19 (13 years ago) parent8317e71
4 files changed+58−1
wai-test/Network/Wai/Test.hs+13 wai-test/test/Network/Wai/TestSpec.hs+32 wai-test/test/Spec.hs+1 wai-test/wai-test.cabal+12−1
wai-test/Network/Wai/Test.hs+13
@@ -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
wai-test/test/Network/Wai/TestSpec.hsnew file+32
@@ -0,0 +1,32 @@
1+{-# LANGUAGE OverloadedStrings #-}
2+module Network.Wai.TestSpec (main, spec) where
3+
4+import Test.Hspec
5+
6+import Network.Wai
7+import Network.Wai.Test
8+
9+main :: IO ()
10+main = hspec spec
11+
12+spec :: Spec
13+spec = do
14+ describe "setPath" $ do
15+
16+ let req = setPath defaultRequest "/foo/bar/baz?foo=23&bar=42&baz"
17+
18+ it "sets pathInfo" $ do
19+ pathInfo req `shouldBe` ["foo", "bar", "baz"]
20+
21+ it "sets rawPathInfo" $ do
22+ rawPathInfo req `shouldBe` "/foo/bar/baz"
23+
24+ it "sets queryString" $ do
25+ queryString req `shouldBe` [("foo", Just "23"), ("bar", Just "42"), ("baz", Nothing)]
26+
27+ it "sets rawQueryString" $ do
28+ rawQueryString req `shouldBe` "?foo=23&bar=42&baz"
29+
30+ context "when path has no query string" $ do
31+ it "sets rawQueryString to empty string" $ do
32+ rawQueryString (setPath defaultRequest "/foo/bar/baz") `shouldBe` ""
wai-test/test/Spec.hsnew file+1
@@ -0,0 +1 @@
1+{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
wai-test/wai-test.cabal+12−1
@@ -7,7 +7,7 @@ maintainer: Michael Snoyman <michael@snoyman.com>
77synopsis: Unit test framework (built on HUnit) for WAI applications.
88category: Testing, Web, Yesod
99stability: Stable
10−cabal-version: >= 1.6
10+cabal-version: >= 1.8
1111build-type: Simple
1212homepage: http://www.yesodweb.com/book/web-application-interface
1313description: Unit test framework (built on HUnit) for WAI applications.
@@ -30,6 +30,17 @@ library
3030 exposed-modules: Network.Wai.Test
3131 ghc-options: -Wall
3232
33+test-suite spec
34+ type: exitcode-stdio-1.0
35+ hs-source-dirs: test
36+ main-is: Spec.hs
37+ other-modules: Network.Wai.TestSpec
38+ build-depends: base >= 4 && < 5
39+ , wai-test
40+ , wai
41+ , hspec >= 1.3
42+ ghc-options: -Wall -Werror
43+
3344source-repository head
3445 type: git
3546 location: git://github.com/yesodweb/wai.git