diff options
author | Alessandro Desantis <desa.alessandro@gmail.com> | 2021-03-12 15:25:10 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-12 15:25:10 +0100 |
commit | 5c9ec3fd21305e8e3004f26d40cedd327b0995a7 (patch) | |
tree | 194c20731c601dee77603c1a6b28746fa3f89547 | |
parent | 349d5e456396f11e1cfe4bdb068542e9c45fe302 (diff) | |
parent | bc147b0232f766e3af9d62212f3525c49d2808c8 (diff) |
Merge pull request #211 from solidusio-contrib/luca-landa/handle-subscriptions-with-deleted-products
Remove variant from subscriptions on soft deletion
3 files changed, 47 insertions, 0 deletions
@@ -141,6 +141,10 @@ SolidusSubscriptions.configure do |config| end ``` +### Subscription product deletion +When a product is soft deleted, its subscription line items need to be deleted as well, in order to avoid error on subscription processing. +If the product class is `Spree::Variant`, this corner case is handled automatically on the variant soft deletion, otherwise it should be handled manually. + ## Development ### Testing the extension diff --git a/app/decorators/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions.rb b/app/decorators/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions.rb new file mode 100644 index 0000000..bba173e --- /dev/null +++ b/app/decorators/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +module SolidusSubscriptions + module Spree + module Variant + module AutoDeleteFromSubscriptions + def self.prepended(base) + base.after_discard(:remove_from_subscriptions) + base.after_destroy(:remove_from_subscriptions) + end + + def remove_from_subscriptions + SolidusSubscriptions::LineItem.where(subscribable: self).delete_all + end + end + end + end +end + +Spree::Variant.prepend(SolidusSubscriptions::Spree::Variant::AutoDeleteFromSubscriptions) diff --git a/spec/decorators/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions_spec.rb b/spec/decorators/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions_spec.rb new file mode 100644 index 0000000..422e992 --- /dev/null +++ b/spec/decorators/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions_spec.rb @@ -0,0 +1,23 @@ +require 'spec_helper' + +RSpec.describe SolidusSubscriptions::Spree::Variant::AutoDeleteFromSubscriptions, type: :model do + subject { create(:variant, subscribable: true) } + + describe '.discard' do + it 'deletes itself from subscriptions' do + subscription = create(:subscription) + create(:subscription_line_item, subscription: subscription, subscribable: subject) + + expect { subject.discard }.to change { SolidusSubscriptions::LineItem.count }.by(-1) + end + end + + describe '.destroy' do + it 'deletes itself from subscriptions' do + subscription = create(:subscription) + create(:subscription_line_item, subscription: subscription, subscribable: subject) + + expect { subject.destroy }.to change { SolidusSubscriptions::LineItem.count }.by(-1) + end + end +end |