Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'qa/qa/resource/registry_repository.rb')
-rw-r--r--qa/qa/resource/registry_repository.rb56
1 files changed, 49 insertions, 7 deletions
diff --git a/qa/qa/resource/registry_repository.rb b/qa/qa/resource/registry_repository.rb
index 1e43d93a784..3de409232dd 100644
--- a/qa/qa/resource/registry_repository.rb
+++ b/qa/qa/resource/registry_repository.rb
@@ -6,7 +6,7 @@ module QA
module Resource
class RegistryRepository < Base
attr_accessor :name,
- :repository_id
+ :tag_name
attribute :project do
Project.fabricate_via_api! do |resource|
@@ -15,9 +15,17 @@ module QA
end
end
+ attribute :id do
+ registry_repositories = project.registry_repositories
+
+ return unless (this_registry_repository = registry_repositories&.find { |registry_repository| registry_repository[:path] == name }) # rubocop:disable Cop/AvoidReturnFromBlocks
+
+ this_registry_repository[:id]
+ end
+
def initialize
@name = project.path_with_namespace
- @repository_id = nil
+ @tag_name = 'master'
end
def fabricate!
@@ -31,23 +39,57 @@ module QA
def remove_via_api!
registry_repositories = project.registry_repositories
- if registry_repositories && !registry_repositories.empty?
- this_registry_repository = registry_repositories.find { |registry_repository| registry_repository[:path] == name }
-
- @repository_id = this_registry_repository[:id]
+ if registry_repositories && !registry_repositories.empty?
QA::Runtime::Logger.debug("Deleting registry '#{name}'")
super
end
end
def api_delete_path
- "/projects/#{project.id}/registry/repositories/#{@repository_id}"
+ "/projects/#{project.id}/registry/repositories/#{id}"
+ end
+
+ def api_delete_tag_path
+ "/projects/#{project.id}/registry/repositories/#{id}/tags/#{tag_name}"
end
def api_get_path
"/projects/#{project.id}/registry/repositories"
end
+
+ def api_get_tags_path
+ "/projects/#{project.id}/registry/repositories/#{id}/tags"
+ end
+
+ def has_tag?(tag_name)
+ response = get Runtime::API::Request.new(api_client, api_get_tags_path).url
+
+ raise ResourceNotFoundError, "Request returned (#{response.code}): `#{response}`." if response.code == HTTP_STATUS_NOT_FOUND
+
+ tag_list = parse_body(response)
+ tag_list.any? { |tag| tag[:name] == tag_name }
+ end
+
+ def has_no_tag?(tag_name)
+ response = get Runtime::API::Request.new(api_client, api_get_tags_path).url
+
+ raise ResourceNotFoundError, "Request returned (#{response.code}): `#{response}`." if response.code == HTTP_STATUS_NOT_FOUND
+
+ tag_list = parse_body(response)
+ tag_list.none? { |tag| tag[:name] == tag_name }
+ end
+
+ def delete_tag
+ QA::Runtime::Logger.debug("Deleting registry tag '#{tag_name}'")
+
+ request = Runtime::API::Request.new(api_client, api_delete_tag_path)
+ response = delete(request.url)
+
+ unless [HTTP_STATUS_NO_CONTENT, HTTP_STATUS_ACCEPTED, HTTP_STATUS_OK].include? response.code
+ raise ResourceNotDeletedError, "Resource at #{request.mask_url} could not be deleted (#{response.code}): `#{response}`."
+ end
+ end
end
end
end