mirror of
https://github.com/aelve/guide.git
synced 2024-12-23 12:52:31 +03:00
[tests] Category properties → Pros/cons enabled
This commit is contained in:
parent
c54b1ee287
commit
7d6a760f63
@ -735,8 +735,8 @@ renderCategoryInfo category = cached (CacheCategoryInfo (category^.uid)) $ do
|
||||
& checkedIf (category^.ecosystemEnabled)
|
||||
"“Ecosystem” field enabled"
|
||||
br_ []
|
||||
input_ [type_ "submit", value_ "Save"]
|
||||
button "Cancel" [] $
|
||||
input_ [type_ "submit", value_ "Save", class_ "save"]
|
||||
button "Cancel" [class_ "cancel"] $
|
||||
JS.switchSection (this, "normal" :: Text)
|
||||
|
||||
renderCategoryNotes :: MonadIO m => Category -> HtmlT m ()
|
||||
@ -778,6 +778,7 @@ renderCategory category = cached (CacheCategory (category^.uid)) $ do
|
||||
mapM_ (renderItem category) (category^.items)
|
||||
thisNode
|
||||
textInput [
|
||||
class_ " add-item ",
|
||||
placeholder_ "add an item",
|
||||
autocomplete_ "off",
|
||||
onEnter $ JS.addItem (itemsNode, category^.uid, inputValue) <>
|
||||
|
@ -175,11 +175,29 @@ categoryTests = session "categories" $ using Firefox $ do
|
||||
sel <- select (form :// "select[name=status]")
|
||||
opt <- select (sel :// HasText "Complete")
|
||||
selectDropdown sel opt
|
||||
click =<< select (form :// "[type=submit]")
|
||||
click =<< select (form :// ".save")
|
||||
onAnotherPage "/" $ do
|
||||
catLink <- select (ByLinkText "Cat 2")
|
||||
catLink `shouldHaveAttr` ("class", "status-finished")
|
||||
-- Pros/cons enabled
|
||||
describe "pros/cons enabled" $ do
|
||||
wd "checkbox enabled by default" $ do
|
||||
form <- openCategoryEditForm
|
||||
check <- select (form :// HasText "Pros/cons enabled" :// "input")
|
||||
shouldBeSelected check
|
||||
click =<< select (form :// ".cancel")
|
||||
wd "section is shown in an item" $ do
|
||||
createItem "some item"
|
||||
shouldBeDisplayed =<< select ".item-traits"
|
||||
wd "section isn't shown after unchecking the checkbox" $ do
|
||||
form <- openCategoryEditForm
|
||||
click =<< select (form :// HasText "Pros/cons enabled" :// "input")
|
||||
click =<< select (form :// ".save")
|
||||
waitUntil 2 (expect . not =<< isDisplayed =<< select ".item-traits")
|
||||
wd "section is shown again after checking the checkbox" $ do
|
||||
form <- openCategoryEditForm
|
||||
click =<< select (form :// HasText "Pros/cons enabled" :// "input")
|
||||
click =<< select (form :// ".save")
|
||||
waitUntil 2 (expect =<< isDisplayed =<< select ".item-traits")
|
||||
-- Ecosystem enabled
|
||||
-- Save works
|
||||
-- Cancel works
|
||||
@ -233,6 +251,19 @@ createCategory :: Text -> WD ()
|
||||
createCategory t =
|
||||
changesURL $ sendKeys (t <> _enter) =<< select ".add-category"
|
||||
|
||||
-- Assumes that the category page is open
|
||||
createItem :: Text -> WD Element
|
||||
createItem t = do
|
||||
let selectItems = selectAll ".item"
|
||||
items <- selectItems
|
||||
sendKeys (t <> _enter) =<< select ".add-item"
|
||||
waitUntil 2 (expect . (\xs -> length xs > length items) =<< selectItems)
|
||||
items2 <- selectItems
|
||||
case items2 \\ items of
|
||||
[] -> expectationFailure "an item wasn't created"
|
||||
[x] -> return x
|
||||
_ -> expectationFailure "more than one item was created"
|
||||
|
||||
categoryTitle :: Selector
|
||||
categoryTitle = ByCSS ".category-title"
|
||||
|
||||
@ -242,12 +273,19 @@ categoryGroup = ByCSS ".category .group"
|
||||
openCategoryEditForm :: WD Element
|
||||
openCategoryEditForm = do
|
||||
click =<< select (".category h2" :// ByLinkText "edit")
|
||||
select ".category form"
|
||||
selectWait ".category-info form"
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
-- Utilities for webdriver
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
highlight :: Element -> WD ()
|
||||
highlight e = do
|
||||
html <- executeJS [JSArg e]
|
||||
"arguments[0].style.border='thick solid #FF0000';\
|
||||
\return arguments[0].outerHTML;"
|
||||
liftIO $ putStrLn html
|
||||
|
||||
selectDropdown
|
||||
:: Element -- ^ Dropdown
|
||||
-> Element -- ^ Option to select
|
||||
@ -266,7 +304,7 @@ getChildren :: Element -> WD [Element]
|
||||
getChildren e = findElemsFrom e (ByXPath "./*")
|
||||
|
||||
data ComplexSelector where
|
||||
-- | Descendants
|
||||
-- | Descendants (not including the element itself)
|
||||
(://) :: (CanSelect a, CanSelect b) => a -> b -> ComplexSelector
|
||||
-- | Children
|
||||
(:/) :: (CanSelect a, CanSelect b) => a -> b -> ComplexSelector
|
||||
@ -286,6 +324,8 @@ data ComplexSelector where
|
||||
ContainsText :: Text -> ComplexSelector
|
||||
-- | Only pick the first N selected elements
|
||||
Take :: CanSelect a => Int -> a -> ComplexSelector
|
||||
-- | Displayed element
|
||||
Displayed :: ComplexSelector
|
||||
|
||||
deriving instance Show ComplexSelector
|
||||
|
||||
@ -338,15 +378,18 @@ instance CanSelect ComplexSelector where
|
||||
Not a -> defSelectAll (Not a)
|
||||
HasText t -> defSelectAll (HasText t)
|
||||
ContainsText t -> defSelectAll (ContainsText t)
|
||||
Displayed -> defSelectAll Displayed
|
||||
filterElems s es = case s of
|
||||
Not a -> (es \\) <$> filterElems a es
|
||||
HasText t -> filterM (fmap (== t) . getText) es
|
||||
ContainsText t -> filterM (fmap (t `T.isInfixOf`) . getText) es
|
||||
Displayed -> filterM isDisplayed es
|
||||
_ -> defFilterElems s es
|
||||
anyElem s es = case s of
|
||||
Not a -> (== length es) . length <$> filterElems a es
|
||||
HasText t -> anyM (fmap (== t) . getText) es
|
||||
ContainsText t -> anyM (fmap (t `T.isInfixOf`) . getText) es
|
||||
Displayed -> anyM isDisplayed es
|
||||
_ -> defAnyElem s es
|
||||
|
||||
class ToSelector a where
|
||||
@ -499,6 +542,21 @@ e `shouldHaveProp` (a, txt) = do
|
||||
printf "expected property %s of %s to be %s, got %s"
|
||||
a (show e) (show txt) (show t)
|
||||
|
||||
shouldBeSelected :: Element -> WD ()
|
||||
shouldBeSelected a = do
|
||||
x <- isSelected a
|
||||
a `shouldSatisfy` ("be checked/selected", const x)
|
||||
|
||||
shouldBeDisplayed :: Element -> WD ()
|
||||
shouldBeDisplayed a = do
|
||||
x <- isDisplayed a
|
||||
a `shouldSatisfy` ("be displayed", const x)
|
||||
|
||||
shouldBeHidden :: Element -> WD ()
|
||||
shouldBeHidden a = do
|
||||
x <- isDisplayed a
|
||||
a `shouldSatisfy` ("be hidden", const (not x))
|
||||
|
||||
_backspace, _enter, _esc :: Text
|
||||
(_backspace, _enter, _esc) = ("\xE003", "\xE007", "\xE00C")
|
||||
_shift, _ctrl, _alt, _command :: Text
|
||||
|
Loading…
Reference in New Issue
Block a user