Fix ArgumentError when loading newer Private Mentions (#25399)
This commit is contained in:
		@@ -45,7 +45,7 @@ class Api::V1::ConversationsController < Api::BaseController
 | 
			
		||||
                           },
 | 
			
		||||
                         ]
 | 
			
		||||
                       )
 | 
			
		||||
                       .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
 | 
			
		||||
 
 | 
			
		||||
@@ -43,22 +43,21 @@ class AccountConversation < ApplicationRecord
 | 
			
		||||
  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
 | 
			
		||||
 
 | 
			
		||||
@@ -35,5 +35,23 @@ RSpec.describe Api::V1::ConversationsController do
 | 
			
		||||
      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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user