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