mirror of
https://github.com/discourse/discourse.git
synced 2025-02-08 20:34:52 +00:00
973a0028b4
The bulk actions menu for topics has multiple options to work with tags on topics (append, replace, remove). Our tagging system along with categories allows for some complicated tag restrictions to be applied via tag groups. This was a problem for the topic bulk actions because you couldn't append restricted tags to topics. This commit allows restricted tags to be used in bulk tagging actions as long as all selected topics are for a sole category. The category information will be shown in the modal, and the category ID is used for the tag search.
94 lines
2.7 KiB
Ruby
94 lines
2.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module PageObjects
|
|
module Components
|
|
class TopicList < PageObjects::Components::Base
|
|
TOPIC_LIST_BODY_SELECTOR = ".topic-list-body"
|
|
TOPIC_LIST_ITEM_SELECTOR = "#{TOPIC_LIST_BODY_SELECTOR} .topic-list-item"
|
|
|
|
def topic_list
|
|
TOPIC_LIST_BODY_SELECTOR
|
|
end
|
|
|
|
def has_topics?(count: nil)
|
|
if count.nil?
|
|
page.has_css?(TOPIC_LIST_ITEM_SELECTOR)
|
|
else
|
|
page.has_css?(TOPIC_LIST_ITEM_SELECTOR, count: count)
|
|
end
|
|
end
|
|
|
|
def has_no_topics?
|
|
page.has_no_css?(TOPIC_LIST_ITEM_SELECTOR)
|
|
end
|
|
|
|
def has_topic?(topic)
|
|
page.has_css?(topic_list_item_class(topic))
|
|
end
|
|
|
|
def has_no_topic?(topic)
|
|
page.has_no_css?(topic_list_item_class(topic))
|
|
end
|
|
|
|
def has_topic_checkbox?(topic)
|
|
page.has_css?("#{topic_list_item_class(topic)} input#bulk-select-#{topic.id}")
|
|
end
|
|
|
|
def has_closed_status?(topic)
|
|
page.has_css?("#{topic_list_item_closed(topic)}")
|
|
end
|
|
|
|
def has_unread_badge?(topic)
|
|
page.has_css?("#{topic_list_item_unread_badge(topic)}")
|
|
end
|
|
|
|
def has_no_unread_badge?(topic)
|
|
page.has_no_css?("#{topic_list_item_unread_badge(topic)}")
|
|
end
|
|
|
|
def has_checkbox_selected_on_row?(n)
|
|
page.has_css?("#{TOPIC_LIST_ITEM_SELECTOR}:nth-child(#{n}) input.bulk-select:checked")
|
|
end
|
|
|
|
def has_no_checkbox_selected_on_row?(n)
|
|
page.has_no_css?("#{TOPIC_LIST_ITEM_SELECTOR}:nth-child(#{n}) input.bulk-select:checked")
|
|
end
|
|
|
|
def click_topic_checkbox(topic)
|
|
find("#{topic_list_item_class(topic)} input#bulk-select-#{topic.id}").click
|
|
end
|
|
|
|
def visit_topic_with_title(title)
|
|
find("#{TOPIC_LIST_BODY_SELECTOR} a", text: title).click
|
|
end
|
|
|
|
def visit_topic(topic)
|
|
find("#{topic_list_item_class(topic)} a.raw-topic-link").click
|
|
end
|
|
|
|
def visit_topic_last_reply_via_keyboard(topic)
|
|
find("#{topic_list_item_class(topic)} a.post-activity").native.send_keys(:return)
|
|
end
|
|
|
|
def visit_topic_first_reply_via_keyboard(topic)
|
|
find("#{topic_list_item_class(topic)} button.posts-map").native.send_keys(:return)
|
|
find("#topic-entrance button.jump-top").native.send_keys(:return)
|
|
end
|
|
|
|
def topic_list_item_class(topic)
|
|
"#{TOPIC_LIST_ITEM_SELECTOR}[data-topic-id='#{topic.id}']"
|
|
end
|
|
|
|
private
|
|
|
|
def topic_list_item_closed(topic)
|
|
"#{topic_list_item_class(topic)} .topic-statuses .topic-status svg.locked"
|
|
end
|
|
|
|
def topic_list_item_unread_badge(topic)
|
|
"#{topic_list_item_class(topic)} .topic-post-badges .unread-posts"
|
|
end
|
|
end
|
|
end
|
|
end
|