@@ -16,6 +16,7 @@ import Network.Wai.Middleware.Jsonp
1616import Network.Wai.Middleware.Gzip
1717import Network.Wai.Middleware.Vhost
1818import Network.Wai.Middleware.Autohead
19+import Network.Wai.Middleware.MethodOverride
1920import Codec.Compression.GZip (decompress)
2021
2122import Data.Enumerator (run_, enumList, ($$), Iteratee)
@@ -39,6 +40,7 @@ testSuite = testGroup "Network.Wai.Parse"
3940 , testCase "gzip" caseGzip
4041 , testCase "vhost" caseVhost
4142 , testCase "autohead" caseAutohead
43+ , testCase "method override" caseMethodOverride
4244 ]
4345
4446caseParseQueryString :: Assertion
@@ -285,3 +287,25 @@ caseAutohead = flip runSession autoheadApp $ do
285287 }
286288 assertHeader "Foo" "Bar" sres1
287289 assertBody "" sres1
290+
291+moApp = methodOverride $ \req -> return $ responseLBS status200
292+ [("Method", requestMethod req)] ""
293+
294+caseMethodOverride = flip runSession moApp $ do
295+ sres1 <- request Request
296+ { requestMethod = "GET"
297+ , queryString = ""
298+ }
299+ assertHeader "Method" "GET" sres1
300+
301+ sres2 <- request Request
302+ { requestMethod = "POST"
303+ , queryString = ""
304+ }
305+ assertHeader "Method" "POST" sres2
306+
307+ sres3 <- request Request
308+ { requestMethod = "POST"
309+ , queryString = "_method=PUT"
310+ }
311+ assertHeader "Method" "PUT" sres3