diff --git a/app/models/spree/variant.rb b/app/models/spree/variant.rb index 294c1edfe0..78e5819107 100644 --- a/app/models/spree/variant.rb +++ b/app/models/spree/variant.rb @@ -199,6 +199,11 @@ module Spree price_in(currency).try(:amount) end + def changed? + # Changes to price are saved after_save + super || default_price.changed? + end + # can_supply? is implemented in VariantStock def in_stock?(quantity = 1) can_supply?(quantity) diff --git a/spec/models/spree/variant_spec.rb b/spec/models/spree/variant_spec.rb index 832cb6d931..3cea5ba96f 100644 --- a/spec/models/spree/variant_spec.rb +++ b/spec/models/spree/variant_spec.rb @@ -58,6 +58,28 @@ RSpec.describe Spree::Variant do end end + describe "#changed?" do + subject(:variant) { create(:variant) } + + it { is_expected.not_to be_changed } + + it "is changed when basic fields are changed" do + subject.display_name = "blah" + expect(subject).to be_changed + end + + describe "default_price" do + it "price" do + subject.price = 100 + expect(subject).to be_changed + end + it "currency" do + subject.currency = "USD" + expect(subject).to be_changed + end + end + end + context "price parsing" do context "price=" do context "with decimal point" do