Files
discourse/spec/system/page_objects/pages/topic.rb
Martin Brennan 788bcb7736 DEV: Fix hashtag system spec flakys (#19574)
Honestly seems like it's being in some weird loop for
discourse/hashtag_autocomplete_spec.rb for this:

```ruby
  within topic_page.post_by_number(2) do
      cooked_hashtags = page.all(".hashtag-cooked", count: 2)

      expect(cooked_hashtags[0]["outerHTML"]).to eq(<<~HTML.chomp)
      <a class=\"hashtag-cooked\" href=\"#{category.url}\" data-type=\"category\" data-slug=\"cool-cat\"><svg class=\"fa d-icon d-icon-folder svg-icon svg-node\"><use href=\"#folder\"></use></svg><span>Cool Category</span></a>
      HTML
      expect(cooked_hashtags[1]["outerHTML"]).to eq(<<~HTML.chomp)
      <a class=\"hashtag-cooked\" href=\"#{tag.url}\" data-type=\"tag\" data-slug=\"cooltag\"><svg class=\"fa d-icon d-icon-tag svg-icon svg-node\"><use href=\"#tag\"></use></svg><span>cooltag</span></a>
      HTML
    end
```

I see this many times in the full logs with `SELENIUM_VERBOSE_DRIVER_LOGS=1`:

```
COMMAND FindElements {
   "using": "css selector",
   "value": "#post_2"
}

Followed by:

COMMAND FindChildElements {
   "id": "26dfe542-659b-46cc-ac8c-a6c2d9cbdf0a",
   "using": "css selector",
   "value": ".hashtag-cooked"
}
```

Over and over and over, there are 58 such occurrences. I am beginning to
think `within` is just poison that should be avoided.
2022-12-23 09:23:29 +10:00

103 lines
2.5 KiB
Ruby

# frozen_string_literal: true
module PageObjects
module Pages
class Topic < PageObjects::Pages::Base
def initialize
setup_component_classes!(
post_show_more_actions: ".show-more-actions",
post_action_button_bookmark: ".bookmark.with-reminder",
reply_button: ".topic-footer-main-buttons > .create",
composer: "#reply-control",
composer_textarea: "#reply-control .d-editor .d-editor-input",
)
end
def visit_topic(topic)
page.visit "/t/#{topic.id}"
self
end
def visit_topic_and_open_composer(topic)
visit_topic(topic)
click_reply_button
self
end
def has_post_content?(post)
post_by_number(post).has_content? post.raw
end
def has_post_number?(number)
has_css?("#post_#{number}")
end
def post_by_number(post_or_number)
post_or_number = post_or_number.is_a?(Post) ? post_or_number.post_number : post_or_number
find("#post_#{post_or_number}")
end
def has_post_more_actions?(post)
within post_by_number(post) do
has_css?(".show-more-actions")
end
end
def has_post_bookmarked?(post)
within post_by_number(post) do
has_css?(".bookmark.with-reminder.bookmarked")
end
end
def expand_post_actions(post)
post_by_number(post).find(".show-more-actions").click
end
def click_post_action_button(post, button)
case button
when :bookmark
post_by_number(post).find(".bookmark.with-reminder").click
end
end
def click_topic_footer_button(button)
find_topic_footer_button(button).click
end
def has_topic_bookmarked?
has_css?("#{topic_footer_button_id("bookmark")}.bookmarked", text: "Edit Bookmark")
end
def find_topic_footer_button(button)
find(topic_footer_button_id(button))
end
def click_reply_button
find(".topic-footer-main-buttons > .create").click
end
def has_expanded_composer?
has_css?("#reply-control.open")
end
def type_in_composer(input)
find("#reply-control .d-editor .d-editor-input").send_keys(input)
end
def clear_composer
find("#reply-control .d-editor .d-editor-input").set("")
end
def send_reply
find("#reply-control .save-or-cancel .create").click
end
private
def topic_footer_button_id(button)
"#topic-footer-button-#{button}"
end
end
end
end