Fix ArgumentError when loading newer Private Mentions (#25399)
This commit is contained in:
		
					parent
					
						
							
								bca649ba79
							
						
					
				
			
			
				commit
				
					
						ec59166844
					
				
			
		
					 3 changed files with 28 additions and 11 deletions
				
			
		|  | @ -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,23 +43,22 @@ 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 | ||||
|       # 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 | ||||
|       end | ||||
| 
 | ||||
|       array | ||||
|     end | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue