summaryrefslogtreecommitdiff
path: root/qa/qa/page/component/issuable/sidebar.rb
diff options
context:
space:
mode:
Diffstat (limited to 'qa/qa/page/component/issuable/sidebar.rb')
-rw-r--r--qa/qa/page/component/issuable/sidebar.rb129
1 files changed, 129 insertions, 0 deletions
diff --git a/qa/qa/page/component/issuable/sidebar.rb b/qa/qa/page/component/issuable/sidebar.rb
new file mode 100644
index 00000000000..4e94049efe7
--- /dev/null
+++ b/qa/qa/page/component/issuable/sidebar.rb
@@ -0,0 +1,129 @@
+# frozen_string_literal: true
+
+module QA
+ module Page
+ module Component
+ module Issuable
+ module Sidebar
+ extend QA::Page::PageConcern
+
+ def self.included(base)
+ super
+
+ base.view 'app/assets/javascripts/sidebar/components/assignees/assignee_avatar.vue' do
+ element :avatar_image
+ end
+
+ base.view 'app/assets/javascripts/sidebar/components/assignees/uncollapsed_assignee_list.vue' do
+ element :more_assignees_link
+ end
+
+ base.view 'app/helpers/dropdowns_helper.rb' do
+ element :dropdown_input_field
+ end
+
+ base.view 'app/views/shared/issuable/_sidebar.html.haml' do
+ element :assignee_block
+ element :dropdown_menu_labels
+ element :edit_labels_link
+ element :edit_milestone_link
+ element :labels_block
+ element :milestone_block
+ element :milestone_link
+ end
+ end
+
+ def assign_milestone(milestone)
+ click_element(:edit_milestone_link)
+ within_element(:milestone_block) do
+ click_link("#{milestone.title}")
+ end
+
+ wait_until(reload: false) do
+ has_element?(:milestone_block, text: milestone.title, wait: 0)
+ end
+
+ refresh
+ end
+
+ def click_milestone_link
+ click_element(:milestone_link)
+ end
+
+ def has_assignee?(username)
+ page.within(element_selector_css(:assignee_block)) do
+ has_text?(username)
+ end
+ end
+
+ def has_avatar_image_count?(count)
+ wait_assignees_block_finish_loading do
+ all_elements(:avatar_image, count: count)
+ end
+ end
+
+ def has_label?(label)
+ within_element(:labels_block) do
+ !!has_element?(:label, label_name: label)
+ end
+ end
+
+ def has_milestone?(milestone_title)
+ wait_milestone_block_finish_loading do
+ has_element?(:milestone_link, title: milestone_title)
+ end
+ end
+
+ def more_assignees_link
+ find_element(:more_assignees_link)
+ end
+
+ def select_labels_and_refresh(labels)
+ Support::Retrier.retry_until do
+ click_element(:edit_labels_link)
+ has_element?(:dropdown_menu_labels, text: labels.first)
+ end
+
+ labels.each do |label|
+ within_element(:dropdown_menu_labels, text: label) do
+ send_keys_to_element(:dropdown_input_field, [label, :enter])
+ end
+ end
+
+ click_element(:edit_labels_link)
+
+ labels.each do |label|
+ has_element?(:labels_block, text: label, wait: 0)
+ end
+
+ refresh
+ end
+
+ def toggle_more_assignees_link
+ click_element(:more_assignees_link)
+ end
+
+ private
+
+ def wait_assignees_block_finish_loading
+ within_element(:assignee_block) do
+ wait_until(reload: false, max_duration: 10, sleep_interval: 1) do
+ finished_loading_block?
+ yield
+ end
+ end
+ end
+
+ def wait_milestone_block_finish_loading
+ within_element(:milestone_block) do
+ wait_until(reload: false, max_duration: 10, sleep_interval: 1) do
+ finished_loading_block?
+ yield
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+end