summaryrefslogtreecommitdiff
path: root/qa/qa/page/component
diff options
context:
space:
mode:
Diffstat (limited to 'qa/qa/page/component')
-rw-r--r--qa/qa/page/component/blob_content.rb2
-rw-r--r--qa/qa/page/component/design_management.rb2
-rw-r--r--qa/qa/page/component/dropdown.rb53
-rw-r--r--qa/qa/page/component/invite_members_modal.rb90
-rw-r--r--qa/qa/page/component/members/invite_members_modal.rb92
-rw-r--r--qa/qa/page/component/members/members_filter.rb27
-rw-r--r--qa/qa/page/component/members/members_table.rb99
-rw-r--r--qa/qa/page/component/members/remove_group_modal.rb38
-rw-r--r--qa/qa/page/component/members/remove_member_modal.rb38
-rw-r--r--qa/qa/page/component/members_filter.rb25
-rw-r--r--qa/qa/page/component/select2.rb68
-rw-r--r--qa/qa/page/component/wiki_sidebar.rb5
12 files changed, 311 insertions, 228 deletions
diff --git a/qa/qa/page/component/blob_content.rb b/qa/qa/page/component/blob_content.rb
index a57ef38f768..5ee5d4978e5 100644
--- a/qa/qa/page/component/blob_content.rb
+++ b/qa/qa/page/component/blob_content.rb
@@ -22,7 +22,7 @@ module QA
element :copy_contents_button
end
- base.view 'app/assets/javascripts/vue_shared/components/source_viewer/source_viewer.vue' do
+ base.view 'app/assets/javascripts/vue_shared/components/source_viewer/source_viewer_deprecated.vue' do
element :blob_viewer_file_content
end
end
diff --git a/qa/qa/page/component/design_management.rb b/qa/qa/page/component/design_management.rb
index 90c86688882..71c24b6cac8 100644
--- a/qa/qa/page/component/design_management.rb
+++ b/qa/qa/page/component/design_management.rb
@@ -78,7 +78,7 @@ module QA
end
def update_design(filename)
- filepath = ::File.join('qa', 'fixtures', 'designs', 'update', filename)
+ filepath = ::File.join(Runtime::Path.fixtures_path, 'designs', 'update', filename)
add_design(filepath)
end
diff --git a/qa/qa/page/component/dropdown.rb b/qa/qa/page/component/dropdown.rb
index c3e0fefee0d..01ef3533ff8 100644
--- a/qa/qa/page/component/dropdown.rb
+++ b/qa/qa/page/component/dropdown.rb
@@ -4,36 +4,24 @@ module QA
module Page
module Component
module Dropdown
- include Select2
-
def select_item(item_text)
- return super if use_select2?
-
- find('li.gl-dropdown-item', text: item_text, match: :prefer_exact).click
+ find('li.gl-new-dropdown-item', text: item_text, match: :prefer_exact).click
end
def has_item?(item_text)
- return super if use_select2?
-
- has_css?('li.gl-dropdown-item', text: item_text, match: :prefer_exact)
+ has_css?('li.gl-new-dropdown-item', text: item_text, match: :prefer_exact)
end
def current_selection
- return super if use_select2?
-
expand_select_list unless dropdown_open?
- find('span.gl-dropdown-button-text').text
+ find('span.gl-new-dropdown-button-text').text
end
def all_items
- raise NotImplementedError if use_select2?
-
- find_all("li.gl-dropdown-item").map(&:text)
+ find_all("li.gl-new-dropdown-item").map(&:text)
end
def clear_current_selection_if_present
- return super if use_select2?
-
expand_select_list unless dropdown_open?
if has_css?('button[data-testid="listbox-reset-button"]')
@@ -44,9 +32,9 @@ module QA
end
def search_item(item_text)
- return super if use_select2?
+ QA::Runtime::Logger.info "Searching in dropdown: \"#{item_text}\""
- find('div.gl-listbox-search input[type="Search"]').set(item_text)
+ find('div.gl-listbox-search input[type="Search"]').set(item_text, rapid: false)
wait_for_search_to_complete
end
@@ -56,10 +44,6 @@ module QA
end
def search_and_select(item_text)
- return super if use_select2?
-
- QA::Runtime::Logger.info "Searching and selecting: #{item_text}"
-
search_item(item_text)
unless has_item?(item_text)
@@ -70,9 +54,7 @@ module QA
end
def search_and_select_exact(item_text)
- return super if use_select2?
-
- QA::Runtime::Logger.info "Searching and selecting: #{item_text}"
+ QA::Runtime::Logger.info "Searching and selecting exact: \"#{item_text}\""
search_item(item_text)
@@ -80,18 +62,14 @@ module QA
raise QA::Page::Base::ElementNotFound, %(Couldn't find option named "#{item_text}")
end
- find('li.gl-dropdown-item span:nth-child(2)', text: item_text, exact_text: true).click
+ find('li.gl-new-dropdown-item span:nth-child(2)', text: item_text, exact_text: true).click
end
def expand_select_list
- return super if use_select2?
-
- find('svg.dropdown-chevron').click
+ find('.gl-new-dropdown-toggle').click
end
def wait_for_search_to_complete
- return super if use_select2?
-
Support::WaitForRequests.wait_for_requests
has_css?('div[data-testid="listbox-search-loader"]', wait: 1)
@@ -99,23 +77,12 @@ module QA
end
def dropdown_open?
- return super if use_select2?
-
- has_css?('ul.gl-dropdown-contents', wait: 1)
+ has_css?('ul.gl-new-dropdown-contents', wait: 1)
end
def find_input_by_prefix_and_set(element_prefix, item_text)
find("input[id^=\"#{element_prefix}\"]").set(item_text)
end
-
- private
-
- # rubocop:disable Gitlab/PredicateMemoization
- def use_select2?
- @use_select2 ||= has_css?('.select2-container', wait: 1)
- end
-
- # rubocop:enable Gitlab/PredicateMemoization
end
end
end
diff --git a/qa/qa/page/component/invite_members_modal.rb b/qa/qa/page/component/invite_members_modal.rb
deleted file mode 100644
index eb791594d22..00000000000
--- a/qa/qa/page/component/invite_members_modal.rb
+++ /dev/null
@@ -1,90 +0,0 @@
-# frozen_string_literal: true
-
-module QA
- module Page
- module Component
- module InviteMembersModal
- extend QA::Page::PageConcern
-
- def self.included(base)
- super
-
- base.view 'app/assets/javascripts/invite_members/components/invite_modal_base.vue' do
- element :invite_button
- element :access_level_dropdown
- element :invite_members_modal_content
- end
-
- base.view 'app/assets/javascripts/invite_members/components/group_select.vue' do
- element :group_select_dropdown_search_field
- element :group_select_dropdown_item
- end
-
- base.view 'app/assets/javascripts/invite_members/components/members_token_select.vue' do
- element :members_token_select_input
- end
-
- base.view 'app/assets/javascripts/invite_members/components/invite_group_trigger.vue' do
- element :invite_a_group_button
- end
-
- base.view 'app/assets/javascripts/invite_members/constants.js' do
- element :invite_members_button
- end
- end
-
- def open_invite_members_modal
- click_element :invite_members_button
- end
-
- def open_invite_group_modal
- click_element :invite_a_group_button
- end
-
- def add_member(username, access_level = 'Developer', refresh_page: true)
- open_invite_members_modal
-
- within_element(:invite_members_modal_content) do
- fill_element(:members_token_select_input, username)
- Support::WaitForRequests.wait_for_requests
- click_button(username, match: :prefer_exact)
- set_access_level(access_level)
- end
-
- send_invite(refresh_page)
- end
-
- def invite_group(group_name, access_level = 'Guest', refresh_page: true)
- open_invite_group_modal
-
- within_element(:invite_members_modal_content) do
- click_button 'Select a group'
-
- Support::Waiter.wait_until { has_element?(:group_select_dropdown_item) }
-
- fill_element :group_select_dropdown_search_field, group_name
- Support::WaitForRequests.wait_for_requests
- click_button group_name
-
- set_access_level(access_level)
- end
-
- send_invite(refresh_page)
- end
-
- def send_invite(refresh = false)
- click_element :invite_button
- Support::WaitForRequests.wait_for_requests
- page.refresh if refresh
- end
-
- private
-
- def set_access_level(access_level)
- # Guest option is selected by default, skipping these steps if desired option is 'Guest'
- select_element(:access_level_dropdown, access_level) unless access_level == 'Guest'
- end
- end
- end
- end
-end
diff --git a/qa/qa/page/component/members/invite_members_modal.rb b/qa/qa/page/component/members/invite_members_modal.rb
new file mode 100644
index 00000000000..0220bb1e4fc
--- /dev/null
+++ b/qa/qa/page/component/members/invite_members_modal.rb
@@ -0,0 +1,92 @@
+# frozen_string_literal: true
+
+module QA
+ module Page
+ module Component
+ module Members
+ module InviteMembersModal
+ extend QA::Page::PageConcern
+
+ def self.included(base)
+ super
+
+ base.view 'app/assets/javascripts/invite_members/components/invite_modal_base.vue' do
+ element :invite_button
+ element :access_level_dropdown
+ element :invite_members_modal_content
+ end
+
+ base.view 'app/assets/javascripts/invite_members/components/group_select.vue' do
+ element :group_select_dropdown_search_field
+ element :group_select_dropdown_item
+ end
+
+ base.view 'app/assets/javascripts/invite_members/components/members_token_select.vue' do
+ element :members_token_select_input
+ end
+
+ base.view 'app/assets/javascripts/invite_members/components/invite_group_trigger.vue' do
+ element :invite_a_group_button
+ end
+
+ base.view 'app/assets/javascripts/invite_members/constants.js' do
+ element :invite_members_button
+ end
+ end
+
+ def open_invite_members_modal
+ click_element :invite_members_button
+ end
+
+ def open_invite_group_modal
+ click_element :invite_a_group_button
+ end
+
+ def add_member(username, access_level = 'Developer', refresh_page: true)
+ open_invite_members_modal
+
+ within_element(:invite_members_modal_content) do
+ fill_element(:members_token_select_input, username)
+ Support::WaitForRequests.wait_for_requests
+ click_button(username, match: :prefer_exact)
+ set_access_level(access_level)
+ end
+
+ send_invite(refresh_page)
+ end
+
+ def invite_group(group_name, access_level = 'Guest', refresh_page: true)
+ open_invite_group_modal
+
+ within_element(:invite_members_modal_content) do
+ click_button 'Select a group'
+
+ Support::Waiter.wait_until { has_element?(:group_select_dropdown_item) }
+
+ fill_element :group_select_dropdown_search_field, group_name
+ Support::WaitForRequests.wait_for_requests
+ click_button group_name
+
+ set_access_level(access_level)
+ end
+
+ send_invite(refresh_page)
+ end
+
+ def send_invite(refresh = false)
+ click_element :invite_button
+ Support::WaitForRequests.wait_for_requests
+ page.refresh if refresh
+ end
+
+ private
+
+ def set_access_level(access_level)
+ # Guest option is selected by default, skipping these steps if desired option is 'Guest'
+ select_element(:access_level_dropdown, access_level) unless access_level == 'Guest'
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/page/component/members/members_filter.rb b/qa/qa/page/component/members/members_filter.rb
new file mode 100644
index 00000000000..8803211ea86
--- /dev/null
+++ b/qa/qa/page/component/members/members_filter.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+module QA
+ module Page
+ module Component
+ module Members
+ module MembersFilter
+ extend QA::Page::PageConcern
+
+ def self.included(base)
+ super
+
+ base.view 'app/assets/javascripts/members/components/filter_sort/members_filtered_search_bar.vue' do
+ element :search_bar_input
+ element :search_button
+ end
+ end
+
+ def search_member(username)
+ fill_element :search_bar_input, username
+ click_element :search_button
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/page/component/members/members_table.rb b/qa/qa/page/component/members/members_table.rb
new file mode 100644
index 00000000000..46010a0f9ab
--- /dev/null
+++ b/qa/qa/page/component/members/members_table.rb
@@ -0,0 +1,99 @@
+# frozen_string_literal: true
+
+module QA
+ module Page
+ module Component
+ module Members
+ module MembersTable
+ extend QA::Page::PageConcern
+
+ def self.included(base)
+ super
+
+ base.class_eval do
+ include MembersFilter
+ include RemoveMemberModal
+ include RemoveGroupModal
+ end
+
+ base.view 'app/assets/javascripts/members/components/table/members_table.vue' do
+ element :member_row
+ end
+
+ base.view 'app/assets/javascripts/members/components/table/role_dropdown.vue' do
+ element :access_level_dropdown
+ element :access_level_link
+ end
+
+ base.view 'app/assets/javascripts/members/components/action_dropdowns/user_action_dropdown.vue' do
+ element :user_action_dropdown
+ end
+
+ base.view 'app/assets/javascripts/members/components/action_dropdowns/remove_member_dropdown_item.vue' do
+ element :delete_member_dropdown_item
+ end
+
+ base.view 'app/assets/javascripts/members/components/action_buttons/approve_access_request_button.vue' do
+ element :approve_access_request_button
+ end
+
+ base.view 'app/assets/javascripts/members/components/members_tabs.vue' do
+ element :groups_list_tab
+ end
+
+ base.view 'app/assets/javascripts/members/components/action_buttons/remove_group_link_button.vue' do
+ element :remove_group_link_button
+ end
+ end
+
+ def update_access_level(username, access_level)
+ search_member(username)
+
+ within_element(:member_row, text: username) do
+ click_element :access_level_dropdown
+ click_element :access_level_link, text: access_level
+ end
+ end
+
+ def remove_member(username)
+ within_element(:member_row, text: username) do
+ click_element :user_action_dropdown
+ click_element :delete_member_dropdown_item
+ end
+
+ confirm_remove_member
+ end
+
+ def approve_access_request(username)
+ within_element(:member_row, text: username) do
+ click_element :approve_access_request_button
+ end
+ end
+
+ def deny_access_request(username)
+ within_element(:member_row, text: username) do
+ click_element :delete_member_button
+ end
+
+ confirm_remove_member
+ end
+
+ def remove_group(group_name)
+ click_element :groups_list_tab
+
+ within_element(:member_row, text: group_name) do
+ click_element :remove_group_link_button
+ end
+
+ confirm_remove_group
+ end
+
+ def has_group?(group_name)
+ click_element :groups_list_tab
+ has_element?(:member_row, text: group_name)
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/page/component/members/remove_group_modal.rb b/qa/qa/page/component/members/remove_group_modal.rb
new file mode 100644
index 00000000000..03c51757b62
--- /dev/null
+++ b/qa/qa/page/component/members/remove_group_modal.rb
@@ -0,0 +1,38 @@
+# frozen_string_literal: true
+
+module QA
+ module Page
+ module Component
+ module Members
+ module RemoveGroupModal
+ extend QA::Page::PageConcern
+
+ def self.included(base)
+ super
+
+ base.view 'app/assets/javascripts/members/components/modals/remove_group_link_modal.vue' do
+ element :remove_group_link_modal_content
+ element :remove_group_button
+ end
+ end
+
+ def confirm_remove_group
+ within_element(:remove_group_link_modal_content) do
+ wait_for_enabled_remove_group_button
+
+ click_element :remove_group_button
+ end
+ end
+
+ private
+
+ def wait_for_enabled_remove_group_button
+ retry_until(sleep_interval: 1, message: 'Waiting for remove group button to be enabled') do
+ has_element?(:remove_group_button, disabled: false, wait: 3)
+ end
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/page/component/members/remove_member_modal.rb b/qa/qa/page/component/members/remove_member_modal.rb
new file mode 100644
index 00000000000..b7b81040ba7
--- /dev/null
+++ b/qa/qa/page/component/members/remove_member_modal.rb
@@ -0,0 +1,38 @@
+# frozen_string_literal: true
+
+module QA
+ module Page
+ module Component
+ module Members
+ module RemoveMemberModal
+ extend QA::Page::PageConcern
+
+ def self.included(base)
+ super
+
+ base.view 'app/assets/javascripts/members/components/modals/remove_member_modal.vue' do
+ element :remove_member_modal
+ element :remove_member_button
+ end
+ end
+
+ def confirm_remove_member
+ within_element(:remove_member_modal) do
+ wait_for_enabled_remove_member_button
+
+ click_element :remove_member_button
+ end
+ end
+
+ private
+
+ def wait_for_enabled_remove_member_button
+ retry_until(sleep_interval: 1, message: 'Waiting for remove member button to be enabled') do
+ has_element?(:remove_member_button, disabled: false, wait: 3)
+ end
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/page/component/members_filter.rb b/qa/qa/page/component/members_filter.rb
deleted file mode 100644
index fce4560d255..00000000000
--- a/qa/qa/page/component/members_filter.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-# frozen_string_literal: true
-
-module QA
- module Page
- module Component
- module MembersFilter
- extend QA::Page::PageConcern
-
- def self.included(base)
- super
-
- base.view 'app/assets/javascripts/members/components/filter_sort/members_filtered_search_bar.vue' do
- element :search_bar_input
- element :search_button
- end
- end
-
- def search_member(username)
- fill_element :search_bar_input, username
- click_element :search_button
- end
- end
- end
- end
-end
diff --git a/qa/qa/page/component/select2.rb b/qa/qa/page/component/select2.rb
deleted file mode 100644
index 7a835af2575..00000000000
--- a/qa/qa/page/component/select2.rb
+++ /dev/null
@@ -1,68 +0,0 @@
-# frozen_string_literal: true
-
-module QA
- module Page
- module Component
- module Select2
- def select_item(item_text)
- find('.select2-result-label', text: item_text, match: :prefer_exact).click
- end
-
- def has_item?(item_text)
- has_css?('.select2-result-label', text: item_text, match: :prefer_exact)
- end
-
- def current_selection
- find('.select2-chosen').text
- end
-
- def clear_current_selection_if_present
- if has_css?('a > abbr.select2-search-choice-close', wait: 1.0)
- find('a > abbr.select2-search-choice-close').click
- end
- end
-
- def search_item(item_text)
- find('.select2-input').set(item_text)
-
- wait_for_search_to_complete
- end
-
- def search_and_select(item_text)
- QA::Runtime::Logger.info "Searching and selecting: #{item_text}"
-
- search_item(item_text)
-
- raise QA::Page::Base::ElementNotFound, %Q(Couldn't find option named "#{item_text}") unless has_item?(item_text)
-
- select_item(item_text)
- end
-
- def search_and_select_exact(item_text)
- QA::Runtime::Logger.info "Searching and selecting: #{item_text}"
-
- search_item(item_text)
-
- raise QA::Page::Base::ElementNotFound, %Q(Couldn't find option named "#{item_text}") unless has_item?(item_text)
-
- find('.select2-result-label', text: item_text, exact_text: true).click
- end
-
- def expand_select_list
- find('span.select2-arrow').click
- end
-
- def wait_for_search_to_complete
- Support::WaitForRequests.wait_for_requests
-
- has_css?('.select2-active', wait: 1)
- has_no_css?('.select2-active', wait: 30)
- end
-
- def dropdown_open?
- find('.select2-focusser').disabled?
- end
- end
- end
- end
-end
diff --git a/qa/qa/page/component/wiki_sidebar.rb b/qa/qa/page/component/wiki_sidebar.rb
index dfb912a1d0b..7543b9655f9 100644
--- a/qa/qa/page/component/wiki_sidebar.rb
+++ b/qa/qa/page/component/wiki_sidebar.rb
@@ -20,6 +20,7 @@ module QA
base.view 'app/views/shared/wikis/_wiki_directory.html.haml' do
element :wiki_directory_content
+ element :wiki_dir_page_link
end
end
@@ -42,6 +43,10 @@ module QA
def has_directory?(directory)
has_element?(:wiki_directory_content, text: directory)
end
+
+ def has_dir_page?(dir_page)
+ has_element?(:wiki_dir_page_link, page_name: dir_page)
+ end
end
end
end