diff options
Diffstat (limited to 'qa/qa/page/component')
-rw-r--r-- | qa/qa/page/component/blob_content.rb | 2 | ||||
-rw-r--r-- | qa/qa/page/component/design_management.rb | 2 | ||||
-rw-r--r-- | qa/qa/page/component/dropdown.rb | 53 | ||||
-rw-r--r-- | qa/qa/page/component/invite_members_modal.rb | 90 | ||||
-rw-r--r-- | qa/qa/page/component/members/invite_members_modal.rb | 92 | ||||
-rw-r--r-- | qa/qa/page/component/members/members_filter.rb | 27 | ||||
-rw-r--r-- | qa/qa/page/component/members/members_table.rb | 99 | ||||
-rw-r--r-- | qa/qa/page/component/members/remove_group_modal.rb | 38 | ||||
-rw-r--r-- | qa/qa/page/component/members/remove_member_modal.rb | 38 | ||||
-rw-r--r-- | qa/qa/page/component/members_filter.rb | 25 | ||||
-rw-r--r-- | qa/qa/page/component/select2.rb | 68 | ||||
-rw-r--r-- | qa/qa/page/component/wiki_sidebar.rb | 5 |
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 |