on master help sign in
Assertions on cookies and functions to modify and delete them
commitee1a6a11574bc20bdd4788e7a73ade3981c3ccba authorMatthias Hörmann <hoermann@saltation.de> dateThu 2 Apr 2015, 11:48 (12 years ago) parent7802490
2 files changed+90
wai-extra/Network/Wai/Test.hs+50 wai-extra/test/Network/Wai/TestSpec.hs+40
wai-extra/Network/Wai/Test.hs+50
@@ -5,6 +5,12 @@ module Network.Wai.Test
55 ( -- * Session
66 Session
77 , runSession
8+ -- * Client Cookies
9+ , ClientCookies
10+ , getClientCookies
11+ , modifyClientCookies
12+ , setClientCookie
13+ , deleteClientCookie
814 -- * Requests
915 , request
1016 , srequest
@@ -20,6 +26,9 @@ module Network.Wai.Test
2026 , assertBodyContains
2127 , assertHeader
2228 , assertNoHeader
29+ , assertClientCookieExists
30+ , assertNoClientCookieExists
31+ , assertClientCookieValue
2332 , WaiTestFailure (..)
2433 ) where
2534
@@ -67,6 +76,17 @@ modifyClientCookies :: (ClientCookies -> ClientCookies) -> Session ()
6776modifyClientCookies f =
6877 lift (ST.modify (\cs -> cs { clientCookies = f $ clientCookies cs }))
6978
79+setClientCookie :: Cookie.SetCookie -> Session ()
80+setClientCookie c =
81+ modifyClientCookies
82+ (Map.union
83+ (Map.singleton (Cookie.setCookieName c) c))
84+
85+deleteClientCookie :: ByteString -> Session ()
86+deleteClientCookie cookieName =
87+ modifyClientCookies
88+ (Map.delete cookieName)
89+
7090initState :: ClientState
7191initState = ClientState Map.empty
7292
@@ -259,3 +279,33 @@ assertNoHeader header SResponse{simpleHeaders = h} =
259279 , " containing "
260280 , show s
261281 ]
282+
283+assertClientCookieExists :: String -> ByteString -> Session ()
284+assertClientCookieExists s cookieName = do
285+ cookies <- getClientCookies
286+ assertBool s $ Map.member cookieName cookies
287+
288+assertNoClientCookieExists :: String -> ByteString -> Session ()
289+assertNoClientCookieExists s cookieName = do
290+ cookies <- getClientCookies
291+ assertBool s $ not $ Map.member cookieName cookies
292+
293+assertClientCookieValue :: String -> ByteString -> ByteString -> Session ()
294+assertClientCookieValue s cookieName cookieValue = do
295+ cookies <- getClientCookies
296+ case Map.lookup cookieName cookies of
297+ Nothing ->
298+ assertFailure (s ++ " (cookie does not exist)")
299+ Just c ->
300+ assertBool
301+ (concat
302+ [ s
303+ , " (actual value "
304+ , show $ Cookie.setCookieValue c
305+ , " expected value "
306+ , show cookieValue
307+ , ")"
308+ ]
309+ )
310+ (Cookie.setCookieValue c == cookieValue)
311+
wai-extra/test/Network/Wai/TestSpec.hs+40
@@ -150,4 +150,44 @@ spec = do
150150 setPath defaultRequest "/get"
151151 simpleBody sresp `shouldBe` "[\"cookie_name=cookie_value\"]"
152152
153+ it "sends a cookie set with setClientCookie to server" $ do
154+ sresp <- flip runSession cookieApp $ do
155+ setClientCookie
156+ (Cookie.def { Cookie.setCookieName = "cookie_name"
157+ , Cookie.setCookieValue = "cookie_value"
158+ }
159+ )
160+ request $
161+ setPath defaultRequest "/get"
162+ simpleBody sresp `shouldBe` "[\"cookie_name=cookie_value\"]"
163+
164+ it "sends a cookie updated with setClientCookie to server" $ do
165+ sresp <- flip runSession cookieApp $ do
166+ setClientCookie
167+ (Cookie.def { Cookie.setCookieName = "cookie_name"
168+ , Cookie.setCookieValue = "cookie_value"
169+ }
170+ )
171+ setClientCookie
172+ (Cookie.def { Cookie.setCookieName = "cookie_name"
173+ , Cookie.setCookieValue = "cookie_value2"
174+ }
175+ )
176+ request $
177+ setPath defaultRequest "/get"
178+ simpleBody sresp `shouldBe` "[\"cookie_name=cookie_value2\"]"
179+
180+ it "does not send a cookie deleted with deleteClientCookie to server" $ do
181+ sresp <- flip runSession cookieApp $ do
182+ setClientCookie
183+ (Cookie.def { Cookie.setCookieName = "cookie_name"
184+ , Cookie.setCookieValue = "cookie_value"
185+ }
186+ )
187+ deleteClientCookie "cookie_name"
188+ request $
189+ setPath defaultRequest "/get"
190+ simpleBody sresp `shouldBe` "[\"\"]"
191+
192+
153193