diff --git a/app/liquid_drops/user_con_profile_drop.rb b/app/liquid_drops/user_con_profile_drop.rb index 7eb84f6855c..f3bd0b5bc2e 100644 --- a/app/liquid_drops/user_con_profile_drop.rb +++ b/app/liquid_drops/user_con_profile_drop.rb @@ -51,6 +51,7 @@ class UserConProfileDrop < Liquid::Drop # @api def initialize(user_con_profile) + super() @user_con_profile = user_con_profile end @@ -65,7 +66,17 @@ def signups user_con_profile .signups .where.not(state: "withdrawn") - .includes(event: :event_category, run: { rooms: nil, event: { team_members: :user_con_profile } }) + .includes( + :bucket, + :requested_bucket, + event: :event_category, + run: { + rooms: nil, + event: { + team_members: :user_con_profile + } + } + ) .to_a end diff --git a/test/liquid_drops/user_con_profile_drop_test.rb b/test/liquid_drops/user_con_profile_drop_test.rb index f9817eaa8fd..914ef9cf68d 100644 --- a/test/liquid_drops/user_con_profile_drop_test.rb +++ b/test/liquid_drops/user_con_profile_drop_test.rb @@ -63,5 +63,30 @@ signups = user_con_profile_drop.signups withdrawn_signups.each { |signup| assert_not_includes signups, signup } end + + it "does not issue a bucket query per signup" do + queries = + count_queries(/registration_policy_buckets/) do + user_con_profile_drop.signups.each do |signup| + signup.bucket + signup.requested_bucket + end + end + assert_operator queries, :<=, 2, "expected a constant number of bucket queries regardless of signup count" + end + end + + private + + def count_queries(pattern) + count = 0 + subscriber = + ActiveSupport::Notifications.subscribe("sql.active_record") do |*, payload| + count += 1 if pattern.match?(payload[:sql]) + end + yield + count + ensure + ActiveSupport::Notifications.unsubscribe(subscriber) if subscriber end end