summaryrefslogtreecommitdiff
path: root/spec/lib/gitlab/graphql/pagination/keyset/query_builder_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/lib/gitlab/graphql/pagination/keyset/query_builder_spec.rb')
-rw-r--r--spec/lib/gitlab/graphql/pagination/keyset/query_builder_spec.rb37
1 files changed, 37 insertions, 0 deletions
diff --git a/spec/lib/gitlab/graphql/pagination/keyset/query_builder_spec.rb b/spec/lib/gitlab/graphql/pagination/keyset/query_builder_spec.rb
index 31c02fd43e8..c7e7db4d535 100644
--- a/spec/lib/gitlab/graphql/pagination/keyset/query_builder_spec.rb
+++ b/spec/lib/gitlab/graphql/pagination/keyset/query_builder_spec.rb
@@ -131,5 +131,42 @@ RSpec.describe Gitlab::Graphql::Pagination::Keyset::QueryBuilder do
end
end
end
+
+ context 'when sorting using SIMILARITY' do
+ let(:relation) { Project.sorted_by_similarity_desc('test', include_in_select: true) }
+ let(:arel_table) { Project.arel_table }
+ let(:decoded_cursor) { { 'similarity' => 0.5, 'id' => 100 } }
+ let(:similarity_sql) do
+ [
+ '(SIMILARITY(COALESCE("projects"."path", \'\'), \'test\') * CAST(\'1\' AS numeric))',
+ '(SIMILARITY(COALESCE("projects"."name", \'\'), \'test\') * CAST(\'0.7\' AS numeric))',
+ '(SIMILARITY(COALESCE("projects"."description", \'\'), \'test\') * CAST(\'0.2\' AS numeric))'
+ ].join(' + ')
+ end
+
+ context 'when no values are nil' do
+ context 'when :after' do
+ it 'generates the correct condition' do
+ conditions = builder.conditions.gsub(/\s+/, ' ')
+
+ expect(conditions).to include "(#{similarity_sql} < 0.5)"
+ expect(conditions).to include '"projects"."id" < 100'
+ expect(conditions).to include "OR (#{similarity_sql} IS NULL)"
+ end
+ end
+
+ context 'when :before' do
+ let(:before_or_after) { :before }
+
+ it 'generates the correct condition' do
+ conditions = builder.conditions.gsub(/\s+/, ' ')
+
+ expect(conditions).to include "(#{similarity_sql} > 0.5)"
+ expect(conditions).to include '"projects"."id" > 100'
+ expect(conditions).to include "OR ( #{similarity_sql} = 0.5"
+ end
+ end
+ end
+ end
end
end