@@ -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+