~cytrogen/masto-fe

ceb365c41950283f601058e38e779565eca43b31 — Claire 2 years ago 4e55001
Fix boosts of local users being filtered in account timelines (#27204)

M app/lib/account_statuses_filter.rb => app/lib/account_statuses_filter.rb +5 -1
@@ 60,8 60,12 @@ class AccountStatusesFilter
      .where(reblog_of_id: nil)
      .or(
        scope
          # This is basically `Status.not_domain_blocked_by_account(current_account)`
          # and `Status.not_excluded_by_account(current_account)` but on the
          # `reblog` association. Unfortunately, there seem to be no clean way
          # to re-use those scopes in our case.
          .where(reblog: { accounts: { domain: nil } }).or(scope.where.not(reblog: { accounts: { domain: current_account.excluded_from_timeline_domains } }))
          .where.not(reblog: { account_id: current_account.excluded_from_timeline_account_ids })
          .where.not(reblog: { accounts: { domain: current_account.excluded_from_timeline_domains } })
      )
  end


R spec/models/account_statuses_filter_spec.rb => spec/lib/account_statuses_filter_spec.rb +15 -1
@@ 202,7 202,7 @@ RSpec.describe AccountStatusesFilter do
      context 'when blocking a reblogged domain' do
        let(:other_account) { Fabricate(:account, domain: 'example.com') }
        let(:reblogging_status) { Fabricate(:status, account: other_account) }
        let(:reblog) { Fabricate(:status, account: account, visibility: 'public', reblog: reblogging_status) }
        let!(:reblog) { Fabricate(:status, account: account, visibility: 'public', reblog: reblogging_status) }

        before do
          current_account.block_domain!(other_account.domain)


@@ 213,6 213,20 @@ RSpec.describe AccountStatusesFilter do
        end
      end

      context 'when blocking an unrelated domain' do
        let(:other_account) { Fabricate(:account, domain: nil) }
        let(:reblogging_status) { Fabricate(:status, account: other_account, visibility: 'public') }
        let!(:reblog) { Fabricate(:status, account: account, visibility: 'public', reblog: reblogging_status) }

        before do
          current_account.block_domain!('example.com')
        end

        it 'returns the reblog from the non-blocked domain' do
          expect(subject.results.pluck(:id)).to include(reblog.id)
        end
      end

      context 'when muting a reblogged account' do
        let(:reblog) { status_with_reblog!('public') }