From 042d11edfe85ffe2f5a05f95f05d3184d4d5da5b Mon Sep 17 00:00:00 2001 From: "Adie (she/her)" <avpfestin@gitlab.com> Date: Tue, 7 May 2024 16:06:18 +0000 Subject: [PATCH] Allow additional parameter: published_at for sorting There is a new sorting option `published_at` and `-published_at` in the container repository details API so we are allowing that as an option. Changelog: added --- .../container_repository_tags_resolver.rb | 10 ++--- .../container_repository_tags_sort_enum.rb | 4 ++ doc/api/graphql/reference/index.md | 2 + ...container_repository_tags_resolver_spec.rb | 42 ++++++++++++------- ...ntainer_respository_tags_sort_enum_spec.rb | 2 +- 5 files changed, 39 insertions(+), 21 deletions(-) diff --git a/app/graphql/resolvers/container_repository_tags_resolver.rb b/app/graphql/resolvers/container_repository_tags_resolver.rb index abfd30bcc4c53..46547a0d0b433 100644 --- a/app/graphql/resolvers/container_repository_tags_resolver.rb +++ b/app/graphql/resolvers/container_repository_tags_resolver.rb @@ -72,13 +72,13 @@ def parse_pagination_cursor(result, direction) query_params[key]&.first end - def map_sort_field(sort) - return unless sort + def map_sort_field(sort_value) + return if sort_value.blank? - sort_field, direction = sort.to_s.split('_') - return sort_field if direction == 'asc' + sort = sort_value.to_s.gsub(/_(desc|asc)$/, '') + sort = "-#{sort}" if sort_value.end_with?('_desc') - "-#{sort_field}" + sort end def sort_tags(to_be_sorted, sort) diff --git a/app/graphql/types/container_repository_tags_sort_enum.rb b/app/graphql/types/container_repository_tags_sort_enum.rb index 253cffd9a8c4b..5128ceb737210 100644 --- a/app/graphql/types/container_repository_tags_sort_enum.rb +++ b/app/graphql/types/container_repository_tags_sort_enum.rb @@ -7,5 +7,9 @@ class ContainerRepositoryTagsSortEnum < BaseEnum value 'NAME_ASC', 'Ordered by name in ascending order.', value: :name_asc value 'NAME_DESC', 'Ordered by name in descending order.', value: :name_desc + value 'PUBLISHED_AT_ASC', + 'Ordered by published_at in ascending order. Only available for GitLab.com.', value: :published_at_asc + value 'PUBLISHED_AT_DESC', + 'Ordered by published_at in descending order. Only available for GitLab.com.', value: :published_at_desc end end diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md index 77573a3c1642d..ce7df3ec64255 100644 --- a/doc/api/graphql/reference/index.md +++ b/doc/api/graphql/reference/index.md @@ -32728,6 +32728,8 @@ Values for sorting tags. | ----- | ----------- | | <a id="containerrepositorytagsortname_asc"></a>`NAME_ASC` | Ordered by name in ascending order. | | <a id="containerrepositorytagsortname_desc"></a>`NAME_DESC` | Ordered by name in descending order. | +| <a id="containerrepositorytagsortpublished_at_asc"></a>`PUBLISHED_AT_ASC` | Ordered by published_at in ascending order. Only available for GitLab.com. | +| <a id="containerrepositorytagsortpublished_at_desc"></a>`PUBLISHED_AT_DESC` | Ordered by published_at in descending order. Only available for GitLab.com. | ### `CustomerRelationsContactState` diff --git a/spec/graphql/resolvers/container_repository_tags_resolver_spec.rb b/spec/graphql/resolvers/container_repository_tags_resolver_spec.rb index 6490cf53aec63..aaa858498804c 100644 --- a/spec/graphql/resolvers/container_repository_tags_resolver_spec.rb +++ b/spec/graphql/resolvers/container_repository_tags_resolver_spec.rb @@ -83,27 +83,39 @@ context 'with parameters' do using RSpec::Parameterized::TableSyntax - where(:before, :after, :sort, :name, :first, :last, :sort_value, :referrers, :referrer_type) do - nil | nil | 'NAME_DESC' | '' | 10 | nil | '-name' | nil | nil - 'bb' | nil | 'NAME_ASC' | 'a' | nil | 5 | 'name' | false | nil - nil | 'aa' | 'NAME_DESC' | 'a' | 10 | nil | '-name' | true | 'application/example' + where(:referrers, :sort_string, :sort_value) do + nil | nil | nil + true | nil | nil + false | nil | nil + nil | 'NAME_ASC' | 'name' + nil | 'NAME_DESC' | '-name' + nil | 'PUBLISHED_AT_ASC' | 'published_at' + nil | 'PUBLISHED_AT_DESC' | '-published_at' end - with_them do - let(:args) do - { before: before, after: after, sort: sort, name: name, first: first, - last: last, referrers: referrers, referrer_type: referrer_type }.compact - end + let(:args) do + { + before: 'abc', + after: 'xyz', + sort: sort_string, + name: 'tag1', + first: 5, + last: 0, + referrers: referrers, + referrer_type: 'application/example' + } + end - it 'calls ContainerRepository#tags_page with correct parameters' do + with_them do + it 'calls ContainerRepository#tags_page with the correct parameters' do expect(repository).to receive(:tags_page).with( - before: before, - last: after, + before: 'abc', + last: 'xyz', sort: sort_value, - name: name, - page_size: [first, last].map(&:to_i).max, + name: 'tag1', + page_size: 5, referrers: referrers, - referrer_type: referrer_type + referrer_type: 'application/example' ) resolver(args) diff --git a/spec/graphql/types/container_respository_tags_sort_enum_spec.rb b/spec/graphql/types/container_respository_tags_sort_enum_spec.rb index b464037d8d96b..cfc44f6e99269 100644 --- a/spec/graphql/types/container_respository_tags_sort_enum_spec.rb +++ b/spec/graphql/types/container_respository_tags_sort_enum_spec.rb @@ -7,7 +7,7 @@ it 'exposes all the existing issue sort values' do expect(described_class.values.keys).to include( - *%w[NAME_ASC NAME_DESC] + *%w[NAME_ASC NAME_DESC PUBLISHED_AT_ASC PUBLISHED_AT_DESC] ) end end -- GitLab