diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-05-19 07:33:21 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-05-19 07:33:21 +0000 |
commit | 36a59d088eca61b834191dacea009677a96c052f (patch) | |
tree | e4f33972dab5d8ef79e3944a9f403035fceea43f /qa/qa/resource | |
parent | a1761f15ec2cae7c7f7bbda39a75494add0dfd6f (diff) | |
download | gitlab-ce-36a59d088eca61b834191dacea009677a96c052f.tar.gz |
Add latest changes from gitlab-org/gitlab@15-0-stable-eev15.0.0-rc42
Diffstat (limited to 'qa/qa/resource')
-rw-r--r-- | qa/qa/resource/group_base.rb | 4 | ||||
-rw-r--r-- | qa/qa/resource/group_deploy_token.rb | 4 | ||||
-rw-r--r-- | qa/qa/resource/job.rb | 35 | ||||
-rw-r--r-- | qa/qa/resource/members.rb | 3 | ||||
-rw-r--r-- | qa/qa/resource/merge_request.rb | 12 | ||||
-rw-r--r-- | qa/qa/resource/pipeline.rb | 50 | ||||
-rw-r--r-- | qa/qa/resource/project.rb | 38 | ||||
-rw-r--r-- | qa/qa/resource/project_access_token.rb | 4 | ||||
-rw-r--r-- | qa/qa/resource/project_deploy_token.rb | 4 | ||||
-rw-r--r-- | qa/qa/resource/project_imported_from_github.rb | 2 | ||||
-rw-r--r-- | qa/qa/resource/repository/commit.rb | 6 |
11 files changed, 134 insertions, 28 deletions
diff --git a/qa/qa/resource/group_base.rb b/qa/qa/resource/group_base.rb index 889197a0373..bda72703906 100644 --- a/qa/qa/resource/group_base.rb +++ b/qa/qa/resource/group_base.rb @@ -64,10 +64,6 @@ module QA end end - def marked_for_deletion? - reload!.api_response[:marked_for_deletion_on].present? - end - # Get group badges # # @return [Array<QA::Resource::GroupBadge>] diff --git a/qa/qa/resource/group_deploy_token.rb b/qa/qa/resource/group_deploy_token.rb index c1d6be6547a..4c9b296ece1 100644 --- a/qa/qa/resource/group_deploy_token.rb +++ b/qa/qa/resource/group_deploy_token.rb @@ -17,10 +17,6 @@ module QA end end - def fabricate_via_api! - super - end - def api_get_path "/groups/#{group.id}/deploy_tokens" end diff --git a/qa/qa/resource/job.rb b/qa/qa/resource/job.rb new file mode 100644 index 00000000000..96c502e567c --- /dev/null +++ b/qa/qa/resource/job.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +module QA + module Resource + class Job < Base + attr_accessor :id, :name, :project + + attributes :id, + :project + + def fabricate_via_api! + resource_web_url(api_get) + rescue ResourceNotFoundError + super + end + + def artifacts + parse_body(api_get_from(api_get_path))[:artifacts] + end + + def api_get_path + "/projects/#{project.id}/jobs/#{id}" + end + + def api_post_path + end + + def api_post_body + { + artifacts: artifacts + } + end + end + end +end diff --git a/qa/qa/resource/members.rb b/qa/qa/resource/members.rb index 83adb10c3a0..0061f74cec5 100644 --- a/qa/qa/resource/members.rb +++ b/qa/qa/resource/members.rb @@ -12,7 +12,8 @@ module QA QA::Runtime::Logger.debug(%Q[Adding user #{user.username} to #{full_path} #{self.class.name}]) response = post Runtime::API::Request.new(api_client, api_members_path).url, { user_id: user.id, access_level: access_level } - response.code == QA::Support::API::HTTP_STATUS_CREATED + break true if response.code == QA::Support::API::HTTP_STATUS_CREATED + break true if response.body.include?('Member already exists') end end diff --git a/qa/qa/resource/merge_request.rb b/qa/qa/resource/merge_request.rb index 685cccea02d..0a92553690f 100644 --- a/qa/qa/resource/merge_request.rb +++ b/qa/qa/resource/merge_request.rb @@ -78,12 +78,12 @@ module QA end def fabricate! - return fabricate_large_merge_request if Runtime::Scenario.large_setup? + return fabricate_large_merge_request if large_setup? populate_target_and_source_if_required project.visit! - Page::Project::Show.perform(&:new_merge_request) + Flow::MergeRequest.create_new(source_branch: source_branch) Page::MergeRequest::New.perform do |new_page| new_page.fill_title(@title) new_page.choose_template(@template) if @template @@ -100,7 +100,7 @@ module QA end def fabricate_via_api! - return fabricate_large_merge_request if Runtime::Scenario.large_setup? + return fabricate_large_merge_request if large_setup? resource_web_url(api_get) rescue ResourceNotFoundError, NoValueError # rescue if iid not populated @@ -208,6 +208,12 @@ module QA private + def large_setup? + Runtime::Scenario.large_setup? + rescue ArgumentError + false + end + def transform_api_resource(api_resource) raise ResourceNotFoundError if api_resource.blank? diff --git a/qa/qa/resource/pipeline.rb b/qa/qa/resource/pipeline.rb index 907a6cb8558..910065d76a8 100644 --- a/qa/qa/resource/pipeline.rb +++ b/qa/qa/resource/pipeline.rb @@ -9,10 +9,10 @@ module QA end end - attribute :id - attribute :status - attribute :ref - attribute :sha + attributes :id, + :status, + :ref, + :sha # array in form # [ @@ -33,6 +33,14 @@ module QA Page::Project::Pipeline::New.perform(&:click_run_pipeline_button) end + def fabricate_via_api! + resource_web_url(api_get) + rescue ResourceNotFoundError + super + rescue NoValueError + super + end + def ref project.default_branch end @@ -51,6 +59,40 @@ module QA variables: variables } end + + def pipeline_variables + response = get(request_url("#{api_get_path}/variables")) + + unless response.code == HTTP_STATUS_OK + raise ResourceQueryError, "Could not get variables. Request returned (#{response.code}): `#{response}`." + end + + parse_body(response) + end + + def has_variable?(key:, value:) + pipeline_variables.any? { |var| var[:key] == key && var[:value] == value } + end + + def has_no_variable?(key:, value:) + !pipeline_variables.any? { |var| var[:key] == key && var[:value] == value } + end + + def pipeline_bridges + response = get(request_url("#{api_get_path}/bridges")) + + unless response.code == HTTP_STATUS_OK + raise ResourceQueryError, "Could not get bridges. Request returned (#{response.code}): `#{response}`." + end + + parse_body(response) + end + + def downstream_pipeline_id(bridge_name:) + result = pipeline_bridges.find { |bridge| bridge[:name] == bridge_name } + + result[:downstream_pipeline][:id] + end end end end diff --git a/qa/qa/resource/project.rb b/qa/qa/resource/project.rb index dba3eb2e219..2db4f4b5f65 100644 --- a/qa/qa/resource/project.rb +++ b/qa/qa/resource/project.rb @@ -190,6 +190,10 @@ module QA "#{api_get_path}/pipeline_schedules" end + def api_jobs_path + "#{api_get_path}/jobs" + end + def api_issues_path "#{api_get_path}/issues" end @@ -206,6 +210,10 @@ module QA "#{api_get_path}/wikis" end + def api_releases_path + "#{api_get_path}/releases" + end + def api_post_body post_body = { name: name, @@ -354,6 +362,15 @@ module QA auto_paginated_response(request_url(api_pipelines_path, per_page: '100'), attempts: attempts) end + def jobs + response = get(request_url(api_jobs_path)) + parse_body(response) + end + + def job_by_name(job_name) + jobs.find { |job| job[:name] == job_name } + end + def issues(auto_paginate: false, attempts: 0) return parse_body(api_get_from(api_issues_path)) unless auto_paginate @@ -381,9 +398,22 @@ module QA api_post_to(api_wikis_path, title: title, content: content) end + def releases + response = api_get_from(api_releases_path) + parse_body(response) + end + + def create_release(tag, ref = default_branch, **params) + api_post_to(api_releases_path, tag_name: tag, ref: ref, **params) + end + # Uses the API to wait until a pull mirroring update is successful (pull mirroring is treated as an import) def wait_for_pull_mirroring - mirror_succeeded = Support::Retrier.retry_until(max_duration: 180, raise_on_failure: false, sleep_interval: 1) do + mirror_succeeded = Support::Retrier.retry_until( + max_duration: 180, + raise_on_failure: false, + sleep_interval: 1 + ) do reload! api_resource[:import_status] == "finished" end @@ -394,7 +424,11 @@ module QA def remove_via_api! super - Support::Retrier.retry_until(max_duration: 60, sleep_interval: 1, message: "Waiting for #{self.class.name} to be removed") do + Support::Retrier.retry_until( + max_duration: 60, + sleep_interval: 1, + message: "Waiting for #{self.class.name} to be removed" + ) do !exists? rescue InternalServerError # Retry on transient errors that are likely to be due to race conditions between concurrent delete operations diff --git a/qa/qa/resource/project_access_token.rb b/qa/qa/resource/project_access_token.rb index f5cd8798f19..58cb3e667c0 100644 --- a/qa/qa/resource/project_access_token.rb +++ b/qa/qa/resource/project_access_token.rb @@ -15,10 +15,6 @@ module QA Page::Project::Settings::AccessTokens.perform(&:created_access_token) end - def fabricate_via_api! - super - end - def api_get_path "/projects/#{project.api_resource[:id]}/access_tokens" end diff --git a/qa/qa/resource/project_deploy_token.rb b/qa/qa/resource/project_deploy_token.rb index b31a7c25157..d6125103025 100644 --- a/qa/qa/resource/project_deploy_token.rb +++ b/qa/qa/resource/project_deploy_token.rb @@ -17,10 +17,6 @@ module QA end end - def fabricate_via_api! - super - end - def api_get_path "/projects/#{project.id}/deploy_tokens" end diff --git a/qa/qa/resource/project_imported_from_github.rb b/qa/qa/resource/project_imported_from_github.rb index 28a0f12b3e3..b9dbd2a6131 100644 --- a/qa/qa/resource/project_imported_from_github.rb +++ b/qa/qa/resource/project_imported_from_github.rb @@ -17,7 +17,7 @@ module QA Page::Project::Import::Github.perform do |import_page| import_page.add_personal_access_token(github_personal_access_token) import_page.import!(github_repository_path, group.full_path, name) - import_page.wait_for_success(github_repository_path) + import_page.wait_for_success(github_repository_path, wait: 240) end reload! diff --git a/qa/qa/resource/repository/commit.rb b/qa/qa/resource/repository/commit.rb index 54093a5c195..1fe35f7a77d 100644 --- a/qa/qa/resource/repository/commit.rb +++ b/qa/qa/resource/repository/commit.rb @@ -33,7 +33,11 @@ module QA super rescue ResourceNotFoundError - super + result = super + + project.wait_for_push(commit_message) + + result end def api_get_path |