Skip to content

Commit

Permalink
Fix ArgumentError when loading newer Private Mentions (mastodon#25399)
Browse files Browse the repository at this point in the history
  • Loading branch information
ClearlyClaire authored and IsabelaY committed Jul 6, 2023
1 parent a986f16 commit 069de32
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 11 deletions.
2 changes: 1 addition & 1 deletion app/controllers/api/v1/conversations_controller.rb
Expand Up @@ -45,7 +45,7 @@ def paginated_conversations
},
]
)
.to_a_paginated_by_id(limit_param(LIMIT), **params_slice(:max_id, :since_id, :min_id))
.to_a_paginated_by_id(limit_param(LIMIT), params_slice(:max_id, :since_id, :min_id))
end

def insert_pagination_headers
Expand Down
19 changes: 9 additions & 10 deletions app/models/account_conversation.rb
Expand Up @@ -42,22 +42,21 @@ def participant_accounts
end

class << self
def to_a_paginated_by_id(limit, min_id: nil, max_id: nil, since_id: nil, preload_participants: true)
def to_a_paginated_by_id(limit, options = {})
array = begin
if min_id
paginate_by_min_id(limit, min_id, max_id).reverse
if options[:min_id]
paginate_by_min_id(limit, options[:min_id], options[:max_id]).reverse
else
paginate_by_max_id(limit, max_id, since_id).to_a
paginate_by_max_id(limit, options[:max_id], options[:since_id]).to_a
end
end

if preload_participants
participant_ids = array.flat_map(&:participant_account_ids)
accounts_by_id = Account.where(id: participant_ids).index_by(&:id)
# Preload participants
participant_ids = array.flat_map(&:participant_account_ids)
accounts_by_id = Account.where(id: participant_ids).index_by(&:id)

array.each do |conversation|
conversation.participant_accounts = conversation.participant_account_ids.filter_map { |id| accounts_by_id[id] }
end
array.each do |conversation|
conversation.participant_accounts = conversation.participant_account_ids.filter_map { |id| accounts_by_id[id] }
end

array
Expand Down
18 changes: 18 additions & 0 deletions spec/controllers/api/v1/conversations_controller_spec.rb
Expand Up @@ -33,5 +33,23 @@
json = body_as_json
expect(json.size).to eq 1
end

context 'with since_id' do
context 'when requesting old posts' do
it 'returns conversations' do
get :index, params: { since_id: Mastodon::Snowflake.id_at(1.hour.ago, with_random: false) }
json = body_as_json
expect(json.size).to eq 1
end
end

context 'when requesting posts in the future' do
it 'returns no conversation' do
get :index, params: { since_id: Mastodon::Snowflake.id_at(1.hour.from_now, with_random: false) }
json = body_as_json
expect(json.size).to eq 0
end
end
end
end
end

0 comments on commit 069de32

Please sign in to comment.