diff options
Diffstat (limited to 'qa/qa/specs/features/api/1_manage/bulk_import_project_spec.rb')
-rw-r--r-- | qa/qa/specs/features/api/1_manage/bulk_import_project_spec.rb | 71 |
1 files changed, 63 insertions, 8 deletions
diff --git a/qa/qa/specs/features/api/1_manage/bulk_import_project_spec.rb b/qa/qa/specs/features/api/1_manage/bulk_import_project_spec.rb index 9935908d55e..14c94e99446 100644 --- a/qa/qa/specs/features/api/1_manage/bulk_import_project_spec.rb +++ b/qa/qa/specs/features/api/1_manage/bulk_import_project_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true module QA - RSpec.describe 'Manage', :requires_admin do + # run only base UI validation on staging because test requires top level group creation which is problematic + # on staging environment + RSpec.describe 'Manage', :requires_admin, except: { subdomain: :staging } do describe 'Bulk project import' do - let!(:staging?) { Runtime::Scenario.gitlab_address.include?('staging.gitlab.com') } - let(:import_wait_duration) { { max_duration: 300, sleep_interval: 2 } } let(:admin_api_client) { Runtime::API::Client.as_admin } let(:user) do @@ -33,6 +33,7 @@ module QA Resource::Project.fabricate_via_api! do |project| project.api_client = api_client project.group = source_group + project.initialize_with_readme = true end end @@ -44,33 +45,87 @@ module QA end end + let(:imported_projects) do + imported_group.reload!.projects + end + + let(:project_import_failures) do + imported_group.import_details + .find { |entity| entity[:destination_name] == source_project.name } + &.fetch(:failures) + end + before do Runtime::Feature.enable(:bulk_import_projects) - Runtime::Feature.enable(:top_level_group_creation_enabled) if staging? sandbox.add_member(user, Resource::Members::AccessLevel::MAINTAINER) - source_project # fabricate source group and project + source_project.tap { |project| project.add_push_rules(member_check: true) } # fabricate source group and project end after do user.remove_via_api! ensure Runtime::Feature.disable(:bulk_import_projects) - Runtime::Feature.disable(:top_level_group_creation_enabled) if staging? end context 'with project' do + before do + imported_group # trigger import + end + it( 'successfully imports project', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/2297' ) do expect { imported_group.import_status }.to eventually_eq('finished').within(import_wait_duration) + expect(imported_projects.count).to eq(1), "Expected to have 1 imported project" - imported_projects = imported_group.reload!.projects aggregate_failures do - expect(imported_projects.count).to eq(1) expect(imported_projects.first).to eq(source_project) + expect(project_import_failures).to be_empty, "Expected no errors, was: #{project_import_failures}" + end + end + end + + context 'with project issues' do + let(:source_issue) do + Resource::Issue.fabricate_via_api! do |issue| + issue.api_client = api_client + issue.project = source_project + issue.labels = %w[label_one label_two] + end + end + + let(:imported_issues) do + imported_projects.first.issues + end + + let(:imported_issue) do + issue = imported_issues.first + Resource::Issue.init do |resource| + resource.api_client = api_client + resource.project = imported_projects.first + resource.iid = issue[:iid] + end + end + + before do + source_issue # fabricate source group, project, issue + imported_group # trigger import + end + + it( + 'successfully imports issue', + testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/2325' + ) do + expect { imported_group.import_status }.to eventually_eq('finished').within(import_wait_duration) + expect(imported_projects.count).to eq(1), "Expected to have 1 imported project" + + aggregate_failures do + expect(imported_issues.count).to eq(1) + expect(imported_issue.reload!).to eq(source_issue) + expect(project_import_failures).to be_empty, "Expected no errors, was: #{project_import_failures}" end end end |