forked from mirrors/catstodon
Deduplicate IDs in relationships and familiar_followers APIs (#27982)
This commit is contained in:
parent
973597c6f1
commit
7877fcd83c
4 changed files with 31 additions and 6 deletions
|
@ -12,7 +12,7 @@ class Api::V1::Accounts::FamiliarFollowersController < Api::BaseController
|
|||
private
|
||||
|
||||
def set_accounts
|
||||
@accounts = Account.without_suspended.where(id: account_ids).select('id, hide_collections').index_by(&:id).values_at(*account_ids).compact
|
||||
@accounts = Account.without_suspended.where(id: account_ids).select('id, hide_collections')
|
||||
end
|
||||
|
||||
def familiar_followers
|
||||
|
|
|
@ -5,11 +5,8 @@ class Api::V1::Accounts::RelationshipsController < Api::BaseController
|
|||
before_action :require_user!
|
||||
|
||||
def index
|
||||
scope = Account.where(id: account_ids).select('id')
|
||||
scope.merge!(Account.without_suspended) unless truthy_param?(:with_suspended)
|
||||
# .where doesn't guarantee that our results are in the same order
|
||||
# we requested them, so return the "right" order to the requestor.
|
||||
@accounts = scope.index_by(&:id).values_at(*account_ids).compact
|
||||
@accounts = Account.where(id: account_ids).select('id')
|
||||
@accounts.merge!(Account.without_suspended) unless truthy_param?(:with_suspended)
|
||||
render json: @accounts, each_serializer: REST::RelationshipSerializer, relationships: relationships
|
||||
end
|
||||
|
||||
|
|
|
@ -19,5 +19,17 @@ describe Api::V1::Accounts::FamiliarFollowersController do
|
|||
|
||||
expect(response).to have_http_status(200)
|
||||
end
|
||||
|
||||
context 'when there are duplicate account IDs in the params' do
|
||||
let(:account_a) { Fabricate(:account) }
|
||||
let(:account_b) { Fabricate(:account) }
|
||||
|
||||
it 'removes duplicate account IDs from params' do
|
||||
account_ids = [account_a, account_b, account_b, account_a, account_a].map { |a| a.id.to_s }
|
||||
get :index, params: { id: account_ids }
|
||||
|
||||
expect(body_as_json.pluck(:id)).to eq [account_a.id.to_s, account_b.id.to_s]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -79,6 +79,22 @@ describe 'GET /api/v1/accounts/relationships' do
|
|||
end
|
||||
end
|
||||
|
||||
context 'when there are duplicate IDs in the params' do
|
||||
let(:params) { { id: [simon.id, lewis.id, lewis.id, lewis.id, simon.id] } }
|
||||
|
||||
it 'removes duplicate account IDs from params' do
|
||||
subject
|
||||
|
||||
expect(body_as_json)
|
||||
.to be_an(Enumerable)
|
||||
.and have_attributes(
|
||||
size: 2,
|
||||
first: include(simon_item),
|
||||
second: include(lewis_item)
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
def simon_item
|
||||
{
|
||||
id: simon.id.to_s,
|
||||
|
|
Loading…
Reference in a new issue