Skip to content

Commit a5ed6c6

Browse files
senemsoynvandoornsofiabesenski4forkatajarednorman
committed
Don't persist line item on promotion application
This is in service of the in-memory order updater. Co-authored-by: Nick <nick@super.gd> Co-authored-by: Sofia <sofia@super.gd> Co-authored-by: Chris <chris@super.gd> Co-authored-by: Jared <jared@super.gd> Co-authored-by: Alistair <alistair@super.gd> Co-authored-by: Adam <adam@super.gd> Co-authored-by: An <andrew@super.gd> Co-authored-by: Benjamin <benjamin@super.gd>
1 parent 0cc0c8c commit a5ed6c6

3 files changed

Lines changed: 11 additions & 5 deletions

File tree

promotions/app/models/solidus_promotions/benefits/create_discounted_item.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,8 @@ def find_item(order)
2828
order.line_items.detect { |line_item| line_item.managed_by_order_benefit == self }
2929
end
3030

31-
# The enemy - create_item
3231
def create_item(order)
33-
order.line_items.create!(quantity: determine_item_quantity(order), variant: variant, managed_by_order_benefit: self)
32+
order.line_items.build(quantity: determine_item_quantity(order), variant: variant, managed_by_order_benefit: self)
3433
end
3534

3635
def determine_item_quantity(order)

promotions/spec/models/solidus_promotions/benefits/create_discounted_item_spec.rb

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,27 @@
66
it { is_expected.to respond_to(:preferred_variant_id) }
77

88
describe "#perform" do
9-
let(:order) { create(:order_with_line_items) }
9+
let!(:order) { create(:order_with_line_items) }
1010
let(:promotion) { create(:solidus_promotion) }
11-
let(:benefit) { SolidusPromotions::Benefits::CreateDiscountedItem.new(preferred_variant_id: goodie.id, calculator: hundred_percent, promotion: promotion) }
11+
let!(:benefit) { SolidusPromotions::Benefits::CreateDiscountedItem.new(preferred_variant_id: goodie.id, calculator: hundred_percent, promotion: promotion) }
1212
let(:hundred_percent) { SolidusPromotions::Calculators::Percent.new(preferred_percent: 100) }
1313
let(:goodie) { create(:variant) }
1414
subject { benefit.perform(order) }
1515

1616
it "creates a line item with a hundred percent discount" do
17-
expect { subject }.to change { order.line_items.count }.by(1)
17+
expect { subject }.to change { order.line_items.size }.by(1)
1818
created_item = order.line_items.detect { |line_item| line_item.managed_by_order_benefit == benefit }
1919
expect(created_item.discountable_amount).to be_zero
2020
end
2121

2222
it "never calls the order recalculator" do
2323
expect(order).not_to receive(:recalculate)
2424
end
25+
26+
it "does not persist changes to order" do
27+
expect {
28+
subject
29+
}.not_to make_database_queries(manipulative: true)
30+
end
2531
end
2632
end

promotions/spec/rails_helper.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
require "spec_helper"
77
require "solidus_legacy_promotions"
8+
require 'db-query-matchers'
89

910
# SOLIDUS DUMMY APP
1011
require "spree/testing_support/dummy_app"

0 commit comments

Comments
 (0)