diff --git a/app/views/import/gitlab_projects/new.html.haml b/app/views/import/gitlab_projects/new.html.haml index 8daddbb00424d1d565a7a24d34ee19dd7061128c..028268482cd222d3c52da86fe4b7f3d1e372752f 100644 --- a/app/views/import/gitlab_projects/new.html.haml +++ b/app/views/import/gitlab_projects/new.html.haml @@ -21,5 +21,5 @@ = file_field_tag :file, class: '' .row .form-actions.col-sm-12 - = submit_tag _('Import project'), class: 'gl-button btn btn-confirm' + = submit_tag _('Import project'), class: 'gl-button btn btn-confirm', data: { qa_selector: 'import_project_button' } = link_to _('Cancel'), new_project_path, class: 'gl-button btn btn-default btn-cancel' diff --git a/app/views/import/shared/_new_project_form.html.haml b/app/views/import/shared/_new_project_form.html.haml index 7de8b0ee10ff2c637da9a47240c2d974b8bba096..16526382f4215f4469f6eca0f73c4ab5fdb9e69e 100644 --- a/app/views/import/shared/_new_project_form.html.haml +++ b/app/views/import/shared/_new_project_form.html.haml @@ -1,7 +1,7 @@ .row .form-group.project-name.col-sm-12 = label_tag :name, _('Project name'), class: 'label-bold' - = text_field_tag :name, @name, placeholder: "My awesome project", class: "js-project-name form-control gl-form-input input-lg", autofocus: true, required: true, aria: { required: true } + = text_field_tag :name, @name, placeholder: "My awesome project", class: "js-project-name form-control gl-form-input input-lg", autofocus: true, required: true, aria: { required: true }, data: { qa_selector: 'project_name_field' } .form-group.col-12.col-sm-6 = label_tag :namespace_id, _('Project URL'), class: 'label-bold' .form-group @@ -18,4 +18,4 @@ = hidden_field_tag :namespace_id, current_user.namespace_id .form-group.col-12.col-sm-6.project-path = label_tag :path, _('Project slug'), class: 'label-bold' - = text_field_tag :path, @path, placeholder: "my-awesome-project", class: "js-path-name form-control gl-form-input", required: true, aria: { required: true } + = text_field_tag :path, @path, placeholder: "my-awesome-project", class: "js-path-name form-control gl-form-input", required: true, aria: { required: true }, data: { qa_selector: 'project_slug_field' } diff --git a/app/views/projects/_import_project_pane.html.haml b/app/views/projects/_import_project_pane.html.haml index e6ded3ad9127db66364bc7b4f2858358fcebf79f..2055f1c7f60b9106b63eed854c4e6d18a9a8ed62 100644 --- a/app/views/projects/_import_project_pane.html.haml +++ b/app/views/projects/_import_project_pane.html.haml @@ -7,7 +7,7 @@ = _("Import project from") .import-buttons - if gitlab_project_import_enabled? - .import_gitlab_project.has-tooltip{ data: { container: 'body' } } + .import_gitlab_project.has-tooltip{ data: { container: 'body', qa_selector: 'gitlab_import_button' } } = link_to new_import_gitlab_project_path, class: 'gl-button btn-default btn btn_import_gitlab_project', **tracking_attrs(track_label, 'click_button', 'gitlab_export') do .gl-button-icon = sprite_icon('tanuki') diff --git a/qa/qa.rb b/qa/qa.rb index aad40666065074de98937778e6c544a8d88c7674..2b4d5e6158cd6dbe6b9cc593809806dbb043ab0c 100644 --- a/qa/qa.rb +++ b/qa/qa.rb @@ -106,6 +106,7 @@ module Resource autoload :RegistryRepository, 'qa/resource/registry_repository' autoload :Package, 'qa/resource/package' autoload :PipelineSchedules, 'qa/resource/pipeline_schedules' + autoload :ImportProject, 'qa/resource/import_project' module KubernetesCluster autoload :Base, 'qa/resource/kubernetes_cluster/base' @@ -529,6 +530,11 @@ module Component autoload :CommitModal, 'qa/page/component/commit_modal' autoload :VisibilitySetting, 'qa/page/component/visibility_setting' + module Import + autoload :Gitlab, 'qa/page/component/import/gitlab' + autoload :Selection, 'qa/page/component/import/selection' + end + module Issuable autoload :Common, 'qa/page/component/issuable/common' autoload :Sidebar, 'qa/page/component/issuable/sidebar' diff --git a/qa/qa/fixtures/export.tar.gz b/qa/qa/fixtures/export.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..107037a956299598635469dedbcaaf74505fed0b Binary files /dev/null and b/qa/qa/fixtures/export.tar.gz differ diff --git a/qa/qa/page/component/import/gitlab.rb b/qa/qa/page/component/import/gitlab.rb new file mode 100644 index 0000000000000000000000000000000000000000..2fd2a45b399efbf32577e3df1eeca95ae94ff583 --- /dev/null +++ b/qa/qa/page/component/import/gitlab.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +module QA + module Page + module Component + module Import + module Gitlab + def self.included(base) + super + + base.view 'app/views/import/gitlab_projects/new.html.haml' do + element :import_project_button + end + + base.view 'app/views/import/shared/_new_project_form.html.haml' do + element :project_name_field + element :project_slug_field + end + end + + def set_imported_project_name(name) + fill_element(:project_name_field, name) + end + + def attach_exported_file(path) + page.attach_file("file", path, make_visible: { display: 'block' }) + end + + def click_import_gitlab_project + click_element(:import_project_button) + + wait_until(reload: false) do + has_notice?("The project was successfully imported.") + end + end + end + end + end + end +end diff --git a/qa/qa/page/component/import/selection.rb b/qa/qa/page/component/import/selection.rb new file mode 100644 index 0000000000000000000000000000000000000000..6cacdd84f138f1e6186259b075b12e2bf2d988d7 --- /dev/null +++ b/qa/qa/page/component/import/selection.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +module QA + module Page + module Component + module Import + module Selection + def self.included(base) + super + + base.view 'app/views/projects/_import_project_pane.html.haml' do + element :gitlab_import_button + end + end + + def click_gitlab + click_element(:gitlab_import_button) + end + end + end + end + end +end diff --git a/qa/qa/page/project/new.rb b/qa/qa/page/project/new.rb index 6e5da450def51bb3b7f7ffc266373420c5a211c5..d3c06119efca5cc27fae3e7645f297908c90dcc7 100644 --- a/qa/qa/page/project/new.rb +++ b/qa/qa/page/project/new.rb @@ -8,6 +8,10 @@ class New < Page::Base 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 diff --git a/qa/qa/resource/import_project.rb b/qa/qa/resource/import_project.rb new file mode 100644 index 0000000000000000000000000000000000000000..105d75285f1435dc09d305fd410991b7bd0a56ac --- /dev/null +++ b/qa/qa/resource/import_project.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +module QA + module Resource + class ImportProject < Resource::Project + attr_writer :file_path + + def initialize + @name = "ImportedProject-#{SecureRandom.hex(8)}" + @file_path = ::File.join('qa', 'fixtures', 'export.tar.gz') + end + + def fabricate! + self.import = true + super + + group.visit! + + Page::Group::Show.perform(&:go_to_new_project) + + Page::Project::New.perform do |new_project| + new_project.click_import_project + new_project.click_gitlab + new_project.set_imported_project_name(@name) + new_project.attach_exported_file(@file_path) + new_project.click_import_gitlab_project + end + end + + def fabricate_via_api! + raise NotImplementedError + end + end + end +end diff --git a/qa/qa/resource/merge_request.rb b/qa/qa/resource/merge_request.rb index 0bd29d03cb53856add63a43f5f7a54313d10989e..d9703eb889ed779e622b67803d445ca25fa5d574 100644 --- a/qa/qa/resource/merge_request.rb +++ b/qa/qa/resource/merge_request.rb @@ -70,6 +70,8 @@ def initialize end def fabricate! + return fabricate_large_merge_request if Runtime::Scenario.large_setup? + populate_target_and_source_if_required project.visit! @@ -90,6 +92,8 @@ def fabricate! end def fabricate_via_api! + return fabricate_large_merge_request if Runtime::Scenario.large_setup? + resource_web_url(api_get) rescue ResourceNotFoundError, NoValueError # rescue if iid not populated populate_target_and_source_if_required @@ -144,6 +148,15 @@ def merge_via_api! end end + def fabricate_large_merge_request + @project = Resource::ImportProject.fabricate_via_browser_ui! + # Setting the name here, since otherwise some tests will look for an existing file in + # the proejct without ever knowing what is in it. + @file_name = "LICENSE" + visit("#{project.web_url}/-/merge_requests/1") + current_url + end + # Get MR comments # # @return [Array] diff --git a/qa/qa/specs/features/browser_ui/3_create/merge_request/revert/reverting_merge_request_spec.rb b/qa/qa/specs/features/browser_ui/3_create/merge_request/revert/reverting_merge_request_spec.rb index 3574cdbe4acc7145a26f02ab7101c4ef2f66ada1..c05a3610b997049a721d304af478e4d3b148c626 100644 --- a/qa/qa/specs/features/browser_ui/3_create/merge_request/revert/reverting_merge_request_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/merge_request/revert/reverting_merge_request_spec.rb @@ -19,7 +19,7 @@ module QA Flow::Login.sign_in end - it 'can be reverted', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1745' do + it 'can be reverted', :can_use_large_setup, testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1745' do revertable_merge_request.visit! Page::MergeRequest::Show.perform do |merge_request| diff --git a/qa/qa/specs/runner.rb b/qa/qa/specs/runner.rb index ff690962db861066730d484637423db86884d759..bd9907611c7808c2f7605714c11f601b2ed58a87 100644 --- a/qa/qa/specs/runner.rb +++ b/qa/qa/specs/runner.rb @@ -65,6 +65,8 @@ def perform args.push(DEFAULT_TEST_PATH_ARGS) unless options.any? { |opt| opt =~ %r{/features/} } end + Runtime::Scenario.define(:large_setup?, args.flatten.include?('can_use_large_setup')) + if Runtime::Scenario.attributes[:parallel] ParallelRunner.run(args.flatten) elsif Runtime::Scenario.attributes[:loop]