summaryrefslogtreecommitdiff
path: root/qa/qa/resource
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-07-20 12:26:25 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-07-20 12:26:25 +0000
commita09983ae35713f5a2bbb100981116d31ce99826e (patch)
tree2ee2af7bd104d57086db360a7e6d8c9d5d43667a /qa/qa/resource
parent18c5ab32b738c0b6ecb4d0df3994000482f34bd8 (diff)
downloadgitlab-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.rb14
-rw-r--r--qa/qa/resource/group.rb13
-rw-r--r--qa/qa/resource/group_milestone.rb57
-rw-r--r--qa/qa/resource/issue.rb1
-rw-r--r--qa/qa/resource/members.rb4
-rw-r--r--qa/qa/resource/project.rb6
-rw-r--r--qa/qa/resource/project_milestone.rb20
-rw-r--r--qa/qa/resource/repository/commit.rb24
-rw-r--r--qa/qa/resource/sandbox.rb1
-rw-r--r--qa/qa/resource/user.rb5
-rw-r--r--qa/qa/resource/wiki/project_page.rb2
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