Commit 37d2f721 authored by Illya Klymov's avatar Illya Klymov

Make group and project fields fullPath argument case-insensitive

- make full path loader case-insensitive

Changelog: fixed
parent 185676ce
...@@ -5,19 +5,20 @@ module Gitlab ...@@ -5,19 +5,20 @@ module Gitlab
module Loaders module Loaders
# Suitable for use to find resources that expose `where_full_path_in`, # Suitable for use to find resources that expose `where_full_path_in`,
# such as Project, Group, Namespace # such as Project, Group, Namespace
# full path is always converted to lowercase for case-insensitive results
class FullPathModelLoader class FullPathModelLoader
attr_reader :model_class, :full_path attr_reader :model_class, :full_path
def initialize(model_class, full_path) def initialize(model_class, full_path)
@model_class = model_class @model_class = model_class
@full_path = full_path @full_path = full_path.downcase
end end
def find def find
BatchLoader::GraphQL.for(full_path).batch(key: model_class) do |full_paths, loader, args| BatchLoader::GraphQL.for(full_path).batch(key: model_class) do |full_paths, loader, args|
# `with_route` avoids an N+1 calculating full_path # `with_route` avoids an N+1 calculating full_path
args[:key].where_full_path_in(full_paths).with_route.each do |model_instance| args[:key].where_full_path_in(full_paths).with_route.each do |model_instance|
loader.call(model_instance.full_path, model_instance) loader.call(model_instance.full_path.downcase, model_instance)
end end
end end
end end
......
...@@ -20,10 +20,15 @@ RSpec.describe Resolvers::GroupResolver do ...@@ -20,10 +20,15 @@ RSpec.describe Resolvers::GroupResolver do
end end
it 'resolves an unknown full_path to nil' do it 'resolves an unknown full_path to nil' do
result = batch_sync { resolve_group('unknown/project') } result = batch_sync { resolve_group('unknown/group') }
expect(result).to be_nil expect(result).to be_nil
end end
it 'treats group full path as case insensitive' do
result = batch_sync { resolve_group(group1.full_path.upcase) }
expect(result).to eq group1
end
end end
def resolve_group(full_path) def resolve_group(full_path)
......
...@@ -25,6 +25,11 @@ RSpec.describe Resolvers::ProjectResolver do ...@@ -25,6 +25,11 @@ RSpec.describe Resolvers::ProjectResolver do
expect(result).to be_nil expect(result).to be_nil
end end
it 'treats project full path as case insensitive' do
result = batch_sync { resolve_project(project1.full_path.upcase) }
expect(result).to eq project1
end
end end
it 'does not increase complexity depending on number of load limits' do it 'does not increase complexity depending on number of load limits' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment