Skip to content

Commit 9dc2062

Browse files
committed
Exclude empty baskets from trial basket count
Baskets with quantity = 0 (complement-only baskets) should not be counted as trial baskets. Only baskets with an actual basket quantity are now marked as trial.
1 parent f941a36 commit 9dc2062

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

app/models/member.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ def update_trial_baskets!
185185
recent_baskets = self.baskets.where(deliveries: { date: min_date.. }).includes(:membership)
186186
transaction do
187187
recent_baskets.trial.update_all(state: "normal")
188-
recent_baskets.normal.limit(trial_baskets_count).update_all(state: "trial")
188+
recent_baskets.normal.where("baskets.quantity > 0").limit(trial_baskets_count).update_all(state: "trial")
189189
recent_baskets.map(&:membership).uniq.each(&:update_baskets_counts!)
190190
end
191191
end

test/models/member_test.rb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,26 @@ class MemberTest < ActiveSupport::TestCase
273273
], members(:jane).baskets.between(range).map { |b| [ b.delivery.date.to_s, b.trial? ] }
274274
end
275275

276+
test "update_trial_baskets! ignores empty baskets (quantity = 0)" do
277+
travel_to "2024-01-01"
278+
org(trial_baskets_count: 2)
279+
member = members(:jane)
280+
range = Date.new(2024, 1, 1)..Date.new(2024, 5, 1)
281+
282+
# Set first basket quantity to 0 (complement-only basket)
283+
first_basket = member.baskets.between(range).first
284+
first_basket.update_column(:quantity, 0)
285+
286+
member.update_trial_baskets!
287+
288+
assert_equal [
289+
[ "2024-04-04", false ], # Empty basket, not counted as trial
290+
[ "2024-04-11", true ],
291+
[ "2024-04-18", true ],
292+
[ "2024-04-25", false ]
293+
], member.baskets.between(range).map { |b| [ b.delivery.date.to_s, b.trial? ] }
294+
end
295+
276296
test "emails= / emails" do
277297
member = Member.new(emails: "[email protected], [email protected]")
278298
assert_equal "[email protected], [email protected]", member.emails

0 commit comments

Comments
 (0)