Use in_order_of with filter: false in AccountSummary.localized (#33446)

This commit is contained in:
Matt Jankowski 2025-01-06 03:18:05 -05:00 committed by GitHub
parent 612d6182e4
commit 08dd11f8d4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 27 additions and 1 deletions

View File

@ -17,6 +17,6 @@ class AccountSummary < ApplicationRecord
has_many :follow_recommendation_suppressions, primary_key: :account_id, foreign_key: :account_id, inverse_of: false, dependent: nil has_many :follow_recommendation_suppressions, primary_key: :account_id, foreign_key: :account_id, inverse_of: false, dependent: nil
scope :safe, -> { where(sensitive: false) } scope :safe, -> { where(sensitive: false) }
scope :localized, ->(locale) { order(Arel::Nodes::Case.new.when(arel_table[:language].eq(locale)).then(1).else(0).desc) } scope :localized, ->(locale) { in_order_of(:language, [locale], filter: false) }
scope :filtered, -> { where.missing(:follow_recommendation_suppressions) } scope :filtered, -> { where.missing(:follow_recommendation_suppressions) }
end end

View File

@ -0,0 +1,26 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe AccountSummary do
describe 'Scopes' do
describe '.localized' do
let(:first) { Fabricate :account }
let(:last) { Fabricate :account }
before do
Fabricate :status, account: first, language: 'en'
Fabricate :status, account: last, language: 'es'
described_class.refresh
end
it 'returns records in order of language' do
expect(described_class.localized('en'))
.to contain_exactly(
have_attributes(account_id: first.id, language: 'en'),
have_attributes(account_id: last.id, language: 'es')
)
end
end
end
end