diff options
author | Igor Barbosa <igorbarbosa.p@gmail.com> | 2021-02-12 16:32:09 -0300 |
---|---|---|
committer | Igor Barbosa <igorbarbosa.p@gmail.com> | 2021-02-12 16:32:09 -0300 |
commit | 4bbe6a7b5660f05b8feb0ba7ce17f145872e1a64 (patch) | |
tree | 9f5e2215eb533661ded8932242b2e4866a98caa0 | |
parent | 7e3aeed0510cf6e1572c3bd94d64b814993d1631 (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.rb | 3 | ||||
-rw-r--r-- | spec/controllers/spree/admin/subscriptions_controller_spec.rb | 16 |
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 |