summaryrefslogtreecommitdiff
path: root/qa/qa/resource
diff options
context:
space:
mode:
Diffstat (limited to 'qa/qa/resource')
-rw-r--r--qa/qa/resource/api_fabricator.rb2
-rw-r--r--qa/qa/resource/ci_variable.rb2
-rw-r--r--qa/qa/resource/deploy_token.rb2
-rw-r--r--qa/qa/resource/group_base.rb16
-rw-r--r--qa/qa/resource/group_deploy_token.rb51
-rw-r--r--qa/qa/resource/group_milestone.rb67
-rw-r--r--qa/qa/resource/issue.rb9
-rw-r--r--qa/qa/resource/kubernetes_cluster/base.rb2
-rw-r--r--qa/qa/resource/label_base.rb6
-rw-r--r--qa/qa/resource/members.rb4
-rw-r--r--qa/qa/resource/merge_request.rb4
-rw-r--r--qa/qa/resource/merge_request_from_fork.rb2
-rw-r--r--qa/qa/resource/package.rb2
-rw-r--r--qa/qa/resource/project.rb2
-rw-r--r--qa/qa/resource/project_imported_from_github.rb4
-rw-r--r--qa/qa/resource/project_imported_from_url.rb2
-rw-r--r--qa/qa/resource/project_issue_note.rb2
-rw-r--r--qa/qa/resource/protected_branch.rb2
-rw-r--r--qa/qa/resource/registry_repository.rb2
-rw-r--r--qa/qa/resource/repository/project_push.rb2
-rw-r--r--qa/qa/resource/repository/push.rb3
-rw-r--r--qa/qa/resource/runner.rb2
-rw-r--r--qa/qa/resource/ssh_key.rb2
-rw-r--r--qa/qa/resource/user.rb19
-rw-r--r--qa/qa/resource/wiki/group_page.rb2
25 files changed, 149 insertions, 64 deletions
diff --git a/qa/qa/resource/api_fabricator.rb b/qa/qa/resource/api_fabricator.rb
index 034feb4e90f..c1533577657 100644
--- a/qa/qa/resource/api_fabricator.rb
+++ b/qa/qa/resource/api_fabricator.rb
@@ -55,7 +55,7 @@ module QA
end
end
- include Support::Api
+ include Support::API
attr_writer :api_resource, :api_response
def api_put(body = api_put_body)
diff --git a/qa/qa/resource/ci_variable.rb b/qa/qa/resource/ci_variable.rb
index 0b9f4eb6635..ef663bb613f 100644
--- a/qa/qa/resource/ci_variable.rb
+++ b/qa/qa/resource/ci_variable.rb
@@ -22,7 +22,7 @@ module QA
Page::Project::Menu.perform(&:go_to_ci_cd_settings)
- Page::Project::Settings::CICD.perform do |setting|
+ Page::Project::Settings::CiCd.perform do |setting|
setting.expand_ci_variables do |page|
page.click_add_variable
page.fill_variable(key, value, masked)
diff --git a/qa/qa/resource/deploy_token.rb b/qa/qa/resource/deploy_token.rb
index cd638ad2f85..151454c37b1 100644
--- a/qa/qa/resource/deploy_token.rb
+++ b/qa/qa/resource/deploy_token.rb
@@ -37,7 +37,7 @@ module QA
setting.expand_deploy_tokens do |page|
page.fill_token_name(name)
page.fill_token_expires_at(expires_at)
- page.fill_scopes(read_repository: true, read_package_registry: true)
+ page.fill_scopes(read_repository: true, read_package_registry: true, write_package_registry: true)
page.add_token
end
diff --git a/qa/qa/resource/group_base.rb b/qa/qa/resource/group_base.rb
index b937b704613..a1e5b19f409 100644
--- a/qa/qa/resource/group_base.rb
+++ b/qa/qa/resource/group_base.rb
@@ -30,6 +30,22 @@ module QA
end
end
+ # Get group milestones
+ #
+ # @return [Array<QA::Resource::GroupMilestone>]
+ def milestones
+ parse_body(api_get_from("#{api_get_path}/milestones")).map do |milestone|
+ GroupMilestone.init do |resource|
+ resource.api_client = api_client
+ resource.group = self
+ resource.id = milestone[:id]
+ resource.iid = milestone[:iid]
+ resource.title = milestone[:title]
+ resource.description = milestone[:description]
+ end
+ end
+ end
+
# API get path
#
# @return [String]
diff --git a/qa/qa/resource/group_deploy_token.rb b/qa/qa/resource/group_deploy_token.rb
new file mode 100644
index 00000000000..410a7e6253f
--- /dev/null
+++ b/qa/qa/resource/group_deploy_token.rb
@@ -0,0 +1,51 @@
+# frozen_string_literal: true
+
+module QA
+ module Resource
+ class GroupDeployToken < Base
+ attr_accessor :name, :expires_at
+
+ attribute :username do
+ Page::Group::Settings::Repository.perform do |repository_page|
+ repository_page.expand_deploy_tokens(&:token_username)
+ end
+ end
+
+ attribute :password do
+ Page::Group::Settings::Repository.perform do |repository_page|
+ repository_page.expand_deploy_tokens(&:token_password)
+ end
+ end
+
+ attribute :group do
+ Group.fabricate! do |resource|
+ resource.name = 'group-with-deploy-token'
+ resource.description = 'group for adding deploy token test'
+ end
+ end
+
+ attribute :project do
+ Project.fabricate! do |resource|
+ resource.name = 'project-to-deploy'
+ resource.description = 'project for adding deploy token test'
+ end
+ end
+
+ def fabricate!
+ group.visit!
+
+ Page::Group::Menu.perform(&:go_to_repository_settings)
+
+ Page::Group::Settings::Repository.perform do |setting|
+ setting.expand_deploy_tokens do |page|
+ page.fill_token_name(name)
+ page.fill_token_expires_at(expires_at)
+ page.fill_scopes(read_repository: true, read_package_registry: true, write_package_registry: true)
+
+ page.add_token
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/resource/group_milestone.rb b/qa/qa/resource/group_milestone.rb
index 1fb07fdbd0b..880ca2b9721 100644
--- a/qa/qa/resource/group_milestone.rb
+++ b/qa/qa/resource/group_milestone.rb
@@ -3,11 +3,14 @@
module QA
module Resource
class GroupMilestone < Base
- attr_writer :start_date, :due_date
-
- attribute :id
- attribute :title
- attribute :description
+ attributes :id,
+ :iid,
+ :title,
+ :description,
+ :start_date,
+ :due_date,
+ :updated_at,
+ :created_at
attribute :group do
Group.fabricate_via_api! do |resource|
@@ -20,6 +23,21 @@ module QA
@description = "My awesome group milestone."
end
+ def fabricate!
+ group.visit!
+
+ Page::Group::Menu.perform(&:go_to_milestones)
+ Page::Group::Milestone::Index.perform(&:click_new_milestone_link)
+
+ Page::Group::Milestone::New.perform do |new_milestone|
+ new_milestone.set_title(@title)
+ new_milestone.set_description(@description)
+ new_milestone.set_start_date(@start_date) if @start_date
+ new_milestone.set_due_date(@due_date) if @due_date
+ new_milestone.click_create_milestone_button
+ end
+ end
+
def api_get_path
"/groups/#{group.id}/milestones/#{id}"
end
@@ -38,19 +56,36 @@ module QA
end
end
- def fabricate!
- group.visit!
+ # Object comparison
+ #
+ # @param [QA::Resource::GroupMilestone] other
+ # @return [Boolean]
+ def ==(other)
+ other.is_a?(GroupMilestone) && comparable_milestone == other.comparable_milestone
+ end
- Page::Group::Menu.perform(&:go_to_milestones)
- Page::Group::Milestone::Index.perform(&:click_new_milestone_link)
+ # Override inspect for a better rspec failure diff output
+ #
+ # @return [String]
+ def inspect
+ JSON.pretty_generate(comparable_milestone)
+ end
- Page::Group::Milestone::New.perform do |new_milestone|
- new_milestone.set_title(@title)
- new_milestone.set_description(@description)
- new_milestone.set_start_date(@start_date) if @start_date
- new_milestone.set_due_date(@due_date) if @due_date
- new_milestone.click_create_milestone_button
- end
+ protected
+
+ # Return subset of fields for comparing milestones
+ #
+ # @return [Hash]
+ def comparable_milestone
+ reload! unless api_response
+
+ api_response.slice(
+ :title,
+ :description,
+ :state,
+ :due_date,
+ :start_date
+ )
end
end
end
diff --git a/qa/qa/resource/issue.rb b/qa/qa/resource/issue.rb
index c45ab7593b6..9214d4eff4a 100644
--- a/qa/qa/resource/issue.rb
+++ b/qa/qa/resource/issue.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require 'securerandom'
-
module QA
module Resource
class Issue < Base
@@ -18,12 +16,14 @@ module QA
:iid,
:assignee_ids,
:labels,
- :title
+ :title,
+ :description
def initialize
@assignee_ids = []
@labels = []
@title = "Issue title #{SecureRandom.hex(8)}"
+ @description = "Issue description #{SecureRandom.hex(8)}"
end
def fabricate!
@@ -34,7 +34,7 @@ module QA
Page::Project::Issue::New.perform do |new_page|
new_page.fill_title(@title)
new_page.choose_template(@template) if @template
- new_page.fill_description(@description) if @description
+ new_page.fill_description(@description) if @description && !@template
new_page.choose_milestone(@milestone) if @milestone
new_page.create_new_issue
end
@@ -64,6 +64,7 @@ module QA
}.tap do |hash|
hash[:milestone_id] = @milestone.id if @milestone
hash[:weight] = @weight if @weight
+ hash[:description] = @description if @description
end
end
diff --git a/qa/qa/resource/kubernetes_cluster/base.rb b/qa/qa/resource/kubernetes_cluster/base.rb
index 38bca48be17..b3812d60431 100644
--- a/qa/qa/resource/kubernetes_cluster/base.rb
+++ b/qa/qa/resource/kubernetes_cluster/base.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require 'securerandom'
-
module QA
module Resource
module KubernetesCluster
diff --git a/qa/qa/resource/label_base.rb b/qa/qa/resource/label_base.rb
index 14ddd0809ea..b1af0e23561 100644
--- a/qa/qa/resource/label_base.rb
+++ b/qa/qa/resource/label_base.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require 'securerandom'
-
module QA
module Resource
# Base label class for GroupLabel and ProjectLabel
@@ -66,9 +64,9 @@ module QA
JSON.pretty_generate(comparable_label)
end
- # protected
+ protected
- # Return subset of fields for comparing groups
+ # Return subset of fields for comparing labels
#
# @return [Hash]
def comparable_label
diff --git a/qa/qa/resource/members.rb b/qa/qa/resource/members.rb
index c8f9feeca15..83adb10c3a0 100644
--- a/qa/qa/resource/members.rb
+++ b/qa/qa/resource/members.rb
@@ -12,7 +12,7 @@ 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
+ response.code == QA::Support::API::HTTP_STATUS_CREATED
end
end
@@ -31,7 +31,7 @@ module QA
QA::Runtime::Logger.debug(%Q[Sharing #{self.class.name} with #{group.name}])
response = post Runtime::API::Request.new(api_client, api_share_path).url, { group_id: group.id, group_access: access_level }
- response.code == QA::Support::Api::HTTP_STATUS_CREATED
+ response.code == QA::Support::API::HTTP_STATUS_CREATED
end
end
diff --git a/qa/qa/resource/merge_request.rb b/qa/qa/resource/merge_request.rb
index 8c313f5d518..1fea6feb910 100644
--- a/qa/qa/resource/merge_request.rb
+++ b/qa/qa/resource/merge_request.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require 'securerandom'
-
module QA
module Resource
class MergeRequest < Base
@@ -25,7 +23,7 @@ module QA
:state
attribute :project do
- Project.fabricate! do |resource|
+ Project.fabricate_via_api! do |resource|
resource.name = 'project-with-merge-request'
end
end
diff --git a/qa/qa/resource/merge_request_from_fork.rb b/qa/qa/resource/merge_request_from_fork.rb
index b0367df64ed..4eebbdf0a52 100644
--- a/qa/qa/resource/merge_request_from_fork.rb
+++ b/qa/qa/resource/merge_request_from_fork.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require 'securerandom'
-
module QA
module Resource
class MergeRequestFromFork < MergeRequest
diff --git a/qa/qa/resource/package.rb b/qa/qa/resource/package.rb
index 0e8c3ee95de..b3decb1e2ab 100644
--- a/qa/qa/resource/package.rb
+++ b/qa/qa/resource/package.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require 'securerandom'
-
module QA
module Resource
class Package < Base
diff --git a/qa/qa/resource/project.rb b/qa/qa/resource/project.rb
index 53b8a9b0246..5ad55090f8c 100644
--- a/qa/qa/resource/project.rb
+++ b/qa/qa/resource/project.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require 'securerandom'
-
module QA
module Resource
class Project < Base
diff --git a/qa/qa/resource/project_imported_from_github.rb b/qa/qa/resource/project_imported_from_github.rb
index 8aa19555d50..cffeed7a64b 100644
--- a/qa/qa/resource/project_imported_from_github.rb
+++ b/qa/qa/resource/project_imported_from_github.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require 'octokit'
-
module QA
module Resource
class ProjectImportedFromGithub < Resource::Project
@@ -68,7 +66,7 @@ module QA
response = post(request_url(api_trigger_mirror_pull_path), nil)
Runtime::Logger.info "Mirror pull request response: #{response}"
- response.code == Support::Api::HTTP_STATUS_OK
+ response.code == Support::API::HTTP_STATUS_OK
end
end
diff --git a/qa/qa/resource/project_imported_from_url.rb b/qa/qa/resource/project_imported_from_url.rb
index f159a174840..9880504d886 100644
--- a/qa/qa/resource/project_imported_from_url.rb
+++ b/qa/qa/resource/project_imported_from_url.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require 'securerandom'
-
module QA
module Resource
class ProjectImportedFromURL < Resource::Project
diff --git a/qa/qa/resource/project_issue_note.rb b/qa/qa/resource/project_issue_note.rb
index 0eb34380332..a68c68c660a 100644
--- a/qa/qa/resource/project_issue_note.rb
+++ b/qa/qa/resource/project_issue_note.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require 'securerandom'
-
module QA
module Resource
class ProjectIssueNote < Base
diff --git a/qa/qa/resource/protected_branch.rb b/qa/qa/resource/protected_branch.rb
index 7eb5442a964..7db6450acf8 100644
--- a/qa/qa/resource/protected_branch.rb
+++ b/qa/qa/resource/protected_branch.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require 'securerandom'
-
module QA
module Resource
class ProtectedBranch < Base
diff --git a/qa/qa/resource/registry_repository.rb b/qa/qa/resource/registry_repository.rb
index 3de409232dd..148af353a25 100644
--- a/qa/qa/resource/registry_repository.rb
+++ b/qa/qa/resource/registry_repository.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require 'securerandom'
-
module QA
module Resource
class RegistryRepository < Base
diff --git a/qa/qa/resource/repository/project_push.rb b/qa/qa/resource/repository/project_push.rb
index ef4873e9483..d0e94951f3b 100644
--- a/qa/qa/resource/repository/project_push.rb
+++ b/qa/qa/resource/repository/project_push.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require 'securerandom'
-
module QA
module Resource
module Repository
diff --git a/qa/qa/resource/repository/push.rb b/qa/qa/resource/repository/push.rb
index f5b6040d927..00bed7ed546 100644
--- a/qa/qa/resource/repository/push.rb
+++ b/qa/qa/resource/repository/push.rb
@@ -1,8 +1,5 @@
# frozen_string_literal: true
-require 'pathname'
-require 'securerandom'
-
module QA
module Resource
module Repository
diff --git a/qa/qa/resource/runner.rb b/qa/qa/resource/runner.rb
index 2a0823d648e..3c448816100 100644
--- a/qa/qa/resource/runner.rb
+++ b/qa/qa/resource/runner.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require 'securerandom'
-
module QA
module Resource
class Runner < Base
diff --git a/qa/qa/resource/ssh_key.rb b/qa/qa/resource/ssh_key.rb
index 52526275cb0..9e178a425dd 100644
--- a/qa/qa/resource/ssh_key.rb
+++ b/qa/qa/resource/ssh_key.rb
@@ -72,7 +72,7 @@ module QA
Support::Retrier.retry_until(max_duration: QA::EE::Runtime::Geo.max_db_replication_time, sleep_interval: 3) do
response = get Runtime::API::Request.new(api_client, api_get_path).url
- response.code == QA::Support::Api::HTTP_STATUS_OK &&
+ response.code == QA::Support::API::HTTP_STATUS_OK &&
parse_body(response)[:title].include?(title)
end
end
diff --git a/qa/qa/resource/user.rb b/qa/qa/resource/user.rb
index c424d7319fe..811ce5e0505 100644
--- a/qa/qa/resource/user.rb
+++ b/qa/qa/resource/user.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require 'securerandom'
-
module QA
module Resource
class User < Base
@@ -117,6 +115,10 @@ module QA
'/users'
end
+ def api_put_path
+ "/users/#{id}"
+ end
+
def api_block_path
"/users/#{id}/block"
end
@@ -153,6 +155,16 @@ module QA
raise ResourceUpdateFailedError, "Failed to block user. Request returned (#{response.code}): `#{response}`."
end
+ def set_public_email
+ response = put(Runtime::API::Request.new(api_client, api_put_path).url, { public_email: email })
+ return if response.code == HTTP_STATUS_OK
+
+ raise(
+ ResourceUpdateFailedError,
+ "Failed to set public email. Request returned (#{response.code}): `#{response}`."
+ )
+ end
+
private
def ldap_post_body
@@ -175,7 +187,8 @@ module QA
end
def fetching_own_data?
- api_user&.username == username || Runtime::User.username == username
+ runtime_username = Runtime::User.ldap_user? ? Runtime::User.ldap_username : Runtime::User.username
+ api_user&.username == username || runtime_username == username
end
end
end
diff --git a/qa/qa/resource/wiki/group_page.rb b/qa/qa/resource/wiki/group_page.rb
index 83beaf097ca..1e40426a389 100644
--- a/qa/qa/resource/wiki/group_page.rb
+++ b/qa/qa/resource/wiki/group_page.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require 'securerandom'
-
module QA
module Resource
module Wiki