summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Barbosa <igorbarbosa.p@gmail.com>2021-02-12 16:32:09 -0300
committerIgor Barbosa <igorbarbosa.p@gmail.com>2021-02-12 16:32:09 -0300
commit4bbe6a7b5660f05b8feb0ba7ce17f145872e1a64 (patch)
tree9f5e2215eb533661ded8932242b2e4866a98caa0
parent7e3aeed0510cf6e1572c3bd94d64b814993d1631 (diff)
Fix duplicated line items creation
When we update a subscription with new line items, the logic is assigning it twice. It's assigned in SubscriptionsController#update[1] and in ResourceController#update[2]. It only happened with new line items because there's no id for them. [1] https://github.com/solidusio-contrib/solidus_subscriptions/blob/69f0ca038b66d0ca36971405e51c0d3aa916cf19/app/controllers/spree/admin/subscriptions_controller.rb#L28 [2] https://github.com/solidusio/solidus/blob/b0092d0f3bda447494a586bf8eb96a18322b8bed/backend/app/controllers/spree/admin/resource_controller.rb#L36
-rw-r--r--app/controllers/spree/admin/subscriptions_controller.rb3
-rw-r--r--spec/controllers/spree/admin/subscriptions_controller_spec.rb16
2 files changed, 17 insertions, 2 deletions
diff --git a/app/controllers/spree/admin/subscriptions_controller.rb b/app/controllers/spree/admin/subscriptions_controller.rb
index 2b6069f..95775fe 100644
--- a/app/controllers/spree/admin/subscriptions_controller.rb
+++ b/app/controllers/spree/admin/subscriptions_controller.rb
@@ -24,8 +24,7 @@ module Spree
def update
load_payment_methods
-
- @subscription.assign_attributes(permitted_resource_params)
+ @subscription.payment_method_id = params[:subscription][:payment_method_id]
if @subscription.payment_method&.source_required?
@subscription.payment_source = @subscription
diff --git a/spec/controllers/spree/admin/subscriptions_controller_spec.rb b/spec/controllers/spree/admin/subscriptions_controller_spec.rb
index 8c09ab1..b2a5ec5 100644
--- a/spec/controllers/spree/admin/subscriptions_controller_spec.rb
+++ b/spec/controllers/spree/admin/subscriptions_controller_spec.rb
@@ -60,6 +60,22 @@ RSpec.describe Spree::Admin::SubscriptionsController, type: :request do
to expected_date
end
+ it 'does not duplicate line items' do
+ variant = create :variant, subscribable: true
+ subscription = create :subscription
+ subscription_params = {
+ subscription: {
+ line_items_attributes: [
+ { subscribable_id: variant.id, quantity: 1 }
+ ]
+ }
+ }
+
+ expect { put spree.admin_subscription_path(subscription), params: subscription_params }.
+ to change { subscription.reload.line_items.count }.
+ by 1
+ end
+
context 'when updating the payment method' do
it 'updates the subscription payment method' do
check_payment_method = create :check_payment_method