diff options
Diffstat (limited to 'qa/qa/specs/features/api/1_manage')
3 files changed, 126 insertions, 14 deletions
diff --git a/qa/qa/specs/features/api/1_manage/bulk_import_group_spec.rb b/qa/qa/specs/features/api/1_manage/bulk_import_group_spec.rb index 1422dd5a029..8b4900957c5 100644 --- a/qa/qa/specs/features/api/1_manage/bulk_import_group_spec.rb +++ b/qa/qa/specs/features/api/1_manage/bulk_import_group_spec.rb @@ -89,7 +89,7 @@ module QA end end - context 'with milestones' do + context 'with milestones and badges' do let(:source_milestone) do Resource::GroupMilestone.fabricate_via_api! do |milestone| milestone.api_client = api_client @@ -99,10 +99,17 @@ module QA before do source_milestone + + Resource::GroupBadge.fabricate_via_api! do |badge| + badge.api_client = api_client + badge.group = source_group + badge.link_url = "http://example.com/badge" + badge.image_url = "http://shields.io/badge" + end end it( - 'successfully imports group milestones', + 'successfully imports group milestones and badges', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/2245' ) do expect { imported_group.import_status }.to eventually_eq('finished').within(import_wait_duration) @@ -113,8 +120,40 @@ module QA expect(imported_milestone.iid).to eq(source_milestone.iid) expect(imported_milestone.created_at).to eq(source_milestone.created_at) expect(imported_milestone.updated_at).to eq(source_milestone.updated_at) + + expect(imported_group.badges).to eq(source_group.badges) + end + end + end + + context 'with group members' do + let(:member) do + Resource::User.fabricate_via_api! do |usr| + usr.api_client = admin_api_client + usr.hard_delete_on_api_removal = true end end + + before do + member.set_public_email + source_group.add_member(member, Resource::Members::AccessLevel::DEVELOPER) + end + + after do + member.remove_via_api! + end + + it( + 'adds members for imported group', + testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/2310' + ) do + expect { imported_group.import_status }.to eventually_eq('finished').within(import_wait_duration) + + imported_member = imported_group.reload!.members.find { |usr| usr.username == member.username } + + expect(imported_member).not_to be_nil + expect(imported_member.access_level).to eq(Resource::Members::AccessLevel::DEVELOPER) + end end after do 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 new file mode 100644 index 00000000000..9935908d55e --- /dev/null +++ b/qa/qa/specs/features/api/1_manage/bulk_import_project_spec.rb @@ -0,0 +1,79 @@ +# frozen_string_literal: true + +module QA + RSpec.describe 'Manage', :requires_admin 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 + Resource::User.fabricate_via_api! do |usr| + usr.api_client = admin_api_client + usr.hard_delete_on_api_removal = true + end + end + + let(:api_client) { Runtime::API::Client.new(user: user) } + + let(:sandbox) do + Resource::Sandbox.fabricate_via_api! do |group| + group.api_client = admin_api_client + end + end + + let(:source_group) do + Resource::Sandbox.fabricate_via_api! do |group| + group.api_client = api_client + group.path = "source-group-for-import-#{SecureRandom.hex(4)}" + end + end + + let(:source_project) do + Resource::Project.fabricate_via_api! do |project| + project.api_client = api_client + project.group = source_group + end + end + + let(:imported_group) do + Resource::BulkImportGroup.fabricate_via_api! do |group| + group.api_client = api_client + group.sandbox = sandbox + group.source_group_path = source_group.path + end + 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 + 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 + 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) + + imported_projects = imported_group.reload!.projects + aggregate_failures do + expect(imported_projects.count).to eq(1) + expect(imported_projects.first).to eq(source_project) + end + end + end + end + end +end diff --git a/qa/qa/specs/features/api/1_manage/import_large_github_repo_spec.rb b/qa/qa/specs/features/api/1_manage/import_large_github_repo_spec.rb index b51a79f239c..3a2f960d812 100644 --- a/qa/qa/specs/features/api/1_manage/import_large_github_repo_spec.rb +++ b/qa/qa/specs/features/api/1_manage/import_large_github_repo_spec.rb @@ -9,11 +9,6 @@ module QA let(:differ) { RSpec::Support::Differ.new(color: true) } let(:api_client) { Runtime::API::Client.as_admin } - let(:group) do - Resource::Group.fabricate_via_api! do |resource| - resource.api_client = api_client - end - end let(:user) do Resource::User.fabricate_via_api! do |resource| @@ -86,19 +81,15 @@ module QA Resource::ProjectImportedFromGithub.fabricate_via_api! do |project| project.add_name_uuid = false project.name = 'imported-project' - project.group = group project.github_personal_access_token = Runtime::Env.github_access_token project.github_repository_path = github_repo + project.personal_namespace = user.username project.api_client = api_client end end - before do - group.add_member(user, Resource::Members::AccessLevel::MAINTAINER) - end - after do |example| - user.remove_via_api! + user.remove_via_api! unless example.exception next unless defined?(@import_time) # save data for comparison after run finished @@ -128,7 +119,10 @@ module QA ) end - it 'imports large Github repo via api', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1880' do + it( + 'imports large Github repo via api', + testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1880' + ) do start = Time.now Runtime::Logger.info("Importing project '#{imported_project.full_path}'") # import the project and log path |