From 610f207d1707cbb57061c23d64900c379cb5a309 Mon Sep 17 00:00:00 2001 From: Morgan Roderick Date: Wed, 11 Nov 2026 11:34:20 +0100 Subject: [PATCH] test: assert exact query counts in upcoming_events_for_user specs Both regression specs allowed up to two extra queries at four workshops than at one. That slack leaves room for a constant added query, the shape a preload falling back to a non-batched load takes. Measured on both paths: 6 queries at one workshop, 6 at four, so exact equality holds. The chapter-workshops spec also read host outside the counted block, so removing that preload kept both counts equal and left the guard green. It now counts the host reads too, which is how the invitations spec already behaves. --- spec/queries/dashboard_query_spec.rb | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/spec/queries/dashboard_query_spec.rb b/spec/queries/dashboard_query_spec.rb index ce9d2eecf..1f123998d 100644 --- a/spec/queries/dashboard_query_spec.rb +++ b/spec/queries/dashboard_query_spec.rb @@ -174,17 +174,14 @@ def load_user_events_and_count_host_queries(member:, host:) extra_sponsor = Fabricate(:sponsor) create_chapter_workshops(chapter:, count: 1, host:, extra_sponsor:) - result_one = described_class.upcoming_events_for_user(member) - one_query_count = count_queries { described_class.upcoming_events_for_user(member) } + result_one, one_query_count = load_user_events_and_count_host_queries(member:, host:) + expect(result_one.values.flatten.count { |event| event.is_a?(Workshop) }).to eq(1) create_chapter_workshops(chapter:, count: 3, host:, extra_sponsor:) - result_four = nil - four_query_count = count_queries { result_four = described_class.upcoming_events_for_user(member) } - + result_four, four_query_count = load_user_events_and_count_host_queries(member:, host:) expect(result_four.values.flatten.count { |event| event.is_a?(Workshop) }).to eq(4) - expect(result_four.values.flatten.select { |event| event.is_a?(Workshop) }.map(&:host)).to all(eq(host)) - expect(four_query_count).to be <= one_query_count + 2 - expect(result_one.values.flatten.select { |event| event.is_a?(Workshop) }.map(&:host)).to all(eq(host)) + + expect(four_query_count).to eq(one_query_count) end it 'preloads workshop hosts for accepted invitations without growing query count with workshop count' do @@ -202,7 +199,7 @@ def load_user_events_and_count_host_queries(member:, host:) result_four, four_workshop_queries = load_user_events_and_count_host_queries(member:, host:) expect(result_four.values.flatten.count { |event| event.is_a?(Workshop) }).to eq(4) expect(four_workshop_queries).to be_positive - expect(four_workshop_queries).to be <= one_workshop_queries + 2 + expect(four_workshop_queries).to eq(one_workshop_queries) end it 'resolves host to nil for accepted workshops with only non-host sponsors' do