summaryrefslogtreecommitdiff
path: root/qa/qa/resource
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-05-19 07:33:21 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2022-05-19 07:33:21 +0000
commit36a59d088eca61b834191dacea009677a96c052f (patch)
treee4f33972dab5d8ef79e3944a9f403035fceea43f /qa/qa/resource
parenta1761f15ec2cae7c7f7bbda39a75494add0dfd6f (diff)
downloadgitlab-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.rb4
-rw-r--r--qa/qa/resource/group_deploy_token.rb4
-rw-r--r--qa/qa/resource/job.rb35
-rw-r--r--qa/qa/resource/members.rb3
-rw-r--r--qa/qa/resource/merge_request.rb12
-rw-r--r--qa/qa/resource/pipeline.rb50
-rw-r--r--qa/qa/resource/project.rb38
-rw-r--r--qa/qa/resource/project_access_token.rb4
-rw-r--r--qa/qa/resource/project_deploy_token.rb4
-rw-r--r--qa/qa/resource/project_imported_from_github.rb2
-rw-r--r--qa/qa/resource/repository/commit.rb6
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