Skip to content

Commit c4904d5

Browse files
committed
Merge branch '41673-blank-query-members-api' into 'master'
Resolve "Project/#/Members?query= blank causes 500 error" Closes #41673 See merge request gitlab-org/gitlab-ce!16235
2 parents 834dee6 + 580fa6b commit c4904d5

File tree

7 files changed

+47
-2
lines changed

7 files changed

+47
-2
lines changed

app/models/user.rb

+4
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,8 @@ def filter(filter_name)
318318
#
319319
# Returns an ActiveRecord::Relation.
320320
def search(query)
321+
return none if query.blank?
322+
321323
query = query.downcase
322324

323325
order = <<~SQL
@@ -341,6 +343,8 @@ def search(query)
341343
# This method uses ILIKE on PostgreSQL and LIKE on MySQL.
342344

343345
def search_with_secondary_emails(query)
346+
return none if query.blank?
347+
344348
query = query.downcase
345349

346350
email_table = Email.arel_table
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
title: Fix error on empty query for Members API
3+
merge_request: 16235
4+
author:
5+
type: fixed

lib/api/members.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class Members < Grape::API
2222
source = find_source(source_type, params[:id])
2323

2424
users = source.users
25-
users = users.merge(User.search(params[:query])) if params[:query]
25+
users = users.merge(User.search(params[:query])) if params[:query].present?
2626

2727
present paginate(users), with: Entities::Member, source: source
2828
end

lib/api/v3/members.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class Members < Grape::API
2323
source = find_source(source_type, params[:id])
2424

2525
users = source.users
26-
users = users.merge(User.search(params[:query])) if params[:query]
26+
users = users.merge(User.search(params[:query])) if params[:query].present?
2727

2828
present paginate(users), with: ::API::Entities::Member, source: source
2929
end

spec/models/user_spec.rb

+16
Original file line numberDiff line numberDiff line change
@@ -966,6 +966,14 @@
966966
expect(described_class.search(user3.username.upcase)).to eq([user3])
967967
end
968968
end
969+
970+
it 'returns no matches for an empty string' do
971+
expect(described_class.search('')).to be_empty
972+
end
973+
974+
it 'returns no matches for nil' do
975+
expect(described_class.search(nil)).to be_empty
976+
end
969977
end
970978

971979
describe '.search_with_secondary_emails' do
@@ -1020,6 +1028,14 @@
10201028
it 'does not return users with a matching part of secondary email' do
10211029
expect(search_with_secondary_emails(email.email[1..4])).not_to include([email.user])
10221030
end
1031+
1032+
it 'returns no matches for an empty string' do
1033+
expect(search_with_secondary_emails('')).to be_empty
1034+
end
1035+
1036+
it 'returns no matches for nil' do
1037+
expect(search_with_secondary_emails(nil)).to be_empty
1038+
end
10231039
end
10241040

10251041
describe '.find_by_ssh_key_id' do

spec/requests/api/members_spec.rb

+10
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,16 @@
6565
expect(json_response.count).to eq(1)
6666
expect(json_response.first['username']).to eq(master.username)
6767
end
68+
69+
it 'finds all members with no query specified' do
70+
get api("/#{source_type.pluralize}/#{source.id}/members", developer), query: ''
71+
72+
expect(response).to have_gitlab_http_status(200)
73+
expect(response).to include_pagination_headers
74+
expect(json_response).to be_an Array
75+
expect(json_response.count).to eq(2)
76+
expect(json_response.map { |u| u['id'] }).to match_array [master.id, developer.id]
77+
end
6878
end
6979
end
7080

spec/requests/api/v3/members_spec.rb

+10
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,16 @@
5858
expect(json_response.count).to eq(1)
5959
expect(json_response.first['username']).to eq(master.username)
6060
end
61+
62+
it 'finds all members with no query specified' do
63+
get v3_api("/#{source_type.pluralize}/#{source.id}/members", developer), query: ''
64+
65+
expect(response).to have_gitlab_http_status(200)
66+
expect(response).to include_pagination_headers
67+
expect(json_response).to be_an Array
68+
expect(json_response.count).to eq(2)
69+
expect(json_response.map { |u| u['id'] }).to match_array [master.id, developer.id]
70+
end
6171
end
6272
end
6373

0 commit comments

Comments
 (0)