diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-05-19 15:44:42 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-05-19 15:44:42 +0000 |
commit | 4555e1b21c365ed8303ffb7a3325d773c9b8bf31 (patch) | |
tree | 5423a1c7516cffe36384133ade12572cf709398d /qa/qa/page | |
parent | e570267f2f6b326480d284e0164a6464ba4081bc (diff) | |
download | gitlab-ce-4555e1b21c365ed8303ffb7a3325d773c9b8bf31.tar.gz |
Add latest changes from gitlab-org/gitlab@13-12-stable-eev13.12.0-rc42
Diffstat (limited to 'qa/qa/page')
63 files changed, 597 insertions, 361 deletions
diff --git a/qa/qa/page/admin/menu.rb b/qa/qa/page/admin/menu.rb index 37275465221..e55e156fb8a 100644 --- a/qa/qa/page/admin/menu.rb +++ b/qa/qa/page/admin/menu.rb @@ -107,4 +107,4 @@ module QA end end -QA::Page::Admin::Menu.prepend_if_ee('QA::EE::Page::Admin::Menu') +QA::Page::Admin::Menu.prepend_mod_with('Page::Admin::Menu', namespace: QA) diff --git a/qa/qa/page/admin/overview/groups/edit.rb b/qa/qa/page/admin/overview/groups/edit.rb index c96e953d05b..8e4650a1232 100644 --- a/qa/qa/page/admin/overview/groups/edit.rb +++ b/qa/qa/page/admin/overview/groups/edit.rb @@ -20,4 +20,4 @@ module QA end end -QA::Page::Admin::Overview::Groups::Edit.prepend_if_ee('QA::EE::Page::Admin::Overview::Groups::Edit') +QA::Page::Admin::Overview::Groups::Edit.prepend_mod_with('Page::Admin::Overview::Groups::Edit', namespace: QA) diff --git a/qa/qa/page/admin/overview/users/index.rb b/qa/qa/page/admin/overview/users/index.rb index 1885644d226..f8c79b4f72c 100644 --- a/qa/qa/page/admin/overview/users/index.rb +++ b/qa/qa/page/admin/overview/users/index.rb @@ -29,7 +29,7 @@ module QA def click_user(username) within_element(:user_row_content, text: username) do - click_element(:username_link) + click_link(username) end end end diff --git a/qa/qa/page/alert/free_trial.rb b/qa/qa/page/alert/free_trial.rb new file mode 100644 index 00000000000..4a48d4ca277 --- /dev/null +++ b/qa/qa/page/alert/free_trial.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +module QA + module Page + module Alert + class FreeTrial < Chemlab::Page + # TODO: Supplant with data-qa-selectors + h4 :trial_activated_message, class: 'gl-banner-title' + end + end + end +end diff --git a/qa/qa/page/base.rb b/qa/qa/page/base.rb index 289094268b6..66040bb9849 100644 --- a/qa/qa/page/base.rb +++ b/qa/qa/page/base.rb @@ -132,16 +132,16 @@ module QA all(element_selector_css(name), **kwargs) end - def check_element(name, click_by_js = false) - if find_element(name, visible: false).checked? + def check_element(name, click_by_js = false, visibility = false) + if find_element(name, visible: visibility).checked? QA::Runtime::Logger.debug("#{name} is already checked") return end retry_until(sleep_interval: 1) do - click_checkbox_or_radio(name, click_by_js) - checked = find_element(name, visible: false).checked? + click_checkbox_or_radio(name, click_by_js, visibility) + checked = find_element(name, visible: visibility).checked? QA::Runtime::Logger.debug(checked ? "#{name} was checked" : "#{name} was not checked") @@ -149,16 +149,16 @@ module QA end end - def uncheck_element(name, click_by_js = false) - unless find_element(name, visible: false).checked? + def uncheck_element(name, click_by_js = false, visibility = false) + unless find_element(name, visible: visibility).checked? QA::Runtime::Logger.debug("#{name} is already unchecked") return end retry_until(sleep_interval: 1) do - click_checkbox_or_radio(name, click_by_js) - unchecked = !find_element(name, visible: false).checked? + click_checkbox_or_radio(name, click_by_js, visibility) + unchecked = !find_element(name, visible: visibility).checked? QA::Runtime::Logger.debug(unchecked ? "#{name} was unchecked" : "#{name} was not unchecked") @@ -167,21 +167,22 @@ module QA end # Method for selecting radios - def choose_element(name, click_by_js = false) - if find_element(name, visible: false).checked? + def choose_element(name, click_by_js = false, visibility = false) + if find_element(name, visible: visibility).checked? QA::Runtime::Logger.debug("#{name} is already selected") return end retry_until(sleep_interval: 1) do - click_checkbox_or_radio(name, click_by_js) - selected = find_element(name, visible: false).checked? + click_checkbox_or_radio(name, click_by_js, visibility) + selected = find_element(name, visible: visibility).checked? QA::Runtime::Logger.debug(selected ? "#{name} was selected" : "#{name} was not selected") selected end + wait_for_requests end # Use this to simulate moving the pointer to an element's coordinate @@ -226,10 +227,12 @@ module QA wait = kwargs.delete(:wait) || Capybara.default_max_wait_time text = kwargs.delete(:text) klass = kwargs.delete(:class) + visible = kwargs.delete(:visible) + visible = visible.nil? && true try_find_element = ->(wait) do if disabled.nil? - has_css?(element_selector_css(name, kwargs), text: text, wait: wait, class: klass) + has_css?(element_selector_css(name, kwargs), text: text, wait: wait, class: klass, visible: visible) else find_element(name, original_kwargs).disabled? == disabled end @@ -337,8 +340,10 @@ module QA end end - def scroll_to_element(name, *args) - scroll_to(element_selector_css(name), *args) + def scroll_to_element(name, *kwargs) + text = kwargs.delete(:text) + + scroll_to(element_selector_css(name, kwargs), text: text) end def element_selector_css(name, *attributes) @@ -399,7 +404,7 @@ module QA end def visible? - raise NoRequiredElementsError.new(self.class) if self.class.required_elements.empty? + raise NoRequiredElementsError, self.class if self.class.required_elements.empty? self.class.required_elements.each do |required_element| return false if has_no_element? required_element @@ -424,8 +429,8 @@ module QA private - def click_checkbox_or_radio(name, click_by_js) - box = find_element(name, visible: false) + def click_checkbox_or_radio(name, click_by_js, visibility) + box = find_element(name, visible: visibility) # Some checkboxes and radio buttons are hidden by their labels and cannot be clicked directly click_by_js ? page.execute_script("arguments[0].click();", box) : box.click end diff --git a/qa/qa/page/component/access_tokens.rb b/qa/qa/page/component/access_tokens.rb index d8e3d12b38b..3c8a6cf6a1d 100644 --- a/qa/qa/page/component/access_tokens.rb +++ b/qa/qa/page/component/access_tokens.rb @@ -19,7 +19,7 @@ module QA end base.view 'app/views/shared/tokens/_scopes_form.html.haml' do - element :api_radio, 'qa-#{scope}-radio' # rubocop:disable QA/ElementWithPattern, Lint/InterpolationCheck + element :api_checkbox, '#{scope}_checkbox' # rubocop:disable QA/ElementWithPattern, Lint/InterpolationCheck end base.view 'app/views/shared/access_tokens/_created_container.html.haml' do @@ -36,7 +36,7 @@ module QA end def check_api - check_element(:api_radio) + check_element(:api_checkbox) end def click_create_token_button diff --git a/qa/qa/page/component/issue_board/show.rb b/qa/qa/page/component/issue_board/show.rb index dbf4dc30116..e0c8f73e1b0 100644 --- a/qa/qa/page/component/issue_board/show.rb +++ b/qa/qa/page/component/issue_board/show.rb @@ -137,4 +137,4 @@ module QA end end -QA::Page::Component::IssueBoard::Show.prepend_if_ee('QA::EE::Page::Component::IssueBoard::Show') +QA::Page::Component::IssueBoard::Show.prepend_mod_with('Page::Component::IssueBoard::Show', namespace: QA) diff --git a/qa/qa/page/component/visibility_setting.rb b/qa/qa/page/component/visibility_setting.rb new file mode 100644 index 00000000000..4370cfb4564 --- /dev/null +++ b/qa/qa/page/component/visibility_setting.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +module QA + module Page + module Component + module VisibilitySetting + extend QA::Page::PageConcern + + def self.included(base) + super + + base.view 'app/views/shared/_visibility_radios.html.haml' do + element :visibility_radio, 'qa_selector: "#{visibility_level_label(level).downcase}_radio"' # rubocop:disable QA/ElementWithPattern, Lint/InterpolationCheck + end + end + + def set_visibility(visibility) + choose_element("#{visibility.downcase}_radio", false, true) + end + end + end + end +end diff --git a/qa/qa/page/dashboard/projects.rb b/qa/qa/page/dashboard/projects.rb index b9e2383a3eb..8be11550233 100644 --- a/qa/qa/page/dashboard/projects.rb +++ b/qa/qa/page/dashboard/projects.rb @@ -45,4 +45,4 @@ module QA end end -QA::Page::Dashboard::Projects.prepend_if_ee('QA::EE::Page::Dashboard::Projects') +QA::Page::Dashboard::Projects.prepend_mod_with('Page::Dashboard::Projects', namespace: QA) diff --git a/qa/qa/page/dashboard/snippet/index.rb b/qa/qa/page/dashboard/snippet/index.rb index 8c4abfdf606..63589c376f6 100644 --- a/qa/qa/page/dashboard/snippet/index.rb +++ b/qa/qa/page/dashboard/snippet/index.rb @@ -10,10 +10,32 @@ module QA element :global_new_snippet_link end + view 'app/views/shared/snippets/_snippet.html.haml' do + element :snippet_link + element :snippet_visibility_content + element :snippet_file_count_content + end + def go_to_new_snippet_page click_element :new_menu_toggle click_element :global_new_snippet_link end + + def has_snippet_title?(snippet_title) + has_element?(:snippet_link, snippet_title: snippet_title) + end + + def has_visibility_level?(snippet_title, visibility) + within_element(:snippet_link, snippet_title: snippet_title) do + has_element?(:snippet_visibility_content, snippet_visibility: visibility) + end + end + + def has_number_of_files?(snippet_title, number) + within_element(:snippet_link, snippet_title: snippet_title) do + has_element?(:snippet_file_count_content, snippet_files: number) + end + end end end end diff --git a/qa/qa/page/file/shared/commit_message.rb b/qa/qa/page/file/shared/commit_message.rb index 906f5f3581a..4c25e8a480b 100644 --- a/qa/qa/page/file/shared/commit_message.rb +++ b/qa/qa/page/file/shared/commit_message.rb @@ -11,7 +11,7 @@ module QA super base.view 'app/views/shared/_commit_message_container.html.haml' do - element :commit_message, "text_area_tag 'commit_message'" # rubocop:disable QA/ElementWithPattern + element :commit_message_field end base.view 'app/views/projects/commits/_commit.html.haml' do @@ -20,7 +20,7 @@ module QA end def add_commit_message(message) - fill_in 'commit_message', with: message + fill_element(:commit_message_field, message) end def has_commit_message?(text) diff --git a/qa/qa/page/file/show.rb b/qa/qa/page/file/show.rb index 28b6b3be154..cefbbbcdba0 100644 --- a/qa/qa/page/file/show.rb +++ b/qa/qa/page/file/show.rb @@ -62,4 +62,4 @@ module QA end end -QA::Page::File::Show.prepend_if_ee('QA::EE::Page::File::Show') +QA::Page::File::Show.prepend_mod_with('Page::File::Show', namespace: QA) diff --git a/qa/qa/page/group/bulk_import.rb b/qa/qa/page/group/bulk_import.rb new file mode 100644 index 00000000000..11741bdf4cb --- /dev/null +++ b/qa/qa/page/group/bulk_import.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: true + +module QA + module Page + module Group + class BulkImport < Page::Base + view "app/assets/javascripts/import_entities/import_groups/components/import_table.vue" do + element :import_table + end + + view "app/assets/javascripts/import_entities/import_groups/components/import_table_row.vue" do + element :import_item + element :target_namespace_selector_dropdown + element :target_group_dropdown_item + element :import_status_indicator + element :import_group_button + end + + # Import source group in to target group + # + # @param [String] source_group_name + # @param [String] target_group_name + # @return [void] + def import_group(source_group_name, target_group_name) + finished_loading? + + within_element(:import_item, source_group: source_group_name) do + click_element(:target_namespace_selector_dropdown) + click_element(:target_group_dropdown_item, group_name: target_group_name) + click_element(:import_group_button) + end + end + + # Check if import page has a successfully imported group + # + # @param [String] source_group_name + # @param [Integer] wait + # @return [Boolean] + def has_imported_group?(source_group_name, wait: QA::Support::WaitForRequests::DEFAULT_MAX_WAIT_TIME) + within_element(:import_item, source_group: source_group_name) do + has_element?(:import_status_indicator, text: "Complete", wait: wait) + end + end + end + end + end +end diff --git a/qa/qa/page/group/menu.rb b/qa/qa/page/group/menu.rb index 10c0ee1f0a9..66e8b5d5863 100644 --- a/qa/qa/page/group/menu.rb +++ b/qa/qa/page/group/menu.rb @@ -11,7 +11,7 @@ module QA element :group_issues_item element :group_members_item element :group_milestones_link - element :group_settings_item + element :group_settings end view 'app/views/groups/sidebar/_packages_settings.html.haml' do @@ -31,7 +31,7 @@ module QA def click_settings within_sidebar do - click_element(:group_settings_item) + click_element(:group_settings) end end @@ -44,7 +44,7 @@ module QA end def click_group_general_settings_item - hover_element(:group_settings_item) do + hover_element(:group_settings) do within_submenu(:group_sidebar_submenu) do click_element(:general_settings_link) end @@ -60,8 +60,8 @@ module QA end def go_to_package_settings - scroll_to_element(:group_settings_item) - hover_element(:group_settings_item) do + scroll_to_element(:group_settings) + hover_element(:group_settings) do within_submenu(:group_sidebar_submenu) do click_element(:group_package_settings_link) end @@ -83,4 +83,4 @@ module QA end end -QA::Page::Group::Menu.prepend_if_ee('QA::EE::Page::Group::Menu') +QA::Page::Group::Menu.prepend_mod_with('Page::Group::Menu', namespace: QA) diff --git a/qa/qa/page/group/new.rb b/qa/qa/page/group/new.rb index 5f43cfb49c0..5a908266597 100644 --- a/qa/qa/page/group/new.rb +++ b/qa/qa/page/group/new.rb @@ -4,28 +4,51 @@ module QA module Page module Group class New < Page::Base + include Page::Component::VisibilitySetting + view 'app/views/shared/_group_form.html.haml' do - element :group_path_field, 'text_field :path' # rubocop:disable QA/ElementWithPattern - element :group_name_field, 'text_field :name' # rubocop:disable QA/ElementWithPattern + element :group_path_field + element :group_name_field end view 'app/views/groups/_new_group_fields.html.haml' do element :create_group_button, "submit _('Create group')" # rubocop:disable QA/ElementWithPattern - element :visibility_radios, 'visibility_level:' # rubocop:disable QA/ElementWithPattern end - def set_path(path) - fill_in 'group_path', with: path - fill_in 'group_name', with: path + view 'app/views/groups/_import_group_from_another_instance_panel.html.haml' do + element :import_gitlab_url + element :import_gitlab_token + element :connect_instance_button end - def set_visibility(visibility) - choose visibility + def set_path(path) + fill_element(:group_path_field, path) + fill_element(:group_name_field, path) end def create click_button 'Create group' end + + def set_gitlab_url(url) + fill_element(:import_gitlab_url, url) + end + + def set_gitlab_token(token) + fill_element(:import_gitlab_token, token) + end + + # Connect gitlab instance + # + # @param [String] gitlab_url + # @param [String] gitlab_token + # @return [void] + def connect_gitlab_instance(gitlab_url, gitlab_token) + set_gitlab_url(gitlab_url) + set_gitlab_token(gitlab_token) + + click_element(:connect_instance_button) + end end end end diff --git a/qa/qa/page/group/settings/billing.rb b/qa/qa/page/group/settings/billing.rb new file mode 100644 index 00000000000..a83af47fc35 --- /dev/null +++ b/qa/qa/page/group/settings/billing.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +module QA + module Page + module Group + module Settings + class Billing < Chemlab::Page + link :start_your_free_trial + end + end + end + end +end diff --git a/qa/qa/page/group/settings/general.rb b/qa/qa/page/group/settings/general.rb index 1ab849d10b1..4977e5c7105 100644 --- a/qa/qa/page/group/settings/general.rb +++ b/qa/qa/page/group/settings/general.rb @@ -6,6 +6,7 @@ module QA module Settings class General < QA::Page::Base include ::QA::Page::Settings::Common + include Page::Component::VisibilitySetting view 'app/views/groups/edit.html.haml' do element :permission_lfs_2fa_content @@ -21,10 +22,6 @@ module QA element :save_name_visibility_settings_button end - view 'app/views/shared/_visibility_radios.html.haml' do - element :internal_radio, 'qa_selector: "#{visibility_level_label(level).downcase}_radio"' # rubocop:disable QA/ElementWithPattern, Lint/InterpolationCheck - end - view 'app/views/groups/settings/_lfs.html.haml' do element :lfs_checkbox end @@ -56,47 +53,43 @@ module QA find_element(:group_name_field).set name end - def set_group_visibility(visibility) - find_element("#{visibility.downcase}_radio").click - end - def click_save_name_visibility_settings_button click_element(:save_name_visibility_settings_button) end def set_lfs_enabled expand_content(:permission_lfs_2fa_content) - check_element(:lfs_checkbox) + check_element(:lfs_checkbox, true) click_element(:save_permissions_changes_button) end def set_lfs_disabled expand_content(:permission_lfs_2fa_content) - uncheck_element(:lfs_checkbox) + uncheck_element(:lfs_checkbox, true) click_element(:save_permissions_changes_button) end def set_request_access_enabled expand_content(:permission_lfs_2fa_content) - check_element(:request_access_checkbox) + check_element(:request_access_checkbox, true) click_element(:save_permissions_changes_button) end def set_request_access_disabled expand_content(:permission_lfs_2fa_content) - uncheck_element(:request_access_checkbox) + uncheck_element(:request_access_checkbox, true) click_element(:save_permissions_changes_button) end def set_require_2fa_enabled expand_content(:permission_lfs_2fa_content) - check_element(:require_2fa_checkbox) + check_element(:require_2fa_checkbox, true) click_element(:save_permissions_changes_button) end def set_require_2fa_disabled expand_content(:permission_lfs_2fa_content) - uncheck_element(:require_2fa_checkbox) + uncheck_element(:require_2fa_checkbox, true) click_element(:save_permissions_changes_button) end @@ -109,10 +102,10 @@ module QA def toggle_request_access expand_content(:permission_lfs_2fa_content) - if find_element(:request_access_checkbox).checked? - uncheck_element(:request_access_checkbox) + if find_element(:request_access_checkbox, visible: false).checked? + uncheck_element(:request_access_checkbox, true) else - check_element(:request_access_checkbox) + check_element(:request_access_checkbox, true) end click_element(:save_permissions_changes_button) @@ -136,4 +129,4 @@ module QA end end -QA::Page::Group::Settings::General.prepend_if_ee('QA::EE::Page::Group::Settings::General') +QA::Page::Group::Settings::General.prepend_mod_with('Page::Group::Settings::General', namespace: QA) diff --git a/qa/qa/page/group/settings/package_registries.rb b/qa/qa/page/group/settings/package_registries.rb index ee5ca849a47..8a2802b0035 100644 --- a/qa/qa/page/group/settings/package_registries.rb +++ b/qa/qa/page/group/settings/package_registries.rb @@ -11,7 +11,7 @@ module QA element :package_registry_settings_content end - view 'app/assets/javascripts/packages_and_registries/settings/group/components/maven_settings.vue' do + view 'app/assets/javascripts/packages_and_registries/settings/group/components/group_settings_app.vue' do element :allow_duplicates_toggle element :allow_duplicates_label end diff --git a/qa/qa/page/main/login.rb b/qa/qa/page/main/login.rb index 048119d65cb..3b3057a9acb 100644 --- a/qa/qa/page/main/login.rb +++ b/qa/qa/page/main/login.rb @@ -52,13 +52,17 @@ module QA using_wait_time 0 do set_initial_password_if_present - raise 'If an LDAP user is provided, it must be used for sign-in', QA::Resource::User::InvalidUserError if Runtime::User.ldap_user? && user && user.username != Runtime::User.ldap_username + if Runtime::User.ldap_user? && user && user.username != Runtime::User.ldap_username + raise 'If an LDAP user is provided, it must be used for sign-in', QA::Resource::User::InvalidUserError + end if Runtime::User.ldap_user? sign_in_using_ldap_credentials(user: user || Runtime::User) else sign_in_using_gitlab_credentials(user: user || Runtime::User, skip_page_validation: skip_page_validation) end + + set_up_new_password_if_required(user: user, skip_page_validation: skip_page_validation) end end @@ -70,7 +74,6 @@ module QA using_wait_time 0 do set_initial_password_if_present - sign_in_using_gitlab_credentials(user: admin) end @@ -168,6 +171,20 @@ module QA Page::Main::Menu.validate_elements_present! unless skip_page_validation end + # Handle request for password change + # Happens on clean GDK installations when seeded root admin password is expired + # + def set_up_new_password_if_required(user:, skip_page_validation:) + return unless has_content?('Set up new password') + + Profile::Password.perform do |new_password_page| + password = user&.password || Runtime::User.password + new_password_page.set_new_password(password, password) + end + + sign_in_using_credentials(user: user, skip_page_validation: skip_page_validation) + end + def set_initial_password_if_present return unless has_content?('Change your password') diff --git a/qa/qa/page/main/menu.rb b/qa/qa/page/main/menu.rb index f0df901a8f0..f796f4c9475 100644 --- a/qa/qa/page/main/menu.rb +++ b/qa/qa/page/main/menu.rb @@ -35,17 +35,24 @@ module QA element :your_projects_link end + view 'app/views/layouts/nav/groups_dropdown/_show.html.haml' do + element :create_group_link + element :import_group_link + end + view 'app/views/layouts/_search.html.haml' do element :search_term_field end def go_to_groups - within_top_menu do - click_element :groups_dropdown + within_groups_menu do + click_element :your_groups_link end + end - page.within('.qa-groups-dropdown-sidebar') do - click_element :your_groups_link + def go_to_import_group + within_groups_menu do + click_element :import_group_link end end @@ -125,6 +132,12 @@ module QA end end + def click_user_profile_link + within_user_menu do + click_element(:user_profile_link) + end + end + def search_for(term) fill_element :search_term_field, "#{term}\n" end @@ -167,6 +180,14 @@ module QA end end + def within_groups_menu(&block) + within_top_menu do + click_element :groups_dropdown + end + + page.within('.qa-groups-dropdown-sidebar', &block) + end + def click_admin_area within_top_menu { click_element :admin_area_link } end @@ -175,4 +196,4 @@ module QA end end -QA::Page::Main::Menu.prepend_if_ee('QA::EE::Page::Main::Menu') +QA::Page::Main::Menu.prepend_mod_with('Page::Main::Menu', namespace: QA) diff --git a/qa/qa/page/merge_request/new.rb b/qa/qa/page/merge_request/new.rb index 46b7bbeed84..71e51ddd504 100644 --- a/qa/qa/page/merge_request/new.rb +++ b/qa/qa/page/merge_request/new.rb @@ -41,4 +41,4 @@ module QA end end -QA::Page::MergeRequest::New.prepend_if_ee('QA::EE::Page::MergeRequest::New') +QA::Page::MergeRequest::New.prepend_mod_with('Page::MergeRequest::New', namespace: QA) diff --git a/qa/qa/page/merge_request/show.rb b/qa/qa/page/merge_request/show.rb index e1790deb3ec..5f52d48e9f6 100644 --- a/qa/qa/page/merge_request/show.rb +++ b/qa/qa/page/merge_request/show.rb @@ -7,50 +7,16 @@ module QA include Page::Component::Note include Page::Component::Issuable::Sidebar - view 'app/assets/javascripts/vue_merge_request_widget/components/mr_widget_header.vue' do - element :download_dropdown - element :download_email_patches_menu_item - element :download_plain_diff_menu_item - element :open_in_web_ide_button - end - - view 'app/assets/javascripts/vue_merge_request_widget/components/mr_widget_pipeline.vue' do - element :merge_request_pipeline_info_content - element :pipeline_link - end - - view 'app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue' do - element :merge_button - element :fast_forward_message_content - element :merge_moment_dropdown - element :merge_immediately_menu_item - end - - view 'app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_auto_merge_enabled.vue' do - element :merge_request_status_content - end - - view 'app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_merged.vue' do - element :merged_status_content - end - - view 'app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_failed_to_merge.vue' do - element :merge_request_error_content - end - - view 'app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_rebase.vue' do - element :mr_rebase_button - element :no_fast_forward_message_content + view 'app/assets/javascripts/batch_comments/components/preview_dropdown.vue' do + element :review_preview_dropdown end - view 'app/assets/javascripts/vue_merge_request_widget/components/states/squash_before_merge.vue' do - element :squash_checkbox + view 'app/assets/javascripts/batch_comments/components/publish_button.vue' do + element :submit_review_button end - view 'app/views/projects/merge_requests/show.html.haml' do - element :notes_tab - element :commits_tab - element :diffs_tab + view 'app/assets/javascripts/batch_comments/components/review_bar.vue' do + element :review_bar_content end view 'app/assets/javascripts/diffs/components/compare_dropdown_layout.vue' do @@ -70,33 +36,60 @@ module QA view 'app/assets/javascripts/diffs/components/diff_row.vue' do element :diff_comment_button + element :new_diff_line_link end - view 'app/assets/javascripts/diffs/components/inline_diff_table_row.vue' do - element :new_diff_line_link + view 'app/assets/javascripts/notes/components/note_form.vue' do + element :start_review_button + element :comment_now_button end - view 'app/views/projects/merge_requests/_mr_title.html.haml' do - element :edit_button + view 'app/assets/javascripts/vue_merge_request_widget/components/mr_widget_header.vue' do + element :download_dropdown + element :download_email_patches_menu_item + element :download_plain_diff_menu_item + element :open_in_web_ide_button end - view 'app/assets/javascripts/batch_comments/components/publish_button.vue' do - element :submit_review_button + view 'app/assets/javascripts/vue_merge_request_widget/components/mr_widget_pipeline.vue' do + element :merge_request_pipeline_info_content + element :pipeline_link end - view 'app/assets/javascripts/batch_comments/components/review_bar.vue' do - element :review_bar_content + view 'app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_failed_to_merge.vue' do + element :merge_request_error_content end - view 'app/assets/javascripts/notes/components/note_form.vue' do - element :unresolve_review_discussion_checkbox - element :resolve_review_discussion_checkbox - element :start_review_button - element :comment_now_button + view 'app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_merged.vue' do + element :cherry_pick_button + element :merged_status_content + element :revert_button end - view 'app/assets/javascripts/batch_comments/components/preview_dropdown.vue' do - element :review_preview_toggle + view 'app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_rebase.vue' do + element :mr_rebase_button + element :no_fast_forward_message_content + end + + view 'app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue' do + element :merge_button + element :fast_forward_message_content + element :merge_moment_dropdown + element :merge_immediately_menu_item + end + + view 'app/assets/javascripts/vue_merge_request_widget/components/states/squash_before_merge.vue' do + element :squash_checkbox + end + + view 'app/assets/javascripts/vue_shared/components/markdown/apply_suggestion.vue' do + element :apply_suggestion_dropdown + element :commit_message_field + element :commit_with_custom_message_button + end + + view 'app/assets/javascripts/vue_shared/components/markdown/header.vue' do + element :suggestion_button end view 'app/assets/javascripts/vue_shared/components/markdown/suggestion_diff_header.vue' do @@ -104,19 +97,26 @@ module QA element :add_suggestion_batch_button end - view 'app/assets/javascripts/vue_shared/components/markdown/header.vue' do - element :suggestion_button + view 'app/views/projects/merge_requests/_description.html.haml' do + element :description_content end - view 'app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_merged.vue' do - element :revert_button - element :cherry_pick_button + view 'app/views/projects/merge_requests/_mr_box.html.haml' do + element :title_content end - view 'app/assets/javascripts/vue_shared/components/markdown/apply_suggestion.vue' do - element :apply_suggestion_button - element :commit_message_textbox - element :commit_with_custom_message_button + view 'app/views/projects/merge_requests/_mr_title.html.haml' do + element :edit_button + end + + view 'app/views/projects/merge_requests/show.html.haml' do + element :notes_tab + element :commits_tab + element :diffs_tab + end + + view 'app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_auto_merge_enabled.vue' do + element :cancel_auto_merge_button end def start_review @@ -131,21 +131,13 @@ module QA click_element(:target_version_dropdown) end - def comment_now - click_element(:comment_now_button) - - # After clicking the button, wait for it to disappear - # before moving on to the next part of the test - has_no_element?(:comment_now_button) - end - def version_dropdown_content find_element(:dropdown_content).text end def submit_pending_reviews within_element(:review_bar_content) do - click_element(:review_preview_toggle) + click_element(:review_preview_dropdown) click_element(:submit_review_button) # After clicking the button, wait for it to disappear @@ -154,22 +146,6 @@ module QA end end - def discard_pending_reviews - within_element(:review_bar_content) do - click_element(:discard_review) - end - click_element(:modal_delete_pending_comments) - end - - def resolve_review_discussion - scroll_to_element(:start_review_button) - check_element(:resolve_review_discussion_checkbox) - end - - def unresolve_review_discussion - check_element(:unresolve_review_discussion_checkbox) - end - def add_comment_to_diff(text) wait_until(sleep_interval: 5) do has_css?('a[data-linenumber="1"]') @@ -230,11 +206,11 @@ module QA end def has_title?(title) - has_element?(:title, text: title) + has_element?(:title_content, text: title) end def has_description?(description) - has_element?(:description, text: description) + has_element?(:description_content, text: description) end def mark_to_squash @@ -253,11 +229,6 @@ module QA raise "Merge did not appear to be successful" unless merged? end - def merge_immediately! - click_element(:merge_moment_dropdown) - click_element(:merge_immediately_menu_item) - end - def merge_when_pipeline_succeeds! wait_until_ready_to_merge @@ -281,10 +252,6 @@ module QA has_element?(:merge_button, disabled: false) end - def merge_request_status - find_element(:merge_request_status_content).text - end - # Waits up 60 seconds and raises an error if unable to merge def wait_until_ready_to_merge has_element?(:merge_button) @@ -363,8 +330,8 @@ module QA end def apply_suggestion_with_message(message) - click_element(:apply_suggestion_button) - fill_element(:commit_message_textbox, message) + click_element(:apply_suggestion_dropdown) + fill_element(:commit_message_field, message) click_element(:commit_with_custom_message_button) end @@ -385,9 +352,13 @@ module QA click_element(:revert_button, Page::Component::CommitModal) click_element(:submit_commit_button) end + + def cancel_auto_merge! + click_element(:cancel_auto_merge_button) + end end end end end -QA::Page::MergeRequest::Show.prepend_if_ee('QA::EE::Page::MergeRequest::Show') +QA::Page::MergeRequest::Show.prepend_mod_with('Page::MergeRequest::Show', namespace: QA) diff --git a/qa/qa/page/milestone/show.rb b/qa/qa/page/milestone/show.rb index 42efbd4ea30..0ab966534a3 100644 --- a/qa/qa/page/milestone/show.rb +++ b/qa/qa/page/milestone/show.rb @@ -30,4 +30,4 @@ module QA end end -QA::Page::Milestone::Show.prepend_if_ee('QA::EE::Page::Milestone::Show') +QA::Page::Milestone::Show.prepend_mod_with('Page::Milestone::Show', namespace: QA) diff --git a/qa/qa/page/profile/menu.rb b/qa/qa/page/profile/menu.rb index 41c350f94ef..a12db2918dc 100644 --- a/qa/qa/page/profile/menu.rb +++ b/qa/qa/page/profile/menu.rb @@ -56,4 +56,4 @@ module QA end end -QA::Page::Profile::Menu.prepend_if_ee('QA::EE::Page::Profile::Menu') +QA::Page::Profile::Menu.prepend_mod_with('Page::Profile::Menu', namespace: QA) diff --git a/qa/qa/page/profile/password.rb b/qa/qa/page/profile/password.rb index ce062f39edb..ee042450f8d 100644 --- a/qa/qa/page/profile/password.rb +++ b/qa/qa/page/profile/password.rb @@ -11,12 +11,26 @@ module QA element :save_password_button end + view 'app/views/profiles/passwords/new.html.haml' do + element :current_password_field + element :new_password_field + element :confirm_password_field + element :set_new_password_button + end + def update_password(new_password, current_password) find_element(:current_password_field).set current_password find_element(:new_password_field).set new_password find_element(:confirm_password_field).set new_password click_element(:save_password_button) end + + def set_new_password(new_password, current_password) + fill_element :current_password_field, current_password + fill_element :new_password_field, new_password + fill_element :confirm_password_field, new_password + click_element :set_new_password_button + end end end end diff --git a/qa/qa/page/project/artifact/show.rb b/qa/qa/page/project/artifact/show.rb new file mode 100644 index 00000000000..437363d4a98 --- /dev/null +++ b/qa/qa/page/project/artifact/show.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module QA + module Page + module Project + module Artifact + class Show < QA::Page::Base + view 'app/views/projects/artifacts/_tree_directory.html.haml' do + element :directory_name_link + end + + def go_to_directory(name) + click_element(:directory_name_link, directory_name: name) + end + end + end + end + end +end diff --git a/qa/qa/page/project/commit/show.rb b/qa/qa/page/project/commit/show.rb index f732eb6565e..bc44a4e5e72 100644 --- a/qa/qa/page/project/commit/show.rb +++ b/qa/qa/page/project/commit/show.rb @@ -11,11 +11,18 @@ module QA view 'app/assets/javascripts/projects/commit/components/commit_options_dropdown.vue' do element :options_button + element :revert_button element :cherry_pick_button element :email_patches element :plain_diff end + def revert_commit + click_element(:options_button) + click_element(:revert_button, Page::Component::CommitModal) + click_element(:submit_commit_button) + end + def cherry_pick_commit click_element(:options_button) click_element(:cherry_pick_button, Page::Component::CommitModal) diff --git a/qa/qa/page/project/issue/index.rb b/qa/qa/page/project/issue/index.rb index 10ddd52719a..fc46f7a2936 100644 --- a/qa/qa/page/project/issue/index.rb +++ b/qa/qa/page/project/issue/index.rb @@ -85,4 +85,4 @@ module QA end end -QA::Page::Project::Issue::Index.prepend_if_ee('QA::EE::Page::Project::Issue::Index') +QA::Page::Project::Issue::Index.prepend_mod_with('Page::Project::Issue::Index', namespace: QA) diff --git a/qa/qa/page/project/issue/show.rb b/qa/qa/page/project/issue/show.rb index db2f5f9b3dc..7a5a153db86 100644 --- a/qa/qa/page/project/issue/show.rb +++ b/qa/qa/page/project/issue/show.rb @@ -70,4 +70,4 @@ module QA end end -QA::Page::Project::Issue::Show.prepend_if_ee('QA::EE::Page::Project::Issue::Show') +QA::Page::Project::Issue::Show.prepend_mod_with('Page::Project::Issue::Show', namespace: QA) diff --git a/qa/qa/page/project/job/show.rb b/qa/qa/page/project/job/show.rb index 8c70d0874c4..78b6bebe02e 100644 --- a/qa/qa/page/project/job/show.rb +++ b/qa/qa/page/project/job/show.rb @@ -75,4 +75,4 @@ module QA end end -QA::Page::Project::Job::Show.prepend_if_ee('QA::EE::Page::Project::Job::Show') +QA::Page::Project::Job::Show.prepend_mod_with('Page::Project::Job::Show', namespace: QA) diff --git a/qa/qa/page/project/menu.rb b/qa/qa/page/project/menu.rb index cb7323ac62d..ffabaf30374 100644 --- a/qa/qa/page/project/menu.rb +++ b/qa/qa/page/project/menu.rb @@ -13,29 +13,15 @@ module QA include SubMenus::Settings include SubMenus::Packages - view 'app/views/layouts/nav/sidebar/_project_menus.html.haml' do - element :merge_requests_link - element :snippets_link - element :members_link - end - - view 'app/views/layouts/nav/sidebar/_wiki_link.html.haml' do - element :wiki_link - end - - view 'app/views/shared/nav/_sidebar_menu_item.html.haml' do - element :sidebar_menu_item_link - end - def click_merge_requests within_sidebar do - click_element(:merge_requests_link) + click_element(:sidebar_menu_link, menu_item: 'Merge requests') end end def click_wiki within_sidebar do - click_element(:wiki_link) + click_element(:sidebar_menu_link, menu_item: 'Wiki') end end @@ -47,13 +33,13 @@ module QA def click_snippets within_sidebar do - click_element(:snippets_link) + click_element(:sidebar_menu_link, menu_item: 'Snippets') end end def click_members within_sidebar do - click_element(:members_link) + click_element(:sidebar_menu_link, menu_item: 'Members') end end end @@ -61,4 +47,4 @@ module QA end end -QA::Page::Project::Menu.prepend_if_ee('QA::EE::Page::Project::Menu') +QA::Page::Project::Menu.prepend_mod_with('Page::Project::Menu', namespace: QA) diff --git a/qa/qa/page/project/new.rb b/qa/qa/page/project/new.rb index d1033dbfca9..b14afa90442 100644 --- a/qa/qa/page/project/new.rb +++ b/qa/qa/page/project/new.rb @@ -4,13 +4,9 @@ module QA module Page module Project class New < Page::Base - include Page::Component::Select2 include Page::Component::Project::Templates - - view 'app/views/projects/new.html.haml' do - element :project_create_from_template_tab - element :import_project_tab, "Import project" # rubocop:disable QA/ElementWithPattern - end + include Page::Component::Select2 + include Page::Component::VisibilitySetting view 'app/views/projects/_new_project_fields.html.haml' do element :initialize_with_readme_checkbox @@ -28,6 +24,19 @@ module QA element :template_option_row end + view 'app/assets/javascripts/vue_shared/new_namespace/components/welcome.vue' do + element :blank_project_link, ':data-qa-selector="`${panel.name}_link`"' # rubocop:disable QA/ElementWithPattern + element :create_from_template_link, ':data-qa-selector="`${panel.name}_link`"' # rubocop:disable QA/ElementWithPattern + end + + def click_blank_project_link + click_element :blank_project_link + end + + def click_create_from_template_link + click_element :create_from_template_link + end + def choose_test_namespace choose_namespace(Runtime::Namespace.path) end @@ -75,4 +84,4 @@ module QA end end -QA::Page::Project::New.prepend_if_ee('QA::EE::Page::Project::New') +QA::Page::Project::New.prepend_mod_with('Page::Project::New', namespace: QA) diff --git a/qa/qa/page/project/new_experiment.rb b/qa/qa/page/project/new_experiment.rb deleted file mode 100644 index 813f7f6cefe..00000000000 --- a/qa/qa/page/project/new_experiment.rb +++ /dev/null @@ -1,26 +0,0 @@ -# frozen_string_literal: true - -module QA - module Page - module Project - class NewExperiment < Page::Base - view 'app/assets/javascripts/projects/experiment_new_project_creation/components/welcome.vue' do - element :blank_project_link, ':data-qa-selector="`${panel.name}_link`"' # rubocop:disable QA/ElementWithPattern - element :create_from_template_link, ':data-qa-selector="`${panel.name}_link`"' # rubocop:disable QA/ElementWithPattern - end - - def shown? - has_element? :blank_project_link - end - - def click_blank_project_link - click_element :blank_project_link - end - - def click_create_from_template_link - click_element :create_from_template_link - end - end - end - end -end diff --git a/qa/qa/page/project/operations/metrics/show.rb b/qa/qa/page/project/operations/metrics/show.rb index 6e8a52ab2e6..22a7f1eed8f 100644 --- a/qa/qa/page/project/operations/metrics/show.rb +++ b/qa/qa/page/project/operations/metrics/show.rb @@ -134,4 +134,4 @@ module QA end end -QA::Page::Project::Operations::Metrics::Show.prepend_if_ee('QA::EE::Page::Project::Operations::Metrics::Show') +QA::Page::Project::Operations::Metrics::Show.prepend_mod_with('Page::Project::Operations::Metrics::Show', namespace: QA) diff --git a/qa/qa/page/project/packages/index.rb b/qa/qa/page/project/packages/index.rb index 396d3373b8a..7794677b9b5 100644 --- a/qa/qa/page/project/packages/index.rb +++ b/qa/qa/page/project/packages/index.rb @@ -27,4 +27,4 @@ module QA end end -QA::Page::Project::Packages::Index.prepend_if_ee('QA::EE::Page::Project::Packages::Index') +QA::Page::Project::Packages::Index.prepend_mod_with('Page::Project::Packages::Index', namespace: QA) diff --git a/qa/qa/page/project/pipeline/index.rb b/qa/qa/page/project/pipeline/index.rb index 3cb466abce9..f7c5d149593 100644 --- a/qa/qa/page/project/pipeline/index.rb +++ b/qa/qa/page/project/pipeline/index.rb @@ -67,4 +67,4 @@ module QA end end -QA::Page::Project::Pipeline::Index.prepend_if_ee('QA::EE::Page::Project::Pipeline::Index') +QA::Page::Project::Pipeline::Index.prepend_mod_with('Page::Project::Pipeline::Index', namespace: QA) diff --git a/qa/qa/page/project/pipeline/show.rb b/qa/qa/page/project/pipeline/show.rb index c5887b84be6..d45eeac46f6 100644 --- a/qa/qa/page/project/pipeline/show.rb +++ b/qa/qa/page/project/pipeline/show.rb @@ -117,4 +117,4 @@ module QA end end -QA::Page::Project::Pipeline::Show.prepend_if_ee('QA::EE::Page::Project::Pipeline::Show') +QA::Page::Project::Pipeline::Show.prepend_mod_with('Page::Project::Pipeline::Show', namespace: QA) diff --git a/qa/qa/page/project/settings/ci_cd.rb b/qa/qa/page/project/settings/ci_cd.rb index 7224fdae10e..c537db34a51 100644 --- a/qa/qa/page/project/settings/ci_cd.rb +++ b/qa/qa/page/project/settings/ci_cd.rb @@ -43,4 +43,4 @@ module QA end end -QA::Page::Project::Settings::CICD.prepend_if_ee("QA::EE::Page::Project::Settings::CICD") +QA::Page::Project::Settings::CICD.prepend_mod_with("Page::Project::Settings::CICD", namespace: QA) diff --git a/qa/qa/page/project/settings/deploy_keys.rb b/qa/qa/page/project/settings/deploy_keys.rb index 8d655b0684e..467799a14fb 100644 --- a/qa/qa/page/project/settings/deploy_keys.rb +++ b/qa/qa/page/project/settings/deploy_keys.rb @@ -6,59 +6,64 @@ module QA module Settings class DeployKeys < Page::Base view 'app/views/shared/deploy_keys/_form.html.haml' do - element :deploy_key_title, 'text_field :title' # rubocop:disable QA/ElementWithPattern - element :deploy_key_key, 'text_area :key' # rubocop:disable QA/ElementWithPattern + element :deploy_key_title_field + element :deploy_key_field + end + + view 'app/views/shared/deploy_keys/_project_group_form.html.haml' do + element :deploy_key_title_field + element :deploy_key_field + element :add_deploy_key_button end view 'app/assets/javascripts/deploy_keys/components/app.vue' do - element :deploy_keys_section, /class=".*deploy\-keys.*"/ # rubocop:disable QA/ElementWithPattern - element :project_deploy_keys + element :project_deploy_keys_container end view 'app/assets/javascripts/deploy_keys/components/key.vue' do - element :key - element :key_title - element :key_md5_fingerprint + element :key_container + element :key_title_content + element :key_md5_fingerprint_content end def add_key - click_on 'Add key' + click_element(:add_deploy_key_button) end def fill_key_title(title) - fill_in 'deploy_key_title', with: title + fill_element(:deploy_key_title_field, title) end def fill_key_value(key) - fill_in 'deploy_key_key', with: key + fill_element(:deploy_key_field, key) end def find_md5_fingerprint(title) within_project_deploy_keys do - find_element(:key, text: title) - .find(element_selector_css(:key_md5_fingerprint)).text.delete_prefix('MD5:') + find_element(:key_container, text: title) + .find(element_selector_css(:key_md5_fingerprint_content)).text.delete_prefix('MD5:') end end def has_key?(title, md5_fingerprint) within_project_deploy_keys do - find_element(:key, text: title) - .has_css?(element_selector_css(:key_md5_fingerprint), text: "MD5:#{md5_fingerprint}") + find_element(:key_container, text: title) + .has_css?(element_selector_css(:key_md5_fingerprint_content), text: "MD5:#{md5_fingerprint}") end end def key_title within_project_deploy_keys do - find_element(:key_title).text + find_element(:key_title_content).text end end private def within_project_deploy_keys - has_element?(:project_deploy_keys, wait: QA::Support::Repeater::DEFAULT_MAX_WAIT_TIME) + has_element?(:project_deploy_keys_container, wait: QA::Support::Repeater::DEFAULT_MAX_WAIT_TIME) - within_element(:project_deploy_keys) do + within_element(:project_deploy_keys_container) do yield end end diff --git a/qa/qa/page/project/settings/deploy_tokens.rb b/qa/qa/page/project/settings/deploy_tokens.rb index 3c3ed4f8716..b26cae86d8b 100644 --- a/qa/qa/page/project/settings/deploy_tokens.rb +++ b/qa/qa/page/project/settings/deploy_tokens.rb @@ -6,54 +6,54 @@ module QA module Settings class DeployTokens < Page::Base view 'app/views/shared/deploy_tokens/_form.html.haml' do - element :deploy_token_name - element :deploy_token_expires_at - element :deploy_token_read_repository - element :deploy_token_read_registry - element :create_deploy_token + element :deploy_token_name_field + element :deploy_token_expires_at_field + element :deploy_token_read_repository_checkbox + element :deploy_token_read_registry_checkbox + element :create_deploy_token_button end view 'app/views/shared/deploy_tokens/_new_deploy_token.html.haml' do - element :created_deploy_token_section - element :deploy_token_user - element :deploy_token + element :created_deploy_token_container + element :deploy_token_user_field + element :deploy_token_field end def fill_token_name(name) - fill_element :deploy_token_name, name + fill_element(:deploy_token_name_field, name) end def fill_token_expires_at(expires_at) - fill_element :deploy_token_expires_at, expires_at.to_s + "\n" + fill_element(:deploy_token_expires_at_field, expires_at.to_s + "\n") end def fill_scopes(read_repository:, read_registry:) - check_element :deploy_token_read_repository if read_repository - check_element :deploy_token_read_registry if read_registry + check_element(:deploy_token_read_repository_checkbox) if read_repository + check_element(:deploy_token_read_registry_checkbox) if read_registry end def add_token - click_element :create_deploy_token + click_element(:create_deploy_token_button) end def token_username within_new_project_deploy_token do - find_element(:deploy_token_user).value + find_element(:deploy_token_user_field).value end end def token_password within_new_project_deploy_token do - find_element(:deploy_token).value + find_element(:deploy_token_field).value end end private def within_new_project_deploy_token - has_element?(:created_deploy_token_section, wait: QA::Support::Repeater::DEFAULT_MAX_WAIT_TIME) + has_element?(:created_deploy_token_container, wait: QA::Support::Repeater::DEFAULT_MAX_WAIT_TIME) - within_element(:created_deploy_token_section) do + within_element(:created_deploy_token_container) do yield end end diff --git a/qa/qa/page/project/settings/integrations.rb b/qa/qa/page/project/settings/integrations.rb index 6f5c50eac52..420dcb63918 100644 --- a/qa/qa/page/project/settings/integrations.rb +++ b/qa/qa/page/project/settings/integrations.rb @@ -23,4 +23,4 @@ module QA end end -QA::Page::Project::Settings::Integrations.prepend_if_ee('QA::EE::Page::Project::Settings::Integrations') +QA::Page::Project::Settings::Integrations.prepend_mod_with('Page::Project::Settings::Integrations', namespace: QA) diff --git a/qa/qa/page/project/settings/main.rb b/qa/qa/page/project/settings/main.rb index 48af635bb79..5efcb7bf23c 100644 --- a/qa/qa/page/project/settings/main.rb +++ b/qa/qa/page/project/settings/main.rb @@ -57,4 +57,4 @@ module QA end end -QA::Page::Project::Settings::Main.prepend_if_ee("QA::EE::Page::Project::Settings::Main") +QA::Page::Project::Settings::Main.prepend_mod_with("Page::Project::Settings::Main", namespace: QA) diff --git a/qa/qa/page/project/settings/merge_request.rb b/qa/qa/page/project/settings/merge_request.rb index 0b4a12dbb2e..dbe804bfdd0 100644 --- a/qa/qa/page/project/settings/merge_request.rb +++ b/qa/qa/page/project/settings/merge_request.rb @@ -12,7 +12,7 @@ module QA end view 'app/views/projects/_merge_request_merge_method_settings.html.haml' do - element :merge_ff_radio_button + element :merge_ff_radio end view 'app/views/projects/_merge_request_merge_checks_settings.html.haml' do @@ -24,7 +24,7 @@ module QA end def enable_ff_only - click_element(:merge_ff_radio_button) + choose_element(:merge_ff_radio) click_save_changes end @@ -38,4 +38,4 @@ module QA end end -QA::Page::Project::Settings::MergeRequest.prepend_if_ee("QA::EE::Page::Project::Settings::MergeRequest") +QA::Page::Project::Settings::MergeRequest.prepend_mod_with("Page::Project::Settings::MergeRequest", namespace: QA) diff --git a/qa/qa/page/project/settings/mirroring_repositories.rb b/qa/qa/page/project/settings/mirroring_repositories.rb index ce369c90a9f..5e7b68858c8 100644 --- a/qa/qa/page/project/settings/mirroring_repositories.rb +++ b/qa/qa/page/project/settings/mirroring_repositories.rb @@ -129,4 +129,4 @@ module QA end end -QA::Page::Project::Settings::MirroringRepositories.prepend_if_ee('QA::EE::Page::Project::Settings::MirroringRepositories') +QA::Page::Project::Settings::MirroringRepositories.prepend_mod_with('Page::Project::Settings::MirroringRepositories', namespace: QA) diff --git a/qa/qa/page/project/settings/protected_branches.rb b/qa/qa/page/project/settings/protected_branches.rb index 6616921f34c..308cf6366a7 100644 --- a/qa/qa/page/project/settings/protected_branches.rb +++ b/qa/qa/page/project/settings/protected_branches.rb @@ -69,4 +69,4 @@ module QA end end -QA::Page::Project::Settings::ProtectedBranches.prepend_if_ee('QA::EE::Page::Project::Settings::ProtectedBranches') +QA::Page::Project::Settings::ProtectedBranches.prepend_mod_with('Page::Project::Settings::ProtectedBranches', namespace: QA) diff --git a/qa/qa/page/project/settings/protected_tags.rb b/qa/qa/page/project/settings/protected_tags.rb index bf8f349cfd5..d9f383154f9 100644 --- a/qa/qa/page/project/settings/protected_tags.rb +++ b/qa/qa/page/project/settings/protected_tags.rb @@ -43,4 +43,4 @@ module QA end end -QA::Page::Project::Settings::ProtectedTags.prepend_if_ee('QA::EE::Page::Project::Settings::ProtectedTags') +QA::Page::Project::Settings::ProtectedTags.prepend_mod_with('Page::Project::Settings::ProtectedTags', namespace: QA) diff --git a/qa/qa/page/project/settings/repository.rb b/qa/qa/page/project/settings/repository.rb index 407c131fa73..a02b3d6a7d6 100644 --- a/qa/qa/page/project/settings/repository.rb +++ b/qa/qa/page/project/settings/repository.rb @@ -62,4 +62,4 @@ module QA end end -QA::Page::Project::Settings::Repository.prepend_if_ee('QA::EE::Page::Project::Settings::Repository') +QA::Page::Project::Settings::Repository.prepend_mod_with('Page::Project::Settings::Repository', namespace: QA) diff --git a/qa/qa/page/project/show.rb b/qa/qa/page/project/show.rb index d8c6b3881bd..c174d4b0c3f 100644 --- a/qa/qa/page/project/show.rb +++ b/qa/qa/page/project/show.rb @@ -147,7 +147,7 @@ module QA end def open_web_ide! - click_element :web_ide_button + click_element(:web_ide_button) end def has_edit_fork_button? @@ -180,4 +180,4 @@ module QA end end -QA::Page::Project::Show.prepend_if_ee('QA::EE::Page::Project::Show') +QA::Page::Project::Show.prepend_mod_with('Page::Project::Show', namespace: QA) diff --git a/qa/qa/page/project/snippet/index.rb b/qa/qa/page/project/snippet/index.rb index a221abc4196..fc677f96769 100644 --- a/qa/qa/page/project/snippet/index.rb +++ b/qa/qa/page/project/snippet/index.rb @@ -26,4 +26,4 @@ module QA end end -QA::Page::Project::Snippet::Index.prepend_if_ee('QA::EE::Page::Project::Snippet::Index') +QA::Page::Project::Snippet::Index.prepend_mod_with('Page::Project::Snippet::Index', namespace: QA) diff --git a/qa/qa/page/project/sub_menus/ci_cd.rb b/qa/qa/page/project/sub_menus/ci_cd.rb index 398712c04d2..7cb2fd6c655 100644 --- a/qa/qa/page/project/sub_menus/ci_cd.rb +++ b/qa/qa/page/project/sub_menus/ci_cd.rb @@ -12,16 +12,12 @@ module QA base.class_eval do include QA::Page::Project::SubMenus::Common - - view 'app/views/layouts/nav/sidebar/_project_menus.html.haml' do - element :link_pipelines - end end end def click_ci_cd_pipelines within_sidebar do - click_element :link_pipelines + click_element(:sidebar_menu_link, menu_item: 'CI/CD') end end end diff --git a/qa/qa/page/project/sub_menus/common.rb b/qa/qa/page/project/sub_menus/common.rb index 85bf932be4a..c20710bc393 100644 --- a/qa/qa/page/project/sub_menus/common.rb +++ b/qa/qa/page/project/sub_menus/common.rb @@ -8,6 +8,20 @@ module QA extend QA::Page::PageConcern include QA::Page::SubMenus::Common + def self.included(base) + super + + base.class_eval do + view 'app/views/shared/nav/_sidebar_menu_item.html.haml' do + element :sidebar_menu_item_link + end + + view 'app/views/shared/nav/_sidebar_menu.html.haml' do + element :sidebar_menu_link + end + end + end + private def sidebar_element diff --git a/qa/qa/page/project/sub_menus/issues.rb b/qa/qa/page/project/sub_menus/issues.rb index 384af3fb53e..1df93d1118b 100644 --- a/qa/qa/page/project/sub_menus/issues.rb +++ b/qa/qa/page/project/sub_menus/issues.rb @@ -12,32 +12,25 @@ module QA base.class_eval do include QA::Page::Project::SubMenus::Common - - view 'app/views/layouts/nav/sidebar/_project_menus.html.haml' do - element :issue_boards_link - element :issues_item - element :labels_link - element :milestones_link - end end end def click_issues within_sidebar do - click_link('Issues') + click_element(:sidebar_menu_link, menu_item: 'Issues') end end def click_milestones within_sidebar do - click_element :milestones_link + click_element(:sidebar_menu_item_link, menu_item: 'Milestones') end end def go_to_boards hover_issues do within_submenu do - click_element(:issue_boards_link) + click_element(:sidebar_menu_item_link, menu_item: 'Boards') end end end @@ -45,7 +38,7 @@ module QA def go_to_labels hover_issues do within_submenu do - click_element(:labels_link) + click_element(:sidebar_menu_item_link, menu_item: 'Labels') end end end @@ -53,7 +46,7 @@ module QA def go_to_milestones hover_issues do within_submenu do - click_element(:milestones_link) + click_element(:sidebar_menu_item_link, menu_item: 'Milestones') end end end @@ -62,8 +55,8 @@ module QA def hover_issues within_sidebar do - scroll_to_element(:issues_item) - find_element(:issues_item).hover + scroll_to_element(:sidebar_menu_link, menu_item: 'Issues') + find_element(:sidebar_menu_link, menu_item: 'Issues').hover yield end diff --git a/qa/qa/page/project/sub_menus/operations.rb b/qa/qa/page/project/sub_menus/operations.rb index af716d1af0d..077da697a63 100644 --- a/qa/qa/page/project/sub_menus/operations.rb +++ b/qa/qa/page/project/sub_menus/operations.rb @@ -12,20 +12,13 @@ module QA base.class_eval do include QA::Page::Project::SubMenus::Common - - view 'app/views/layouts/nav/sidebar/_project_menus.html.haml' do - element :operations_link - element :operations_environments_link - element :operations_metrics_link - element :operations_incidents_link - end end end def go_to_operations_environments hover_operations do within_submenu do - click_element(:operations_environments_link) + click_element(:sidebar_menu_item_link, menu_item: 'Environments') end end end @@ -33,7 +26,7 @@ module QA def go_to_operations_metrics hover_operations do within_submenu do - click_element(:operations_metrics_link) + click_element(:sidebar_menu_item_link, menu_item: 'Metrics') end end end @@ -49,7 +42,7 @@ module QA def go_to_operations_incidents hover_operations do within_submenu do - click_element(:operations_incidents_link) + click_element(:sidebar_menu_item_link, menu_item: 'Incidents') end end end @@ -58,8 +51,8 @@ module QA def hover_operations within_sidebar do - scroll_to_element(:operations_link) - find_element(:operations_link).hover + scroll_to_element(:sidebar_menu_link, menu_item: 'Operations') + find_element(:sidebar_menu_link, menu_item: 'Operations').hover yield end diff --git a/qa/qa/page/project/sub_menus/packages.rb b/qa/qa/page/project/sub_menus/packages.rb index 46eae01e10d..88e2101a86d 100644 --- a/qa/qa/page/project/sub_menus/packages.rb +++ b/qa/qa/page/project/sub_menus/packages.rb @@ -7,19 +7,11 @@ module QA module Packages extend QA::Page::PageConcern - def self.included(base) - super - - base.class_eval do - view 'app/views/layouts/nav/sidebar/_project_packages_link.html.haml' do - element :packages_link - end - end - end - def click_packages_link - within_sidebar do - click_element :packages_link + hover_registry do + within_submenu do + click_element(:sidebar_menu_item_link, menu_item: 'Package Registry') + end end end @@ -35,8 +27,8 @@ module QA def hover_registry within_sidebar do - scroll_to_element(:packages_link) - find_element(:packages_link).hover + scroll_to_element(:sidebar_menu_link, menu_item: 'Packages & Registries') + find_element(:sidebar_menu_link, menu_item: 'Packages & Registries').hover yield end diff --git a/qa/qa/page/project/sub_menus/project.rb b/qa/qa/page/project/sub_menus/project.rb index ecb3148b486..5499a0f71e3 100644 --- a/qa/qa/page/project/sub_menus/project.rb +++ b/qa/qa/page/project/sub_menus/project.rb @@ -12,10 +12,6 @@ module QA base.class_eval do include QA::Page::Project::SubMenus::Common - - view 'app/views/shared/nav/_sidebar_menu.html.haml' do - element :sidebar_menu_link - end end end diff --git a/qa/qa/page/project/sub_menus/repository.rb b/qa/qa/page/project/sub_menus/repository.rb index 458f0cddab6..e35828ecd6a 100644 --- a/qa/qa/page/project/sub_menus/repository.rb +++ b/qa/qa/page/project/sub_menus/repository.rb @@ -12,14 +12,6 @@ module QA base.class_eval do include QA::Page::Project::SubMenus::Common - - view 'app/views/shared/nav/_sidebar_menu_item.html.haml' do - element :sidebar_menu_item_link - end - - view 'app/views/shared/nav/_sidebar_menu.html.haml' do - element :sidebar_menu_link - end end end diff --git a/qa/qa/page/project/sub_menus/settings.rb b/qa/qa/page/project/sub_menus/settings.rb index 531c4686345..80f62c8efde 100644 --- a/qa/qa/page/project/sub_menus/settings.rb +++ b/qa/qa/page/project/sub_menus/settings.rb @@ -12,21 +12,13 @@ module QA base.class_eval do include QA::Page::Project::SubMenus::Common - - view 'app/views/layouts/nav/sidebar/_project_menus.html.haml' do - element :settings_item - element :general_settings_link - element :integrations_settings_link - element :operations_settings_link - element :access_tokens_settings_link - end end end def go_to_ci_cd_settings hover_settings do within_submenu do - click_link('CI/CD') + click_element(:sidebar_menu_item_link, menu_item: 'CI/CD') end end end @@ -34,7 +26,7 @@ module QA def go_to_repository_settings hover_settings do within_submenu do - click_link('Repository') + click_element(:sidebar_menu_item_link, menu_item: 'Repository') end end end @@ -42,21 +34,21 @@ module QA def go_to_general_settings hover_settings do within_submenu do - click_element :general_settings_link + click_element(:sidebar_menu_item_link, menu_item: 'General') end end end def click_settings within_sidebar do - click_on 'Settings' + click_element(:sidebar_menu_link, menu_item: 'Settings') end end def go_to_integrations_settings hover_settings do within_submenu do - click_element :integrations_settings_link + click_element(:sidebar_menu_item_link, menu_item: 'Integrations') end end end @@ -64,7 +56,7 @@ module QA def go_to_operations_settings hover_settings do within_submenu do - click_element :operations_settings_link + click_element(:sidebar_menu_item_link, menu_item: 'Operations') end end end @@ -72,7 +64,7 @@ module QA def go_to_access_token_settings hover_settings do within_submenu do - click_element :access_tokens_settings_link + click_element(:sidebar_menu_item_link, menu_item: 'Access Tokens') end end end @@ -81,8 +73,8 @@ module QA def hover_settings within_sidebar do - scroll_to_element(:settings_item) - find_element(:settings_item).hover + scroll_to_element(:sidebar_menu_link, menu_item: 'Settings') + find_element(:sidebar_menu_link, menu_item: 'Settings').hover yield end diff --git a/qa/qa/page/project/web_ide/edit.rb b/qa/qa/page/project/web_ide/edit.rb index fd68ac0de16..78b2db7d723 100644 --- a/qa/qa/page/project/web_ide/edit.rb +++ b/qa/qa/page/project/web_ide/edit.rb @@ -18,8 +18,8 @@ module QA end view 'app/assets/javascripts/ide/components/ide_tree.vue' do - element :new_file_button - element :new_directory_button + element :new_file_button, required: true + element :new_directory_button, required: true end view 'app/assets/javascripts/ide/components/ide_tree_list.vue' do @@ -36,7 +36,7 @@ module QA end view 'app/assets/javascripts/ide/components/commit_sidebar/actions.vue' do - element :commit_to_current_branch_radio + element :commit_to_current_branch_radio_container end view 'app/assets/javascripts/ide/components/commit_sidebar/form.vue' do @@ -44,6 +44,10 @@ module QA element :commit_button end + view 'app/assets/javascripts/ide/components/commit_sidebar/radio_group.vue' do + element :commit_type_radio + end + view 'app/assets/javascripts/ide/components/repo_editor.vue' do element :editor_container end @@ -216,7 +220,9 @@ module QA # animation is still in process even when the buttons have the # expected visibility. commit_success = retry_until(sleep_interval: 5) do - click_element(:commit_to_current_branch_radio) if has_element?(:commit_to_current_branch_radio) + within_element(:commit_to_current_branch_radio_container) do + choose_element(:commit_type_radio) + end click_element(:commit_button) if has_element?(:commit_button) # If this is the first commit, the commit SHA only appears after reloading @@ -299,10 +305,30 @@ module QA def switch_to_commit_tab click_element(:commit_mode_tab) end + + def select_file(file_name) + # wait for the list of files to load + wait_until(reload: true) do + has_element?(:file_name_content, file_name: file_name) + end + click_element(:file_name_content, file_name: file_name) + end + + def link_line(line_number) + previous_url = page.current_url + wait_for_animated_element(:editor_container) + within_element(:editor_container) do + find('.line-numbers', text: line_number).hover.click + end + wait_until(max_duration: 5, reload: false) do + page.current_url != previous_url + end + page.current_url.to_s + end end end end end end -QA::Page::Project::WebIDE::Edit.prepend_if_ee('QA::EE::Page::Component::WebIDE::WebTerminalPanel') +QA::Page::Project::WebIDE::Edit.prepend_mod_with('Page::Component::WebIDE::WebTerminalPanel', namespace: QA) diff --git a/qa/qa/page/project/wiki/show.rb b/qa/qa/page/project/wiki/show.rb index f3573e3cdd3..ac42405563a 100644 --- a/qa/qa/page/project/wiki/show.rb +++ b/qa/qa/page/project/wiki/show.rb @@ -14,4 +14,4 @@ module QA end end -QA::Page::Project::Wiki::Show.prepend_if_ee('QA::EE::Page::Project::Wiki::Show') +QA::Page::Project::Wiki::Show.prepend_mod_with('Page::Project::Wiki::Show', namespace: QA) diff --git a/qa/qa/page/registration/welcome.rb b/qa/qa/page/registration/welcome.rb index 394e94b6414..ff22e62b63e 100644 --- a/qa/qa/page/registration/welcome.rb +++ b/qa/qa/page/registration/welcome.rb @@ -21,4 +21,4 @@ module QA end end -QA::Page::Registration::Welcome.prepend_if_ee('QA::EE::Page::Registration::Welcome') +QA::Page::Registration::Welcome.prepend_mod_with('Page::Registration::Welcome', namespace: QA) diff --git a/qa/qa/page/trials/new.rb b/qa/qa/page/trials/new.rb new file mode 100644 index 00000000000..268f3b71717 --- /dev/null +++ b/qa/qa/page/trials/new.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +module QA + module Page + module Trials + class New < Chemlab::Page + path '/-/trials/new' + + # TODO: Supplant with data-qa-selectors + text_field :first_name, id: 'first_name' + text_field :last_name, id: 'last_name' + text_field :company_name, id: 'company_name' + select :number_of_employees, id: 'company_size' + text_field :telephone_number, id: 'phone_number' + text_field :number_of_users, id: 'number_of_users' + + select :country, id: 'country_select' + + button :continue, value: 'Continue' + end + end + end +end diff --git a/qa/qa/page/trials/select.rb b/qa/qa/page/trials/select.rb new file mode 100644 index 00000000000..3da0fb46322 --- /dev/null +++ b/qa/qa/page/trials/select.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +module QA + module Page + module Trials + class Select < Chemlab::Page + path '/-/trials/select' + + # TODO: Supplant with data-qa-selectors + select :subscription_for, id: 'namespace_id' + text_field :new_group_name, id: 'new_group_name' + button :start_your_free_trial, value: 'Start your free trial' + radio :trial_company, id: 'trial_entity_company' + radio :trial_individual, id: 'trial_entity_individual' + end + end + end +end diff --git a/qa/qa/page/user/show.rb b/qa/qa/page/user/show.rb new file mode 100644 index 00000000000..ad2de331ad9 --- /dev/null +++ b/qa/qa/page/user/show.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +module QA + module Page + module User + class Show < Page::Base + view 'app/views/users/show.html.haml' do + element :follow_user_link + element :following_link + end + + view 'app/views/shared/users/_user.html.haml' do + element :user_link + end + + view 'app/views/users/_overview.html.haml' do + element :user_activity_content + end + + def click_follow_user_link + click_element(:follow_user_link) + end + + def click_following_link + click_element(:following_link) + end + + def click_user_link(username) + click_element(:user_link, username: username) + end + + def has_activity?(activity) + within_element(:user_activity_content) do + has_text?(activity) + end + end + end + end + end +end |