Add restrictions on which quote posts can trend (#35507)
This commit is contained in:
		@@ -90,14 +90,28 @@ class Trends::Statuses < Trends::Base
 | 
			
		||||
 | 
			
		||||
  def eligible?(status)
 | 
			
		||||
    status.created_at.past? &&
 | 
			
		||||
      status.public_visibility? &&
 | 
			
		||||
      status.account.discoverable? &&
 | 
			
		||||
      !status.account.silenced? &&
 | 
			
		||||
      !status.account.sensitized? &&
 | 
			
		||||
      status.spoiler_text.blank? &&
 | 
			
		||||
      !status.sensitive? &&
 | 
			
		||||
      opted_into_trends?(status) &&
 | 
			
		||||
      !sensitive_content?(status) &&
 | 
			
		||||
      !status.reply? &&
 | 
			
		||||
      valid_locale?(status.language)
 | 
			
		||||
      valid_locale?(status.language) &&
 | 
			
		||||
      (status.quote.nil? || trendable_quote?(status.quote))
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def opted_into_trends?(status)
 | 
			
		||||
    status.public_visibility? &&
 | 
			
		||||
      status.account.discoverable? &&
 | 
			
		||||
      !status.account.silenced?
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def sensitive_content?(status)
 | 
			
		||||
    status.account.sensitized? || status.spoiler_text.present? || status.sensitive?
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def trendable_quote?(quote)
 | 
			
		||||
    quote.acceptable? &&
 | 
			
		||||
      quote.quoted_status.present? &&
 | 
			
		||||
      opted_into_trends?(quote.quoted_status) &&
 | 
			
		||||
      !sensitive_content?(quote.quoted_status)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def calculate_scores(statuses, at_time)
 | 
			
		||||
 
 | 
			
		||||
@@ -111,12 +111,16 @@ RSpec.describe Trends::Statuses do
 | 
			
		||||
    let!(:yesterday) { today - 1.day }
 | 
			
		||||
 | 
			
		||||
    let!(:status_foo) { Fabricate(:status, text: 'Foo', language: 'en', trendable: true, created_at: yesterday) }
 | 
			
		||||
    let!(:status_bar) { Fabricate(:status, text: 'Bar', language: 'en', trendable: true, created_at: today) }
 | 
			
		||||
    let!(:status_bar) { Fabricate(:status, text: 'Bar', language: 'en', trendable: true, created_at: today, quote: Quote.new(state: :accepted, quoted_status: status_foo)) }
 | 
			
		||||
    let!(:status_baz) { Fabricate(:status, text: 'Baz', language: 'en', trendable: true, created_at: today) }
 | 
			
		||||
    let!(:untrendable) { Fabricate(:status, text: 'Untrendable', language: 'en', trendable: true, visibility: :unlisted) }
 | 
			
		||||
    let!(:untrendable_quote) { Fabricate(:status, text: 'Untrendable quote!', language: 'en', trendable: true, created_at: today, quote: Quote.new(state: :accepted, quoted_status: untrendable)) }
 | 
			
		||||
 | 
			
		||||
    before do
 | 
			
		||||
      default_threshold_value.times { reblog(status_foo, today) }
 | 
			
		||||
      default_threshold_value.times { reblog(status_bar, today) }
 | 
			
		||||
      default_threshold_value.times { reblog(untrendable, today) }
 | 
			
		||||
      default_threshold_value.times { reblog(untrendable_quote, today) }
 | 
			
		||||
      (default_threshold_value - 1).times { reblog(status_baz, today) }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
@@ -129,7 +133,7 @@ RSpec.describe Trends::Statuses do
 | 
			
		||||
        results = subject.query.limit(10).to_a
 | 
			
		||||
 | 
			
		||||
        expect(results).to eq [status_bar, status_foo]
 | 
			
		||||
        expect(results).to_not include(status_baz)
 | 
			
		||||
        expect(results).to_not include(status_baz, untrendable, untrendable_quote)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user