packages feed

yesod-test 1.6.5.1 → 1.6.6

raw patch · 4 files changed

+87/−2 lines, 4 filesnew-uploaderPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ Yesod.Test: testClearCookies :: YesodExample site ()
+ Yesod.Test: testDeleteCookie :: ByteString -> YesodExample site ()
+ Yesod.Test: testModifyCookies :: (Cookies -> Cookies) -> YesodExample site ()
+ Yesod.Test: testSetCookie :: SetCookie -> YesodExample site ()
- Yesod.Test: YesodExampleData :: !Application -> !site -> !Cookies -> !(Maybe SResponse) -> YesodExampleData site
+ Yesod.Test: YesodExampleData :: !Application -> !site -> !Cookies -> !Maybe SResponse -> YesodExampleData site
- Yesod.Test: YesodSpecItem :: String -> (YesodExample site ()) -> YesodSpecTree site
+ Yesod.Test: YesodSpecItem :: String -> YesodExample site () -> YesodSpecTree site
- Yesod.Test: [yedResponse] :: YesodExampleData site -> !(Maybe SResponse)
+ Yesod.Test: [yedResponse] :: YesodExampleData site -> !Maybe SResponse

Files

ChangeLog.md view
@@ -1,3 +1,7 @@+## 1.6.6++* Add utility functions to modify cookies [$1570](https://github.com/yesodweb/yesod/pull/1570)+ ## 1.6.5.1  * Make test suite build with GHC 8.6 [#1561](https://github.com/yesodweb/yesod/pull/1561)
Yesod/Test.hs view
@@ -45,6 +45,12 @@     , ydescribe     , yit +    -- * Modify test state+    , testSetCookie+    , testDeleteCookie+    , testModifyCookies+    , testClearCookies+     -- * Making requests     -- | You can construct requests with the 'RequestBuilder' monad, which lets you     -- set the URL and add parameters, headers, and files. Helper functions are provided to@@ -325,6 +331,46 @@ -- | Describe a single test that keeps cookies, and a reference to the last response. yit :: String -> YesodExample site () -> YesodSpec site yit label example = tell [YesodSpecItem label example]++-- | Sets a cookie+--+-- ==== __Examples__+--+-- > import qualified Data.Cookie as Cookie+-- > :set -XOverloadedStrings+-- > testSetCookie Cookie.defaultSetCookie { Cookie.setCookieName = "name" }+--+-- @since 1.6.6+testSetCookie :: Cookie.SetCookie -> YesodExample site ()+testSetCookie cookie = do+  let key = Cookie.setCookieName cookie+  modifySIO $ \yed -> yed { yedCookies = M.insert key cookie (yedCookies yed) }++-- | Deletes the cookie of the given name+--+-- ==== __Examples__+--+-- > :set -XOverloadedStrings+-- > testDeleteCookie "name"+--+-- @since 1.6.6+testDeleteCookie :: ByteString -> YesodExample site ()+testDeleteCookie k = do+  modifySIO $ \yed -> yed { yedCookies = M.delete k (yedCookies yed) }++-- | Modify the current cookies with the given mapping function+--+-- @since 1.6.6+testModifyCookies :: (Cookies -> Cookies) -> YesodExample site ()+testModifyCookies f = do+  modifySIO $ \yed -> yed { yedCookies = f (yedCookies yed) }++-- | Clears the current cookies+--+-- @since 1.6.6+testClearCookies :: YesodExample site ()+testClearCookies = do+  modifySIO $ \yed -> yed { yedCookies = M.empty }  -- Performs a given action using the last response. Use this to create -- response-level assertions
test/main.hs view
@@ -38,8 +38,10 @@ import Data.ByteString.Lazy.Char8 () import qualified Data.Map as Map import qualified Text.HTML.DOM as HD-import Network.HTTP.Types.Status (status301, status303, unsupportedMediaType415)+import Network.HTTP.Types.Status (status301, status303, status422, unsupportedMediaType415) import UnliftIO.Exception (tryAny, SomeException, try)+import qualified Web.Cookie as Cookie+import Data.Maybe (isNothing)  parseQuery_ :: Text -> [[SelectorGroup]] parseQuery_ = either error id . parseQuery@@ -314,6 +316,33 @@             statusIs 200             printBody             bodyContains "Foo"+        yit "should 422 on the cookie named key" $ do+            get ("cookie/check-no-cookie" :: Text)+            statusIs 200+            testSetCookie Cookie.defaultSetCookie { Cookie.setCookieName = "key" }+            get ("cookie/check-no-cookie" :: Text)+            statusIs 422+        yit "should be able to delete a cookie" $ do+            testSetCookie Cookie.defaultSetCookie { Cookie.setCookieName = "key" }+            get ("cookie/check-no-cookie" :: Text)+            statusIs 422+            testDeleteCookie "key"+            get ("cookie/check-no-cookie" :: Text)+            statusIs 200+        yit "should be able to clear all cookies" $ do+            testSetCookie Cookie.defaultSetCookie { Cookie.setCookieName = "key" }+            get ("cookie/check-no-cookie" :: Text)+            statusIs 422+            testClearCookies+            get ("cookie/check-no-cookie" :: Text)+            statusIs 200+        yit "should be able to modify cookies" $ do+            testSetCookie Cookie.defaultSetCookie { Cookie.setCookieName = "key" }+            get ("cookie/check-no-cookie" :: Text)+            statusIs 422+            testModifyCookies (\_ -> Map.empty)+            get ("cookie/check-no-cookie" :: Text)+            statusIs 200     describe "CSRF with cookies/headers" $ yesodSpec RoutedApp $ do         yit "Should receive a CSRF cookie and add its value to the headers" $ do             get ("/" :: Text)@@ -463,6 +492,11 @@             setMessage "Foo"             () <- redirect ("/cookie/home" :: Text)             return ()+        onStatic "check-no-cookie" $ dispatchTo $ do+            mCookie <- lookupCookie "key"+            if isNothing mCookie+                then return ()+                else sendResponseStatus status422 ()  instance Yesod RoutedApp where     yesodMiddleware = defaultYesodMiddleware . defaultCsrfMiddleware
yesod-test.cabal view
@@ -1,5 +1,5 @@ name:               yesod-test-version:            1.6.5.1+version:            1.6.6 license:            MIT license-file:       LICENSE author:             Nubis <nubis@woobiz.com.ar>@@ -63,6 +63,7 @@                           , wai-extra                           , http-types                           , unliftio+                          , cookie  source-repository head   type: git