Add reviewed and unreviewed scopes to Reviewable model concern (#31988)
				
					
				
			This commit is contained in:
		@@ -3,6 +3,11 @@
 | 
			
		||||
module Reviewable
 | 
			
		||||
  extend ActiveSupport::Concern
 | 
			
		||||
 | 
			
		||||
  included do
 | 
			
		||||
    scope :reviewed, -> { where.not(reviewed_at: nil) }
 | 
			
		||||
    scope :unreviewed, -> { where(reviewed_at: nil) }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def requires_review?
 | 
			
		||||
    reviewed_at.nil?
 | 
			
		||||
  end
 | 
			
		||||
 
 | 
			
		||||
@@ -34,8 +34,6 @@ class PreviewCardProvider < ApplicationRecord
 | 
			
		||||
 | 
			
		||||
  scope :trendable, -> { where(trendable: true) }
 | 
			
		||||
  scope :not_trendable, -> { where(trendable: false) }
 | 
			
		||||
  scope :reviewed, -> { where.not(reviewed_at: nil) }
 | 
			
		||||
  scope :pending_review, -> { where(reviewed_at: nil) }
 | 
			
		||||
 | 
			
		||||
  def self.matching_domain(domain)
 | 
			
		||||
    segments = domain.split('.')
 | 
			
		||||
 
 | 
			
		||||
@@ -50,8 +50,6 @@ class Tag < ApplicationRecord
 | 
			
		||||
  validate :validate_name_change, if: -> { !new_record? && name_changed? }
 | 
			
		||||
  validate :validate_display_name_change, if: -> { !new_record? && display_name_changed? }
 | 
			
		||||
 | 
			
		||||
  scope :reviewed, -> { where.not(reviewed_at: nil) }
 | 
			
		||||
  scope :unreviewed, -> { where(reviewed_at: nil) }
 | 
			
		||||
  scope :pending_review, -> { unreviewed.where.not(requested_review_at: nil) }
 | 
			
		||||
  scope :usable, -> { where(usable: [true, nil]) }
 | 
			
		||||
  scope :not_usable, -> { where(usable: false) }
 | 
			
		||||
@@ -127,7 +125,7 @@ class Tag < ApplicationRecord
 | 
			
		||||
 | 
			
		||||
      query = Tag.matches_name(stripped_term)
 | 
			
		||||
      query = query.merge(Tag.listable) if options[:exclude_unlistable]
 | 
			
		||||
      query = query.merge(matching_name(stripped_term).or(where.not(reviewed_at: nil))) if options[:exclude_unreviewed]
 | 
			
		||||
      query = query.merge(matching_name(stripped_term).or(reviewed)) if options[:exclude_unreviewed]
 | 
			
		||||
 | 
			
		||||
      query.order(Arel.sql('length(name) ASC, name ASC'))
 | 
			
		||||
           .limit(limit)
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,7 @@ class Trends::PreviewCardProviderFilter
 | 
			
		||||
    when 'rejected'
 | 
			
		||||
      PreviewCardProvider.not_trendable
 | 
			
		||||
    when 'pending_review'
 | 
			
		||||
      PreviewCardProvider.pending_review
 | 
			
		||||
      PreviewCardProvider.unreviewed
 | 
			
		||||
    else
 | 
			
		||||
      raise Mastodon::InvalidParameterError, "Unknown status: #{value}"
 | 
			
		||||
    end
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
      %li= filter_link_to t('generic.all'), status: nil
 | 
			
		||||
      %li= filter_link_to t('admin.trends.approved'), status: 'approved'
 | 
			
		||||
      %li= filter_link_to t('admin.trends.rejected'), status: 'rejected'
 | 
			
		||||
      %li= filter_link_to safe_join([t('admin.accounts.moderation.pending'), "(#{PreviewCardProvider.pending_review.count})"], ' '), status: 'pending_review'
 | 
			
		||||
      %li= filter_link_to safe_join([t('admin.accounts.moderation.pending'), "(#{PreviewCardProvider.unreviewed.count})"], ' '), status: 'pending_review'
 | 
			
		||||
  .back-link
 | 
			
		||||
    = link_to admin_trends_links_path do
 | 
			
		||||
      = material_symbol 'chevron_left'
 | 
			
		||||
 
 | 
			
		||||
@@ -24,21 +24,5 @@ RSpec.describe PreviewCardProvider do
 | 
			
		||||
        expect(results).to eq([not_trendable_and_not_reviewed])
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    describe 'reviewed' do
 | 
			
		||||
      it 'returns the relevant records' do
 | 
			
		||||
        results = described_class.reviewed
 | 
			
		||||
 | 
			
		||||
        expect(results).to eq([trendable_and_reviewed])
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    describe 'pending_review' do
 | 
			
		||||
      it 'returns the relevant records' do
 | 
			
		||||
        results = described_class.pending_review
 | 
			
		||||
 | 
			
		||||
        expect(results).to eq([not_trendable_and_not_reviewed])
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,31 @@ RSpec.shared_examples 'Reviewable' do
 | 
			
		||||
  let(:reviewed_at) { nil }
 | 
			
		||||
  let(:requested_review_at) { nil }
 | 
			
		||||
 | 
			
		||||
  describe 'Scopes' do
 | 
			
		||||
    let!(:reviewed_record) { Fabricate factory_name, reviewed_at: 10.days.ago }
 | 
			
		||||
    let!(:un_reviewed_record) { Fabricate factory_name, reviewed_at: nil }
 | 
			
		||||
 | 
			
		||||
    describe '.reviewed' do
 | 
			
		||||
      it 'returns reviewed records' do
 | 
			
		||||
        expect(described_class.reviewed)
 | 
			
		||||
          .to include(reviewed_record)
 | 
			
		||||
          .and not_include(un_reviewed_record)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    describe '.unreviewed' do
 | 
			
		||||
      it 'returns non reviewed records' do
 | 
			
		||||
        expect(described_class.unreviewed)
 | 
			
		||||
          .to include(un_reviewed_record)
 | 
			
		||||
          .and not_include(reviewed_record)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def factory_name
 | 
			
		||||
      described_class.name.underscore.to_sym
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe '#requires_review?' do
 | 
			
		||||
    it { is_expected.to be_requires_review }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user