summaryrefslogtreecommitdiff
path: root/qa/qa/specs/features/api/1_manage/bulk_import_project_spec.rb
diff options
context:
space:
mode:
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.rb71
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