diff options
Diffstat (limited to 'qa/qa/resource')
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 |