diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-07-20 12:26:25 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-07-20 12:26:25 +0000 |
commit | a09983ae35713f5a2bbb100981116d31ce99826e (patch) | |
tree | 2ee2af7bd104d57086db360a7e6d8c9d5d43667a /qa/qa/resource | |
parent | 18c5ab32b738c0b6ecb4d0df3994000482f34bd8 (diff) | |
download | gitlab-ce-a09983ae35713f5a2bbb100981116d31ce99826e.tar.gz |
Add latest changes from gitlab-org/gitlab@13-2-stable-ee
Diffstat (limited to 'qa/qa/resource')
-rw-r--r-- | qa/qa/resource/api_fabricator.rb | 14 | ||||
-rw-r--r-- | qa/qa/resource/group.rb | 13 | ||||
-rw-r--r-- | qa/qa/resource/group_milestone.rb | 57 | ||||
-rw-r--r-- | qa/qa/resource/issue.rb | 1 | ||||
-rw-r--r-- | qa/qa/resource/members.rb | 4 | ||||
-rw-r--r-- | qa/qa/resource/project.rb | 6 | ||||
-rw-r--r-- | qa/qa/resource/project_milestone.rb | 20 | ||||
-rw-r--r-- | qa/qa/resource/repository/commit.rb | 24 | ||||
-rw-r--r-- | qa/qa/resource/sandbox.rb | 1 | ||||
-rw-r--r-- | qa/qa/resource/user.rb | 5 | ||||
-rw-r--r-- | qa/qa/resource/wiki/project_page.rb | 2 |
11 files changed, 136 insertions, 11 deletions
diff --git a/qa/qa/resource/api_fabricator.rb b/qa/qa/resource/api_fabricator.rb index 591aa449219..babdfc96265 100644 --- a/qa/qa/resource/api_fabricator.rb +++ b/qa/qa/resource/api_fabricator.rb @@ -83,13 +83,13 @@ module QA end def api_get_from(get_path) - url = Runtime::API::Request.new(api_client, get_path).url - response = get(url) + request = Runtime::API::Request.new(api_client, get_path) + response = get(request.url) if response.code == HTTP_STATUS_SERVER_ERROR - raise InternalServerError, "Failed to GET #{url} - (#{response.code}): `#{response}`." + raise InternalServerError, "Failed to GET #{request.mask_url} - (#{response.code}): `#{response}`." elsif response.code != HTTP_STATUS_OK - raise ResourceNotFoundError, "Resource at #{url} could not be found (#{response.code}): `#{response}`." + raise ResourceNotFoundError, "Resource at #{request.mask_url} could not be found (#{response.code}): `#{response}`." end response @@ -108,11 +108,11 @@ module QA end def api_delete - url = Runtime::API::Request.new(api_client, api_delete_path).url - response = delete(url) + request = Runtime::API::Request.new(api_client, api_delete_path) + response = delete(request.url) unless [HTTP_STATUS_NO_CONTENT, HTTP_STATUS_ACCEPTED].include? response.code - raise ResourceNotDeletedError, "Resource at #{url} could not be deleted (#{response.code}): `#{response}`." + raise ResourceNotDeletedError, "Resource at #{request.mask_url} could not be deleted (#{response.code}): `#{response}`." end response diff --git a/qa/qa/resource/group.rb b/qa/qa/resource/group.rb index 850d6205305..75dcb4db55f 100644 --- a/qa/qa/resource/group.rb +++ b/qa/qa/resource/group.rb @@ -59,6 +59,10 @@ module QA "/groups/#{CGI.escape("#{sandbox.path}/#{path}")}" end + def api_put_path + "/groups/#{id}" + end + def api_post_path '/groups' end @@ -75,6 +79,15 @@ module QA def api_delete_path "/groups/#{id}" end + + def set_require_two_factor_authentication(value:) + put_body = { require_two_factor_authentication: value } + response = put Runtime::API::Request.new(api_client, api_put_path).url, put_body + + unless response.code == HTTP_STATUS_OK + raise ResourceUpdateFailedError, "Could not update require_two_factor_authentication to #{value}. Request returned (#{response.code}): `#{response}`." + end + end end end end diff --git a/qa/qa/resource/group_milestone.rb b/qa/qa/resource/group_milestone.rb new file mode 100644 index 00000000000..1fb07fdbd0b --- /dev/null +++ b/qa/qa/resource/group_milestone.rb @@ -0,0 +1,57 @@ +# frozen_string_literal: true + +module QA + module Resource + class GroupMilestone < Base + attr_writer :start_date, :due_date + + attribute :id + attribute :title + attribute :description + + attribute :group do + Group.fabricate_via_api! do |resource| + resource.name = 'group-with-milestone' + end + end + + def initialize + @title = "group-milestone-#{SecureRandom.hex(4)}" + @description = "My awesome group milestone." + end + + def api_get_path + "/groups/#{group.id}/milestones/#{id}" + end + + def api_post_path + "/groups/#{group.id}/milestones" + end + + def api_post_body + { + title: title, + description: description + }.tap do |hash| + hash[:start_date] = @start_date if @start_date + hash[:due_date] = @due_date if @due_date + end + 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 + end + end +end diff --git a/qa/qa/resource/issue.rb b/qa/qa/resource/issue.rb index b4295a35263..d96d8d744d2 100644 --- a/qa/qa/resource/issue.rb +++ b/qa/qa/resource/issue.rb @@ -34,6 +34,7 @@ module QA Page::Project::Issue::New.perform do |new_page| new_page.fill_title(@title) new_page.fill_description(@description) + new_page.choose_milestone(@milestone) if @milestone new_page.create_new_issue end end diff --git a/qa/qa/resource/members.rb b/qa/qa/resource/members.rb index 38a620a5427..4ebed37ca23 100644 --- a/qa/qa/resource/members.rb +++ b/qa/qa/resource/members.rb @@ -8,10 +8,14 @@ module QA # module Members def add_member(user, access_level = AccessLevel::DEVELOPER) + QA::Runtime::Logger.debug(%Q[Adding user #{user.username} to #{full_path} #{self.class.name}]) + post Runtime::API::Request.new(api_client, api_members_path).url, { user_id: user.id, access_level: access_level } end def remove_member(user) + QA::Runtime::Logger.debug(%Q[Removing user #{user.username} from #{full_path} #{self.class.name}]) + delete Runtime::API::Request.new(api_client, "#{api_members_path}/#{user.id}").url end diff --git a/qa/qa/resource/project.rb b/qa/qa/resource/project.rb index 645f4e97ee0..358e87b0eb9 100644 --- a/qa/qa/resource/project.rb +++ b/qa/qa/resource/project.rb @@ -96,7 +96,11 @@ module QA end def has_file?(file_path) - repository_tree.any? { |file| file[:path] == file_path } + response = repository_tree + + raise ResourceNotFoundError, "#{response[:message]}" if response.is_a?(Hash) && response.has_key?(:message) + + response.any? { |file| file[:path] == file_path } end def api_get_path diff --git a/qa/qa/resource/project_milestone.rb b/qa/qa/resource/project_milestone.rb index 385b9f0c96b..c9218e03e35 100644 --- a/qa/qa/resource/project_milestone.rb +++ b/qa/qa/resource/project_milestone.rb @@ -7,6 +7,7 @@ module QA attribute :id attribute :title + attribute :description attribute :project do Project.fabricate_via_api! do |resource| @@ -16,6 +17,7 @@ module QA def initialize @title = "project-milestone-#{SecureRandom.hex(4)}" + @description = "My awesome project milestone." end def api_get_path @@ -28,12 +30,28 @@ module QA def api_post_body { - title: title + title: title, + description: description }.tap do |hash| hash[:start_date] = @start_date if @start_date hash[:due_date] = @due_date if @due_date end end + + def fabricate! + project.visit! + + Page::Project::Menu.perform(&:go_to_milestones) + Page::Project::Milestone::Index.perform(&:click_new_milestone_link) + + Page::Project::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 end end end diff --git a/qa/qa/resource/repository/commit.rb b/qa/qa/resource/repository/commit.rb index e3fb5bf486d..3243eacdb28 100644 --- a/qa/qa/resource/repository/commit.rb +++ b/qa/qa/resource/repository/commit.rb @@ -29,6 +29,30 @@ module QA @add_files = files end + def add_directory(dir) + raise "Must set directory as a Pathname" unless dir.is_a?(Pathname) + + files_to_add = [] + + dir.each_child do |child| + case child.ftype? + when "file" + files_to_add.append({ + file_path: child.to_s, + content: child.read + }) + when "directory" + add_directory(child) + else + continue + end + end + + validate_files!(files_to_add) + + @add_files.merge(files_to_add) + end + def update_files(files) validate_files!(files) diff --git a/qa/qa/resource/sandbox.rb b/qa/qa/resource/sandbox.rb index 032ff65c58b..b351d92092f 100644 --- a/qa/qa/resource/sandbox.rb +++ b/qa/qa/resource/sandbox.rb @@ -14,6 +14,7 @@ module QA attribute :id attribute :runners_token attribute :name + attribute :full_path def initialize @path = Runtime::Namespace.sandbox_name diff --git a/qa/qa/resource/user.rb b/qa/qa/resource/user.rb index e6dbe3faa61..41908a71cf9 100644 --- a/qa/qa/resource/user.rb +++ b/qa/qa/resource/user.rb @@ -117,7 +117,10 @@ module QA user.password = password end else - self.fabricate! + self.fabricate! do |user| + user.username = username if username + user.password = password if password + end end end diff --git a/qa/qa/resource/wiki/project_page.rb b/qa/qa/resource/wiki/project_page.rb index 5d0a0a37765..8bcc4bfe220 100644 --- a/qa/qa/resource/wiki/project_page.rb +++ b/qa/qa/resource/wiki/project_page.rb @@ -34,7 +34,7 @@ module QA rescue ResourceURLMissingError # TODO # workaround - project.web_url.concat("/-/wikis/#{slug}") + "#{project.web_url}/-/wikis/#{slug}" end def api_get_path |