Fix cached posts including stale stats (#26409)
This commit is contained in:
		
							parent
							
								
									3ed2bf92d0
								
							
						
					
					
						commit
						60b9fa641d
					
				|  | @ -367,13 +367,25 @@ class Status < ApplicationRecord | |||
| 
 | ||||
|       account_ids.uniq! | ||||
| 
 | ||||
|       status_ids = cached_items.map { |item| item.reblog? ? item.reblog_of_id : item.id }.uniq | ||||
| 
 | ||||
|       return if account_ids.empty? | ||||
| 
 | ||||
|       accounts = Account.where(id: account_ids).includes(:account_stat, :user).index_by(&:id) | ||||
| 
 | ||||
|       status_stats = StatusStat.where(status_id: status_ids).index_by(&:status_id) | ||||
| 
 | ||||
|       cached_items.each do |item| | ||||
|         item.account = accounts[item.account_id] | ||||
|         item.reblog.account = accounts[item.reblog.account_id] if item.reblog? | ||||
| 
 | ||||
|         if item.reblog? | ||||
|           status_stat = status_stats[item.reblog.id] | ||||
|           item.reblog.status_stat = status_stat if status_stat.present? | ||||
|         else | ||||
|           status_stat = status_stats[item.id] | ||||
|           item.status_stat = status_stat if status_stat.present? | ||||
|         end | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|  |  | |||
|  | @ -13,12 +13,17 @@ RSpec.describe CacheConcern do | |||
|     def empty_relation | ||||
|       render plain: cache_collection(Status.none, Status).size | ||||
|     end | ||||
| 
 | ||||
|     def account_statuses_favourites | ||||
|       render plain: cache_collection(Status.where(account_id: params[:id]), Status).map(&:favourites_count) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   before do | ||||
|     routes.draw do | ||||
|       get  'empty_array' => 'anonymous#empty_array' | ||||
|       post 'empty_relation' => 'anonymous#empty_relation' | ||||
|       get 'empty_array' => 'anonymous#empty_array' | ||||
|       get 'empty_relation' => 'anonymous#empty_relation' | ||||
|       get 'account_statuses_favourites' => 'anonymous#account_statuses_favourites' | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|  | @ -36,5 +41,20 @@ RSpec.describe CacheConcern do | |||
|         expect(response.body).to eq '0' | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     context 'when given a collection of statuses' do | ||||
|       let!(:account) { Fabricate(:account) } | ||||
|       let!(:status)  { Fabricate(:status, account: account) } | ||||
| 
 | ||||
|       it 'correctly updates with new interactions' do | ||||
|         get :account_statuses_favourites, params: { id: account.id } | ||||
|         expect(response.body).to eq '[0]' | ||||
| 
 | ||||
|         FavouriteService.new.call(account, status) | ||||
| 
 | ||||
|         get :account_statuses_favourites, params: { id: account.id } | ||||
|         expect(response.body).to eq '[1]' | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue