Skip to content
This repository was archived by the owner on Jun 2, 2021. It is now read-only.

Commit f3ac783

Browse files
reidmitmonamohebbi
andcommitted
Fix usernames sometimes not appearing when listing users
* Previously, this endpoint would fetch all of the usernames for the users specified by the request regardless of pagination * Changed pagination limit in internal UAA client to be able to view all resources requested on a single page [#172806463] Co-authored-by: Reid Mitchell <rmitchell@pivotal.io> Co-authored-by: Mona Mohebbi <mmohebbi@pivotal.io>
1 parent 81a6441 commit f3ac783

File tree

3 files changed

+11
-9
lines changed

3 files changed

+11
-9
lines changed

app/controllers/v3/users_controller.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@ def index
1313
unprocessable!(message.errors.full_messages) unless message.valid?
1414

1515
users = fetch_readable_users(message)
16-
user_guids = users.map(&:guid)
16+
17+
paginated_result = SequelPaginator.new.get_page(users, message.try(:pagination_options))
18+
user_guids = paginated_result.records.map(&:guid)
1719

1820
render status: :ok, json: Presenters::V3::PaginatedListPresenter.new(
1921
presenter: Presenters::V3::UserPresenter,
20-
paginated_result: SequelPaginator.new.get_page(users, message.try(:pagination_options)),
22+
paginated_result: paginated_result,
2123
path: '/v3/users',
2224
message: message,
2325
extra_presenter_args: { uaa_users: User.uaa_users_info(user_guids) },

lib/cloud_controller/uaa/uaa_client.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ def fetch_users(user_ids)
118118
return {} unless user_ids.present?
119119

120120
filter_string = user_ids.map { |user_id| %(id eq "#{user_id}") }.join(' or ')
121-
results = query(:user_id, filter: filter_string)
121+
results = query(:user_id, filter: filter_string, count: user_ids.length)
122122

123123
results['resources'].each_with_object({}) do |resource, results_hash|
124124
results_hash[resource['id']] = resource

spec/unit/lib/uaa/uaa_client_spec.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ module VCAP::CloudController
168168
'totalresults' => 2 }
169169

170170
WebMock::API.stub_request(:get, "#{url}/ids/Users").
171-
with(query: { 'filter' => 'id eq "111" or id eq "222"' }).
171+
with(query: { 'filter' => 'id eq "111" or id eq "222"', 'count' => 2 }).
172172
to_return(
173173
status: 200,
174174
headers: { 'content-type' => 'application/json' },
@@ -229,14 +229,14 @@ module VCAP::CloudController
229229
'totalresults' => 2 }
230230

231231
WebMock::API.stub_request(:get, "#{url}/ids/Users").
232-
with(query: { 'filter' => 'id eq "111" or id eq "222"' }, headers: { 'Authorization' => 'bearer STUFF' }).
232+
with(query: { 'filter' => 'id eq "111" or id eq "222"', 'count' => 2 }, headers: { 'Authorization' => 'bearer STUFF' }).
233233
to_return(
234234
status: 200,
235235
headers: { 'content-type' => 'application/json' },
236236
body: response_body.to_json)
237237

238238
WebMock::API.stub_request(:get, "#{url}/ids/Users").
239-
with(query: { 'filter' => 'id eq "111" or id eq "222"' }, headers: { 'Authorization' => 'bearer invalid' }).
239+
with(query: { 'filter' => 'id eq "111" or id eq "222"', 'count' => 2 }, headers: { 'Authorization' => 'bearer invalid' }).
240240
to_return(
241241
status: 403,
242242
headers: { 'content-type' => 'application/json' },
@@ -277,7 +277,7 @@ module VCAP::CloudController
277277
'totalresults' => 2 }
278278

279279
WebMock::API.stub_request(:get, "#{url}/ids/Users").
280-
with(query: { 'filter' => 'id eq "111" or id eq "222"' }).
280+
with(query: { 'filter' => 'id eq "111" or id eq "222"', 'count' => 2 }).
281281
to_return(
282282
status: 200,
283283
headers: { 'content-type' => 'application/json' },
@@ -338,14 +338,14 @@ module VCAP::CloudController
338338
'totalresults' => 2 }
339339

340340
WebMock::API.stub_request(:get, "#{url}/ids/Users").
341-
with(query: { 'filter' => 'id eq "111" or id eq "222"' }, headers: { 'Authorization' => 'bearer STUFF' }).
341+
with(query: { 'filter' => 'id eq "111" or id eq "222"', 'count' => 2 }, headers: { 'Authorization' => 'bearer STUFF' }).
342342
to_return(
343343
status: 200,
344344
headers: { 'content-type' => 'application/json' },
345345
body: response_body.to_json)
346346

347347
WebMock::API.stub_request(:get, "#{url}/ids/Users").
348-
with(query: { 'filter' => 'id eq "111" or id eq "222"' }, headers: { 'Authorization' => 'bearer invalid' }).
348+
with(query: { 'filter' => 'id eq "111" or id eq "222"', 'count' => 2 }, headers: { 'Authorization' => 'bearer invalid' }).
349349
to_return(
350350
status: 403,
351351
headers: { 'content-type' => 'application/json' },

0 commit comments

Comments
 (0)