diff --git a/app/lib/annual_report/archetype.rb b/app/lib/annual_report/archetype.rb index 41973294a62..2f73890869d 100644 --- a/app/lib/annual_report/archetype.rb +++ b/app/lib/annual_report/archetype.rb @@ -36,7 +36,7 @@ class AnnualReport::Archetype < AnnualReport::Source end def replies_count - @replies_count ||= report_statuses.where.not(in_reply_to_id: nil).not_replying_to_account(@account).count + @replies_count ||= report_statuses.only_replies.not_replying_to_account(@account).count end def standalone_count diff --git a/app/lib/annual_report/type_distribution.rb b/app/lib/annual_report/type_distribution.rb index 0534055c28e..0ef20ec5046 100644 --- a/app/lib/annual_report/type_distribution.rb +++ b/app/lib/annual_report/type_distribution.rb @@ -6,7 +6,7 @@ class AnnualReport::TypeDistribution < AnnualReport::Source type_distribution: { total: report_statuses.count, reblogs: report_statuses.only_reblogs.count, - replies: report_statuses.where.not(in_reply_to_id: nil).not_replying_to_account(@account).count, + replies: report_statuses.only_replies.not_replying_to_account(@account).count, standalone: report_statuses.without_replies.without_reblogs.count, }, } diff --git a/app/models/status.rb b/app/models/status.rb index e933c92cae0..5217e512a58 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -115,6 +115,7 @@ class Status < ApplicationRecord scope :with_accounts, ->(ids) { where(id: ids).includes(:account) } scope :without_replies, -> { not_reply.or(reply_to_account) } scope :not_reply, -> { where(reply: false) } + scope :only_replies, -> { where.not(in_reply_to_id: nil) } scope :only_reblogs, -> { where.not(reblog_of_id: nil) } scope :only_polls, -> { where.not(poll_id: nil) } scope :without_polls, -> { where(poll_id: nil) } diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb index e0a2c391046..56090d14ae8 100644 --- a/spec/models/status_spec.rb +++ b/spec/models/status_spec.rb @@ -376,6 +376,17 @@ RSpec.describe Status do end end + describe '.only_replies' do + let!(:status) { Fabricate :status } + let!(:replying_status) { Fabricate :status, thread: Fabricate(:status) } + + it 'returns the expected statuses' do + expect(described_class.only_replies) + .to include(replying_status) + .and not_include(status) + end + end + describe '.only_polls' do let!(:poll_status) { Fabricate :status, poll: Fabricate(:poll) } let!(:no_poll_status) { Fabricate :status }