From 82cea4fd8b6915f51d3830927a2a136318991475 Mon Sep 17 00:00:00 2001 From: Stanislav Smirnov Date: Tue, 27 Aug 2024 00:55:45 +0300 Subject: [PATCH 1/3] Remove some redundants in yesod-test --- yesod-test/Yesod/Test.hs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/yesod-test/Yesod/Test.hs b/yesod-test/Yesod/Test.hs index 67183b636..3e51f5dbc 100644 --- a/yesod-test/Yesod/Test.hs +++ b/yesod-test/Yesod/Test.hs @@ -267,7 +267,6 @@ import Data.Time.Clock (getCurrentTime) import Control.Applicative ((<$>)) import Text.Show.Pretty (ppShow) import Data.Monoid (mempty) -import Data.Semigroup (Semigroup(..)) #if MIN_VERSION_base(4,9,0) import GHC.Stack (HasCallStack) #elif MIN_VERSION_base(4,8,1) @@ -279,7 +278,7 @@ type HasCallStack = (() :: Constraint) #endif import Data.ByteArray.Encoding (convertToBase, Base(..)) import Network.HTTP.Types.Header (hContentType) -import Data.Aeson (FromJSON, eitherDecode') +import Data.Aeson (eitherDecode') import Control.Monad (unless) import Yesod.Test.Internal (getBodyTextPreview, contentTypeHeaderIsUtf8) From bc0e80ef0b67232c8bd68ea449158854b6504404 Mon Sep 17 00:00:00 2001 From: Stanislav Smirnov Date: Tue, 27 Aug 2024 01:16:36 +0300 Subject: [PATCH 2/3] Code optimizations --- yesod-test/Yesod/Test.hs | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/yesod-test/Yesod/Test.hs b/yesod-test/Yesod/Test.hs index 3e51f5dbc..d66bcf7cb 100644 --- a/yesod-test/Yesod/Test.hs +++ b/yesod-test/Yesod/Test.hs @@ -909,12 +909,7 @@ genericNameFromLabel match label = do -- This looks up the name of a field based on a CSS selector and the contents of the label pointing to it. genericNameFromSelectorLabel :: HasCallStack => (T.Text -> T.Text -> Bool) -> T.Text -> T.Text -> RequestBuilder site T.Text genericNameFromSelectorLabel match selector label = do - mres <- fmap rbdResponse getSIO - res <- - case mres of - Nothing -> failure "genericNameSelectorFromLabel: No response available" - Just res -> return res - let body = simpleBody res + body <- htmlBody "genericNameSelectorFromLabel" html <- case findBySelector body selector of Left parseError -> failure $ "genericNameFromSelectorLabel: Parse error" <> T.pack parseError @@ -1754,12 +1749,7 @@ checkByLabel label = do -- This looks up the value of a field based on the contents of the label pointing to it. genericValueFromLabel :: HasCallStack => (T.Text -> T.Text -> Bool) -> T.Text -> RequestBuilder site T.Text genericValueFromLabel match label = do - mres <- fmap rbdResponse getSIO - res <- - case mres of - Nothing -> failure "genericValueFromLabel: No response available" - Just res -> return res - let body = simpleBody res + body <- htmlBody "genericValueFromLabel" case genericValueFromHTML match label body of Left e -> failure e Right x -> pure x @@ -1797,3 +1787,12 @@ genericValueFromHTML match label html = [] -> Left $ "No label contained: " <> label value:_ -> Right value _ -> Left $ "More than one label contained " <> label + +htmlBody :: String -> RequestBuilder site BSL8.ByteString +htmlBody funcName = do + mres <- fmap rbdResponse getSIO + res <- + case mres of + Nothing -> failure $ T.pack $ funcName ++ ": No response available" + Just res -> return res + return $ simpleBody res From 48061f6ce746669041a72448487d9a8d19361b4f Mon Sep 17 00:00:00 2001 From: Stanislav Smirnov Date: Tue, 27 Aug 2024 01:22:26 +0300 Subject: [PATCH 3/3] Add selectByLabel --- yesod-test/ChangeLog.md | 4 ++++ yesod-test/Yesod/Test.hs | 42 +++++++++++++++++++++++++++++++++++++ yesod-test/test/main.hs | 25 ++++++++++++++++++++-- yesod-test/yesod-test.cabal | 2 +- 4 files changed, 70 insertions(+), 3 deletions(-) diff --git a/yesod-test/ChangeLog.md b/yesod-test/ChangeLog.md index d64364d2d..8fcbf1839 100644 --- a/yesod-test/ChangeLog.md +++ b/yesod-test/ChangeLog.md @@ -1,5 +1,9 @@ # ChangeLog for yesod-test +## 1.6.19 + +* Add `selectByLabel` to yesod-test. [#1845](https://github.com/yesodweb/yesod/pull/1845) + ## 1.6.18 * Add `checkByLabel` to yesod-test. [#1843](https://github.com/yesodweb/yesod/pull/1843) diff --git a/yesod-test/Yesod/Test.hs b/yesod-test/Yesod/Test.hs index d66bcf7cb..968345520 100644 --- a/yesod-test/Yesod/Test.hs +++ b/yesod-test/Yesod/Test.hs @@ -179,6 +179,7 @@ module Yesod.Test , fileByLabelSuffix , chooseByLabel , checkByLabel + , selectByLabel -- *** CSRF Tokens -- | In order to prevent CSRF exploits, yesod-form adds a hidden input @@ -1745,6 +1746,47 @@ checkByLabel label = do value <- genericValueFromLabel (==) label addPostParam name value +-- | Finds the @\