Skip to content

Commit

Permalink
Add shared example for RankedTrend concern (#33125)
Browse files Browse the repository at this point in the history
  • Loading branch information
mjankowski authored Dec 2, 2024
1 parent 75ecc6d commit 3cd3085
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 26 deletions.
15 changes: 2 additions & 13 deletions spec/models/preview_card_trend_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 3,9 @@
require 'rails_helper'

RSpec.describe PreviewCardTrend do
include_examples 'RankedTrend'

describe 'Associations' do
it { is_expected.to belong_to(:preview_card).required }
end

describe '.locales' do
before do
Fabricate :preview_card_trend, language: 'en'
Fabricate :preview_card_trend, language: 'en'
Fabricate :preview_card_trend, language: 'es'
end

it 'returns unique set of languages' do
expect(described_class.locales)
.to eq(['en', 'es'])
end
end
end
15 changes: 2 additions & 13 deletions spec/models/status_trend_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 3,10 @@
require 'rails_helper'

RSpec.describe StatusTrend do
include_examples 'RankedTrend'

describe 'Associations' do
it { is_expected.to belong_to(:account).required }
it { is_expected.to belong_to(:status).required }
end

describe '.locales' do
before do
Fabricate :status_trend, language: 'en'
Fabricate :status_trend, language: 'en'
Fabricate :status_trend, language: 'es'
end

it 'returns unique set of languages' do
expect(described_class.locales)
.to eq(['en', 'es'])
end
end
end
55 changes: 55 additions & 0 deletions spec/support/examples/models/concerns/ranked_trend.rb
Original file line number Diff line number Diff line change
@@ -0,0 1,55 @@
# frozen_string_literal: true

RSpec.shared_examples 'RankedTrend' do
describe 'Scopes' do
describe '.by_rank' do
let!(:lower_rank) { Fabricate factory_name, rank: 5 }
let!(:higher_rank) { Fabricate factory_name, rank: 50 }

it 'returns records ordered by rank' do
expect(described_class.by_rank)
.to eq([higher_rank, lower_rank])
end
end

describe '.ranked_below' do
let!(:low_rank) { Fabricate factory_name, rank: 5 }
let!(:med_rank) { Fabricate factory_name, rank: 50 }
let!(:high_rank) { Fabricate factory_name, rank: 500 }

it 'returns records ordered by rank' do
expect(described_class.ranked_below(100))
.to include(low_rank)
.and include(med_rank)
.and not_include(high_rank)
end
end
end

describe '.locales' do
before do
Fabricate.times 2, factory_name, language: 'en'
Fabricate factory_name, language: 'es'
end

it 'returns unique set of languages' do
expect(described_class.locales)
.to eq(['en', 'es'])
end
end

describe '.recalculate_ordered_rank' do
let!(:low_score) { Fabricate factory_name, score: 5, rank: 123 }
let!(:high_score) { Fabricate factory_name, score: 10, rank: 456 }

it 'ranks records based on their score' do
expect { described_class.recalculate_ordered_rank }
.to change { low_score.reload.rank }.to(2)
.and change { high_score.reload.rank }.to(1)
end
end

def factory_name
described_class.name.underscore.to_sym
end
end

0 comments on commit 3cd3085

Please sign in to comment.