summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorluca-landa <lucalanda@hotmail.it>2021-02-12 15:06:47 +0100
committerluca-landa <lucalanda@hotmail.it>2021-03-12 09:31:01 +0100
commitd97bba60a4b9e56e549de0fecf7c83b2b6f0a093 (patch)
tree7cfdfcb38a182e7671762bc9c93180fbcf94081c
parentf99c56615bc625e4507e73bbc727ec6fd8b70d59 (diff)
Remove variant from subscriptions on soft deletion
-rw-r--r--app/decorators/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions.rb20
-rw-r--r--spec/decorators/models/solidus_subscriptions/spree/variant/auto_delete_from_subscriptions_spec.rb23
2 files changed, 43 insertions, 0 deletions
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