43 行
1.6 KiB
Ruby
43 行
1.6 KiB
Ruby
require 'rails_helper'
|
|
|
|
RSpec.describe 'Wiki resource ordering', type: :request do
|
|
include TagGroupRecords
|
|
let(:user) { create_member_user! }
|
|
|
|
it 'selects the latest twenty across both resources before applying the global limit' do
|
|
start = Time.utc(2026, 1, 1)
|
|
descriptions = 24.times.map do |index|
|
|
tag = create(:tag, primary_name: "rank_#{ index }")
|
|
TagDescription.create!(tag:, language_code: 'ja', body: 'current', version_no: 1,
|
|
updated_at: start + index.hours)
|
|
end
|
|
groups = [24, 25].map do |hour|
|
|
group = TagGroup.find(seed_group(name: "rank_group_#{ hour }"))
|
|
group.update_columns(updated_at: start + hour.hours)
|
|
group
|
|
end
|
|
|
|
get '/wiki', params: { title: 'rank' }
|
|
|
|
expect(response).to have_http_status(:ok)
|
|
expected = groups.reverse.map { ['tag_group', _1.id] } +
|
|
descriptions.last(18).reverse.map { ['tag_description', _1.id] }
|
|
expect(json.map { [_1.fetch('resource_type'), _1.fetch('id')] }).to eq(expected)
|
|
end
|
|
|
|
it 'breaks timestamp ties by resource kind and ID while retaining legacy overlaps' do
|
|
time = Time.utc(2026, 1, 1)
|
|
tag = create(:tag, primary_name: 'tied')
|
|
TagDescription.create!(id: 51, tag:, language_code: 'ja', body: 'current',
|
|
version_no: 1, updated_at: time)
|
|
group = TagGroup.find(seed_group(name: 'tied', id: 51))
|
|
group.update_columns(updated_at: time)
|
|
|
|
2.times do
|
|
get '/wiki', params: { title: 'tied' }
|
|
expect(json.map { [_1.fetch('resource_type'), _1.fetch('id')] })
|
|
.to eq([['tag_description', 51], ['tag_group', 51]])
|
|
end
|
|
end
|
|
end
|