diff options
Diffstat (limited to 'qa/qa/page/project')
-rw-r--r-- | qa/qa/page/project/fork/new.rb | 8 | ||||
-rw-r--r-- | qa/qa/page/project/import/github.rb | 30 | ||||
-rw-r--r-- | qa/qa/page/project/import/repo_by_url.rb | 60 | ||||
-rw-r--r-- | qa/qa/page/project/infrastructure/kubernetes/show.rb | 43 | ||||
-rw-r--r-- | qa/qa/page/project/new.rb | 15 | ||||
-rw-r--r-- | qa/qa/page/project/pipeline_editor/show.rb | 45 | ||||
-rw-r--r-- | qa/qa/page/project/settings/advanced.rb | 2 | ||||
-rw-r--r-- | qa/qa/page/project/settings/default_branch.rb | 29 | ||||
-rw-r--r-- | qa/qa/page/project/settings/deploy_tokens.rb | 4 | ||||
-rw-r--r-- | qa/qa/page/project/settings/mirroring_repositories.rb | 11 | ||||
-rw-r--r-- | qa/qa/page/project/settings/repository.rb | 8 | ||||
-rw-r--r-- | qa/qa/page/project/sub_menus/ci_cd.rb | 18 | ||||
-rw-r--r-- | qa/qa/page/project/sub_menus/project.rb | 6 |
13 files changed, 204 insertions, 75 deletions
diff --git a/qa/qa/page/project/fork/new.rb b/qa/qa/page/project/fork/new.rb index 5a08f6a3cbd..7062702679a 100644 --- a/qa/qa/page/project/fork/new.rb +++ b/qa/qa/page/project/fork/new.rb @@ -9,10 +9,6 @@ module QA element :fork_namespace_button end - view 'app/assets/javascripts/pages/projects/forks/new/components/fork_groups_list.vue' do - element :fork_groups_list_search_field - end - view 'app/assets/javascripts/pages/projects/forks/new/components/fork_form.vue' do element :fork_namespace_dropdown element :fork_project_button @@ -27,8 +23,8 @@ module QA end end - def search_for_group(group_name) - find_element(:fork_groups_list_search_field).set(group_name) + def fork_namespace_dropdown_values + find_element(:fork_namespace_dropdown).all(:option).map { |option| option.text.tr("\n", '').strip } end end end diff --git a/qa/qa/page/project/import/github.rb b/qa/qa/page/project/import/github.rb index dc683f7314b..74bc4cec467 100644 --- a/qa/qa/page/project/import/github.rb +++ b/qa/qa/page/project/import/github.rb @@ -14,13 +14,16 @@ module QA view 'app/assets/javascripts/import_entities/import_projects/components/provider_repo_table_row.vue' do element :project_import_row - element :project_namespace_select element :project_path_field element :import_button element :project_path_content element :go_to_project_button end + view "app/assets/javascripts/import_entities/components/group_dropdown.vue" do + element :target_namespace_selector_dropdown + end + def add_personal_access_token(personal_access_token) # If for some reasons this process is retried, user cannot re-enter github token in the same group # In this case skip this step and proceed to import project row @@ -37,9 +40,18 @@ module QA choose_test_namespace(full_path) set_path(full_path, name) import_project(full_path) + wait_for_success end + # TODO: refactor to use 'go to project' button instead of generic main menu + def go_to_project(name) + Page::Main::Menu.perform(&:go_to_projects) + Page::Dashboard::Projects.perform do |dashboard| + dashboard.go_to_project(name) + end + end + private def within_repo_path(full_path, &block) @@ -50,10 +62,9 @@ module QA def choose_test_namespace(full_path) within_repo_path(full_path) do - click_element :project_namespace_select + within_element(:target_namespace_selector_dropdown) { click_button(class: 'dropdown-toggle') } + click_element(:target_group_dropdown_item, group_name: Runtime::Namespace.path) end - - search_and_select(Runtime::Namespace.path) end def set_path(full_path, name) @@ -77,14 +88,9 @@ module QA reload: true, skip_finished_loading_check_on_refresh: true ) do - page.has_no_content?('Importing 1 repository') - end - end - - def go_to_project(name) - Page::Main::Menu.perform(&:go_to_projects) - Page::Dashboard::Projects.perform do |dashboard| - dashboard.go_to_project(name) + # TODO: Refactor to explicitly wait for specific project import successful status + # This check can create false positive if main importing message appears with delay and check exits early + page.has_no_content?('Importing 1 repository', wait: 3) end end diff --git a/qa/qa/page/project/import/repo_by_url.rb b/qa/qa/page/project/import/repo_by_url.rb new file mode 100644 index 00000000000..0e7524a181a --- /dev/null +++ b/qa/qa/page/project/import/repo_by_url.rb @@ -0,0 +1,60 @@ +# frozen_string_literal: true + +module QA + module Page + module Project + module Import + class RepoByURL < Page::Base + include Page::Component::Select2 + + view 'app/views/projects/_new_project_fields.html.haml' do + element :select_namespace_dropdown + end + + def import!(gitlab_repo_path, name) + fill_git_repository_url_link(gitlab_repo_path) + fill_project_name(name) + choose_test_namespace + click_create_button + + wait_for_success + + go_to_project(name) + end + + private + + def fill_git_repository_url_link(gitlab_repo_path) + fill_in 'project_import_url', with: gitlab_repo_path + end + + def fill_project_name(name) + fill_in 'project_name', with: name + end + + def choose_test_namespace + find('.js-select-namespace').click + search_and_select(Runtime::Namespace.path) + end + + def click_create_button + find('.btn-confirm').click + end + + def wait_for_success + wait_until(max_duration: 60, sleep_interval: 5.0, reload: true, skip_finished_loading_check_on_refresh: true) do + page.has_no_content?('Import in progress', wait: 3.0) + end + end + + def go_to_project(name) + Page::Main::Menu.perform(&:go_to_projects) + Page::Dashboard::Projects.perform do |dashboard| + dashboard.go_to_project(name) + end + end + end + end + end + end +end diff --git a/qa/qa/page/project/infrastructure/kubernetes/show.rb b/qa/qa/page/project/infrastructure/kubernetes/show.rb index e3b4f8fe4d9..62a04a53a2f 100644 --- a/qa/qa/page/project/infrastructure/kubernetes/show.rb +++ b/qa/qa/page/project/infrastructure/kubernetes/show.rb @@ -6,10 +6,6 @@ module QA module Infrastructure module Kubernetes class Show < Page::Base - view 'app/assets/javascripts/clusters/components/applications.vue' do - element :ingress_ip_address, 'id="ingress-endpoint"' # rubocop:disable QA/ElementWithPattern - end - view 'app/assets/javascripts/clusters/forms/components/integration_form.vue' do element :integration_status_toggle, required: true element :base_domain_field, required: true @@ -20,15 +16,6 @@ module QA element :details, required: true end - view 'app/views/clusters/clusters/_applications_tab.html.haml' do - element :applications, required: true - end - - view 'app/assets/javascripts/clusters/components/application_row.vue' do - element :install_button - element :uninstall_button - end - view 'app/views/clusters/clusters/_health.html.haml' do element :cluster_health_section end @@ -42,36 +29,6 @@ module QA click_element :details end - def open_applications - has_element?(:applications, wait: 30) - click_element :applications - end - - def install!(application_name) - within_element(application_name) do - has_element?(:install_button, application: application_name, wait: 30) - click_element :install_button - end - end - - def await_installed(application_name) - within_element(application_name) do - has_element?(:uninstall_button, application: application_name, wait: 300, skip_finished_loading_check: true) - end - end - - def has_application_installed?(application_name) - within_element(application_name) do - has_element?(:uninstall_button, application: application_name, wait: 300) - end - end - - def ingress_ip - # We need to wait longer since it can take some time before the - # ip address is assigned for the ingress controller - page.find('#ingress-endpoint', wait: 1200).value - end - def set_domain(domain) fill_element :base_domain_field, domain end diff --git a/qa/qa/page/project/new.rb b/qa/qa/page/project/new.rb index b14afa90442..170cc14b27f 100644 --- a/qa/qa/page/project/new.rb +++ b/qa/qa/page/project/new.rb @@ -8,6 +8,10 @@ module QA include Page::Component::Select2 include Page::Component::VisibilitySetting + include Layout::Flash + include Page::Component::Import::Selection + include Page::Component::Import::Gitlab + view 'app/views/projects/_new_project_fields.html.haml' do element :initialize_with_readme_checkbox element :project_namespace_select @@ -25,16 +29,15 @@ module QA 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 + element :panel_link end def click_blank_project_link - click_element :blank_project_link + click_element(:panel_link, panel_name: 'blank_project') end def click_create_from_template_link - click_element :create_from_template_link + click_element(:panel_link, panel_name: 'create_from_template') end def choose_test_namespace @@ -76,6 +79,10 @@ module QA click_link 'GitHub' end + def click_repo_by_url_link + click_button 'Repo by URL' + end + def enable_initialize_with_readme check_element(:initialize_with_readme_checkbox) end diff --git a/qa/qa/page/project/pipeline_editor/show.rb b/qa/qa/page/project/pipeline_editor/show.rb new file mode 100644 index 00000000000..38c87c8daa1 --- /dev/null +++ b/qa/qa/page/project/pipeline_editor/show.rb @@ -0,0 +1,45 @@ +# frozen_string_literal: true + +module QA + module Page + module Project + module PipelineEditor + class Show < QA::Page::Base + view 'app/assets/javascripts/pipeline_editor/components/file_nav/branch_switcher.vue' do + element :branch_selector_button + element :menu_branch_button + end + + view 'app/assets/javascripts/pipeline_editor/components/commit/commit_form.vue' do + element :target_branch_field + end + + def has_branch_selector_button? + has_element? :branch_selector_button + end + + def click_branch_selector_button + wait_until(reload: false) do + has_element?(:branch_selector_button) + end + click_element(:branch_selector_button, skip_finished_loading_check: true) + end + + def select_branch_from_dropdown(branch_to_switch_to) + wait_until(reload: false) do + has_element?(:menu_branch_button) + end + click_element(:menu_branch_button, text: branch_to_switch_to, skip_finished_loading_check: true) + end + + def target_branch_name + wait_until(reload: false) do + has_element?(:target_branch_field) + end + find_element(:target_branch_field, skip_finished_loading_check: true).value + end + end + end + end + end +end diff --git a/qa/qa/page/project/settings/advanced.rb b/qa/qa/page/project/settings/advanced.rb index 9c4b3a3c1c3..0ba856e8a6e 100644 --- a/qa/qa/page/project/settings/advanced.rb +++ b/qa/qa/page/project/settings/advanced.rb @@ -51,7 +51,7 @@ module QA # Workaround for a failure to search when there are no spaces around the / # https://gitlab.com/gitlab-org/gitlab/-/issues/218965 - search_and_select(namespace.gsub(/([^\s])\/([^\s])/, '\1 / \2')) + search_and_select(namespace.gsub(%r{([^\s])/([^\s])}, '\1 / \2')) click_element(:transfer_button) fill_confirmation_text(project_name) diff --git a/qa/qa/page/project/settings/default_branch.rb b/qa/qa/page/project/settings/default_branch.rb new file mode 100644 index 00000000000..cc28b37b88f --- /dev/null +++ b/qa/qa/page/project/settings/default_branch.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +module QA + module Page + module Project + module Settings + class DefaultBranch < Page::Base + include Page::Component::Select2 + + view 'app/views/projects/default_branch/_show.html.haml' do + element :save_changes_button + element :default_branch_dropdown + end + + def set_default_branch(branch) + find('.select2-chosen').click + search_and_select(branch) + end + + def click_save_changes_button + find('.btn-confirm').click + end + end + end + end + end +end + +QA::Page::Project::Settings::DefaultBranch.prepend_mod_with('Page::Project::Settings::DefaultBranch', namespace: QA) diff --git a/qa/qa/page/project/settings/deploy_tokens.rb b/qa/qa/page/project/settings/deploy_tokens.rb index b26cae86d8b..db1f6f68ec6 100644 --- a/qa/qa/page/project/settings/deploy_tokens.rb +++ b/qa/qa/page/project/settings/deploy_tokens.rb @@ -9,6 +9,7 @@ module QA element :deploy_token_name_field element :deploy_token_expires_at_field element :deploy_token_read_repository_checkbox + element :deploy_token_read_package_registry_checkbox element :deploy_token_read_registry_checkbox element :create_deploy_token_button end @@ -27,8 +28,9 @@ module QA fill_element(:deploy_token_expires_at_field, expires_at.to_s + "\n") end - def fill_scopes(read_repository:, read_registry:) + def fill_scopes(read_repository: false, read_registry: false, read_package_registry: false) check_element(:deploy_token_read_repository_checkbox) if read_repository + check_element(:deploy_token_read_package_registry_checkbox) if read_package_registry check_element(:deploy_token_read_registry_checkbox) if read_registry end diff --git a/qa/qa/page/project/settings/mirroring_repositories.rb b/qa/qa/page/project/settings/mirroring_repositories.rb index 5e7b68858c8..582079157f2 100644 --- a/qa/qa/page/project/settings/mirroring_repositories.rb +++ b/qa/qa/page/project/settings/mirroring_repositories.rb @@ -48,7 +48,7 @@ module QA end def mirror_direction=(value) - raise ArgumentError, "Mirror direction must be 'Push' or 'Pull'" unless %w(Push Pull).include? value + raise ArgumentError, "Mirror direction must be 'Push' or 'Pull'" unless %w[Push Pull].include?(value) select_element(:mirror_direction, value) @@ -59,7 +59,9 @@ module QA end def authentication_method=(value) - raise ArgumentError, "Authentication method must be 'SSH public key', 'Password', or 'None'" unless %w(Password None SSH\ public\ key).include? value + unless %w[Password None SSH\ public\ key].include?(value) + raise ArgumentError, "Authentication method must be 'SSH public key', 'Password', or 'None'" + end select_element(:authentication_method, value) end @@ -129,4 +131,7 @@ module QA end end -QA::Page::Project::Settings::MirroringRepositories.prepend_mod_with('Page::Project::Settings::MirroringRepositories', namespace: QA) +QA::Page::Project::Settings::MirroringRepositories.prepend_mod_with( # rubocop:disable Cop/InjectEnterpriseEditionModule + 'Page::Project::Settings::MirroringRepositories', + namespace: QA +) diff --git a/qa/qa/page/project/settings/repository.rb b/qa/qa/page/project/settings/repository.rb index a02b3d6a7d6..de5b4f37076 100644 --- a/qa/qa/page/project/settings/repository.rb +++ b/qa/qa/page/project/settings/repository.rb @@ -56,6 +56,14 @@ module QA ProtectedTags.perform(&block) end end + + def expand_default_branch(&block) + within('#default-branch-settings') do + find('.btn-default').click do + DefaultBranch.perform(&block) + end + end + end end end end diff --git a/qa/qa/page/project/sub_menus/ci_cd.rb b/qa/qa/page/project/sub_menus/ci_cd.rb index 7cb2fd6c655..c8c90df2c1f 100644 --- a/qa/qa/page/project/sub_menus/ci_cd.rb +++ b/qa/qa/page/project/sub_menus/ci_cd.rb @@ -20,6 +20,24 @@ module QA click_element(:sidebar_menu_link, menu_item: 'CI/CD') end end + + def go_to_pipeline_editor + hover_ci_cd_pipelines do + within_submenu do + click_element(:sidebar_menu_item_link, menu_item: 'Editor') + end + end + end + + private + + def hover_ci_cd_pipelines + within_sidebar do + find_element(:sidebar_menu_link, menu_item: 'CI/CD').hover + + yield + end + end end end end diff --git a/qa/qa/page/project/sub_menus/project.rb b/qa/qa/page/project/sub_menus/project.rb index cd08715bcd8..89d4ed578ed 100644 --- a/qa/qa/page/project/sub_menus/project.rb +++ b/qa/qa/page/project/sub_menus/project.rb @@ -12,17 +12,13 @@ module QA base.class_eval do include QA::Page::Project::SubMenus::Common - - view 'app/views/shared/nav/_scope_menu_body.html.haml' do - element :project_scope_link - end end end def click_project retry_on_exception do within_sidebar do - click_element(:project_scope_link) + click_element(:sidebar_menu_link, menu_item: 'Project scope') end end end |