diff options
Diffstat (limited to 'qa/qa/specs/features/api/1_manage')
8 files changed, 45 insertions, 159 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 158881ed94c..799a5f7eaf2 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 @@ -4,7 +4,7 @@ module QA # 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 group import' do + describe 'Gitlab migration' do let(:import_wait_duration) { { max_duration: 300, sleep_interval: 2 } } let(:admin_api_client) { Runtime::API::Client.as_admin } let(:user) do @@ -26,6 +26,7 @@ module QA Resource::Sandbox.fabricate_via_api! do |group| group.api_client = api_client group.path = "source-group-for-import-#{SecureRandom.hex(4)}" + group.avatar = File.new('qa/fixtures/designs/tanuki.jpg', 'r') end end @@ -37,11 +38,19 @@ module QA end end + let(:import_failures) do + imported_group.import_details.sum([]) { |details| details[:failures] } + end + before do sandbox.add_member(user, Resource::Members::AccessLevel::MAINTAINER) end - after do + after do |example| + # Checking for failures in the test currently makes test very flaky due to catching unrelated failures + # Just log in case of failure until cause of network errors is found + # See: https://gitlab.com/gitlab-org/gitlab/-/issues/346500 + Runtime::Logger.warn(import_failures) if example.exception && !import_failures.empty? user.remove_via_api! end @@ -73,11 +82,13 @@ module QA label.group = subgroup label.title = "subgroup-#{SecureRandom.hex(4)}" end + + imported_group # trigger import end it( 'successfully imports groups and labels', - testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1873' + testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347674' ) do expect { imported_group.import_status }.to eventually_eq('finished').within(import_wait_duration) @@ -108,11 +119,13 @@ module QA badge.link_url = "http://example.com/badge" badge.image_url = "http://shields.io/badge" end + + imported_group # trigger import end it( 'successfully imports group milestones and badges', - testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/2245' + testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347628' ) do expect { imported_group.import_status }.to eventually_eq('finished').within(import_wait_duration) @@ -139,6 +152,8 @@ module QA before do member.set_public_email source_group.add_member(member, Resource::Members::AccessLevel::DEVELOPER) + + imported_group # trigger import end after do @@ -147,14 +162,16 @@ module QA it( 'adds members for imported group', - testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/2310' + testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347609' ) 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) + aggregate_failures do + expect(imported_member).not_to be_nil + expect(imported_member.access_level).to eq(Resource::Members::AccessLevel::DEVELOPER) + end end end end 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 deleted file mode 100644 index 14c94e99446..00000000000 --- a/qa/qa/specs/features/api/1_manage/bulk_import_project_spec.rb +++ /dev/null @@ -1,134 +0,0 @@ -# frozen_string_literal: true - -module QA - # 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(: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 - project.initialize_with_readme = true - 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 - - 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) - - sandbox.add_member(user, Resource::Members::AccessLevel::MAINTAINER) - - 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) - 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" - - aggregate_failures do - 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 - end - end -end diff --git a/qa/qa/specs/features/api/1_manage/import_github_repo_spec.rb b/qa/qa/specs/features/api/1_manage/import_github_repo_spec.rb index 744f39525b9..4bc95395f25 100644 --- a/qa/qa/specs/features/api/1_manage/import_github_repo_spec.rb +++ b/qa/qa/specs/features/api/1_manage/import_github_repo_spec.rb @@ -30,7 +30,7 @@ module QA user.remove_via_api! end - it 'imports Github repo via api', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1878' do + it 'imports Github repo via api', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347670' do imported_project # import the project expect { imported_project.reload!.import_status }.to eventually_eq('finished').within(max_duration: 90) 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 3a2f960d812..c46de0ac514 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 @@ -121,7 +121,7 @@ module QA it( 'imports large Github repo via api', - testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1880' + testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347668' ) do start = Time.now diff --git a/qa/qa/specs/features/api/1_manage/project_access_token_spec.rb b/qa/qa/specs/features/api/1_manage/project_access_token_spec.rb index 47c07875257..13a795ca976 100644 --- a/qa/qa/specs/features/api/1_manage/project_access_token_spec.rb +++ b/qa/qa/specs/features/api/1_manage/project_access_token_spec.rb @@ -4,17 +4,20 @@ module QA RSpec.describe 'Manage' do describe 'Project access token' do before(:all) do - @project_access_token = QA::Resource::ProjectAccessToken.fabricate_via_api! + @project_access_token = QA::Resource::ProjectAccessToken.fabricate_via_api! do |pat| + pat.project = Resource::ReusableProject.fabricate_via_api! + end + @user_api_client = Runtime::API::Client.new(:gitlab, personal_access_token: @project_access_token.token) end context 'for the same project' do - it 'can be used to create a file via the project API', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1823' do + it 'can be used to create a file via the project API', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347858' do expect do Resource::File.fabricate_via_api! do |file| file.api_client = @user_api_client file.project = @project_access_token.project - file.branch = 'new_branch' + file.branch = "new_branch_#{SecureRandom.hex(8)}" file.commit_message = 'Add new file' file.name = "text-#{SecureRandom.hex(8)}.txt" file.content = 'New file' @@ -22,12 +25,12 @@ module QA end.not_to raise_error end - it 'can be used to commit via the API', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1822' do + it 'can be used to commit via the API', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347859' do expect do Resource::Repository::Commit.fabricate_via_api! do |commit| commit.api_client = @user_api_client commit.project = @project_access_token.project - commit.branch = 'new_branch' + commit.branch = "new_branch_#{SecureRandom.hex(8)}" commit.start_branch = @project_access_token.project.default_branch commit.commit_message = 'Add new file' commit.add_files([ @@ -43,12 +46,12 @@ module QA @different_project = Resource::Project.fabricate! end - it 'cannot be used to create a file via the project API', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1821' do + it 'cannot be used to create a file via the project API', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347860' do expect do Resource::File.fabricate_via_api! do |file| file.api_client = @user_api_client file.project = @different_project - file.branch = 'new_branch' + file.branch = "new_branch_#{SecureRandom.hex(8)}" file.commit_message = 'Add new file' file.name = "text-#{SecureRandom.hex(8)}.txt" file.content = 'New file' @@ -56,12 +59,12 @@ module QA end.to raise_error(Resource::ApiFabricator::ResourceFabricationFailedError, /403 Forbidden/) end - it 'cannot be used to commit via the API', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1820' do + it 'cannot be used to commit via the API', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347861' do expect do Resource::Repository::Commit.fabricate_via_api! do |commit| commit.api_client = @user_api_client commit.project = @different_project - commit.branch = 'new_branch' + commit.branch = "new_branch_#{SecureRandom.hex(8)}" commit.start_branch = @different_project.default_branch commit.commit_message = 'Add new file' commit.add_files([ diff --git a/qa/qa/specs/features/api/1_manage/rate_limits_spec.rb b/qa/qa/specs/features/api/1_manage/rate_limits_spec.rb index 9eb1bd985ea..17ffb901e5a 100644 --- a/qa/qa/specs/features/api/1_manage/rate_limits_spec.rb +++ b/qa/qa/specs/features/api/1_manage/rate_limits_spec.rb @@ -8,7 +8,7 @@ module QA let(:api_client) { Runtime::API::Client.new(:gitlab, ip_limits: true) } let(:request) { Runtime::API::Request.new(api_client, '/users') } - it 'GET /users', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1567' do + it 'GET /users', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347881' do 5.times do get request.url expect_status(200) diff --git a/qa/qa/specs/features/api/1_manage/user_access_termination_spec.rb b/qa/qa/specs/features/api/1_manage/user_access_termination_spec.rb index a149c42877f..e47e5d22e5e 100644 --- a/qa/qa/specs/features/api/1_manage/user_access_termination_spec.rb +++ b/qa/qa/specs/features/api/1_manage/user_access_termination_spec.rb @@ -30,7 +30,7 @@ module QA @group.sandbox.remove_member(@user) end - it 'is not allowed to push code via the CLI', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1712' do + it 'is not allowed to push code via the CLI', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347863' do expect do Resource::Repository::Push.fabricate! do |push| push.repository_http_uri = @project.repository_http_location.uri @@ -43,7 +43,7 @@ module QA end.to raise_error(QA::Support::Run::CommandError, /You are not allowed to push code to this project/) end - it 'is not allowed to create a file via the API', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1711' do + it 'is not allowed to create a file via the API', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347864' do expect do Resource::File.fabricate_via_api! do |file| file.api_client = @user_api_client @@ -56,7 +56,7 @@ module QA end.to raise_error(Resource::ApiFabricator::ResourceFabricationFailedError, /403 Forbidden/) end - it 'is not allowed to commit via the API', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1710' do + it 'is not allowed to commit via the API', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347865' do expect do Resource::Repository::Commit.fabricate_via_api! do |commit| commit.api_client = @user_api_client diff --git a/qa/qa/specs/features/api/1_manage/users_spec.rb b/qa/qa/specs/features/api/1_manage/users_spec.rb index b705ce9e174..53587209bfb 100644 --- a/qa/qa/specs/features/api/1_manage/users_spec.rb +++ b/qa/qa/specs/features/api/1_manage/users_spec.rb @@ -8,13 +8,13 @@ module QA let(:api_client) { Runtime::API::Client.new(:gitlab) } let(:request) { Runtime::API::Request.new(api_client, '/users') } - it 'GET /users', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1552' do + it 'GET /users', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347882' do get request.url expect_status(200) end - it 'GET /users/:username with a valid username', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1544' do + it 'GET /users/:username with a valid username', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347886' do get request.url, { params: { username: Runtime::User.username } } expect_status(200) @@ -23,7 +23,7 @@ module QA ) end - it 'GET /users/:username with an invalid username', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1551' do + it 'GET /users/:username with an invalid username', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347883' do get request.url, { params: { username: SecureRandom.hex(10) } } expect_status(200) |