forked from treehouse/mastodon
Fix N+1 at notification (#5752)
parent
08deec4c84
commit
53e95c4efc
|
@ -24,7 +24,7 @@ class Notification < ApplicationRecord
|
||||||
favourite: 'Favourite',
|
favourite: 'Favourite',
|
||||||
}.freeze
|
}.freeze
|
||||||
|
|
||||||
STATUS_INCLUDES = [:account, :stream_entry, :media_attachments, :tags, mentions: :account, reblog: [:stream_entry, :account, :media_attachments, :tags, mentions: :account]].freeze
|
STATUS_INCLUDES = [:account, :application, :stream_entry, :media_attachments, :tags, mentions: :account, reblog: [:stream_entry, :account, :application, :media_attachments, :tags, mentions: :account]].freeze
|
||||||
|
|
||||||
belongs_to :account
|
belongs_to :account
|
||||||
belongs_to :from_account, class_name: 'Account'
|
belongs_to :from_account, class_name: 'Account'
|
||||||
|
@ -55,9 +55,11 @@ class Notification < ApplicationRecord
|
||||||
def target_status
|
def target_status
|
||||||
case type
|
case type
|
||||||
when :reblog
|
when :reblog
|
||||||
activity&.reblog
|
status&.reblog
|
||||||
when :favourite, :mention
|
when :favourite
|
||||||
activity&.status
|
favourite&.status
|
||||||
|
when :mention
|
||||||
|
mention&.status
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -6,23 +6,18 @@ RSpec.describe Notification, type: :model do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#target_status' do
|
describe '#target_status' do
|
||||||
before do
|
let(:notification) { Fabricate(:notification, activity_type: type, activity: activity) }
|
||||||
allow(notification).to receive(:type).and_return(type)
|
let(:status) { Fabricate(:status) }
|
||||||
allow(notification).to receive(:activity).and_return(activity)
|
let(:reblog) { Fabricate(:status, reblog: status) }
|
||||||
end
|
let(:favourite) { Fabricate(:favourite, status: status) }
|
||||||
|
let(:mention) { Fabricate(:mention, status: status) }
|
||||||
let(:notification) { Fabricate(:notification) }
|
|
||||||
let(:status) { instance_double('Status') }
|
|
||||||
let(:favourite) { instance_double('Favourite') }
|
|
||||||
let(:mention) { instance_double('Mention') }
|
|
||||||
|
|
||||||
context 'type is :reblog' do
|
context 'type is :reblog' do
|
||||||
let(:type) { :reblog }
|
let(:type) { :reblog }
|
||||||
let(:activity) { status }
|
let(:activity) { reblog }
|
||||||
|
|
||||||
it 'calls activity.reblog' do
|
it 'returns status' do
|
||||||
expect(activity).to receive(:reblog)
|
expect(notification.target_status).to eq status
|
||||||
notification.target_status
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -30,9 +25,8 @@ RSpec.describe Notification, type: :model do
|
||||||
let(:type) { :favourite }
|
let(:type) { :favourite }
|
||||||
let(:activity) { favourite }
|
let(:activity) { favourite }
|
||||||
|
|
||||||
it 'calls activity.status' do
|
it 'returns status' do
|
||||||
expect(activity).to receive(:status)
|
expect(notification.target_status).to eq status
|
||||||
notification.target_status
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -40,9 +34,8 @@ RSpec.describe Notification, type: :model do
|
||||||
let(:type) { :mention }
|
let(:type) { :mention }
|
||||||
let(:activity) { mention }
|
let(:activity) { mention }
|
||||||
|
|
||||||
it 'calls activity.status' do
|
it 'returns status' do
|
||||||
expect(activity).to receive(:status)
|
expect(notification.target_status).to eq status
|
||||||
notification.target_status
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue