summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlessandro Desantis <desa.alessandro@gmail.com>2020-11-16 16:24:39 +0100
committerAlessandro Desantis <desa.alessandro@gmail.com>2020-11-16 17:09:04 +0100
commit380fab143697ebc5508a50771ccba9731aab07af (patch)
tree11ebec28a09f4646149dc8d89023193c9849c3c8
parentdb9913f3b186b0be11976d1daf315d84057e4216 (diff)
Fix `ActiveRecord::ReadOnlyRecord` when updating subscriptions
When updating a subscription that had a billing/shipping address, the admin would get a `ActiveRecord::ReadOnlyRecord` because we were attempting to update the existing address instead of creating a new one. This shouldn't be the case anymore, and a new address will always be created.
-rw-r--r--.rubocop.yml1
-rw-r--r--app/controllers/spree/admin/subscriptions_controller.rb4
-rw-r--r--spec/features/admin/subscriptions_spec.rb18
3 files changed, 21 insertions, 2 deletions
diff --git a/.rubocop.yml b/.rubocop.yml
index 48c6a23..fcd4bc4 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -6,3 +6,4 @@ require:
RSpec/DescribeClass:
Exclude:
- spec/requests/**/*
+ - spec/features/**/*
diff --git a/app/controllers/spree/admin/subscriptions_controller.rb b/app/controllers/spree/admin/subscriptions_controller.rb
index 7db4c77..2b6069f 100644
--- a/app/controllers/spree/admin/subscriptions_controller.rb
+++ b/app/controllers/spree/admin/subscriptions_controller.rb
@@ -88,8 +88,8 @@ module Spree
end
def prepare_form
- @subscription.build_shipping_address unless @subscription.shipping_address
- @subscription.build_billing_address unless @subscription.billing_address
+ @subscription.build_shipping_address(@subscription.shipping_address&.value_attributes)
+ @subscription.build_billing_address(@subscription.billing_address&.value_attributes)
@subscription.line_items.build
end
diff --git a/spec/features/admin/subscriptions_spec.rb b/spec/features/admin/subscriptions_spec.rb
new file mode 100644
index 0000000..53228ec
--- /dev/null
+++ b/spec/features/admin/subscriptions_spec.rb
@@ -0,0 +1,18 @@
+RSpec.describe 'Subscriptions admin' do
+ stub_authorization!
+
+ it 'Updating a subscription' do
+ subscription = create(:subscription, :with_shipping_address, :with_billing_address)
+
+ visit spree.admin_path
+ click_link 'Subscriptions'
+ find('.fa-edit').click
+ fill_in 'subscription[shipping_address_attributes][zipcode]', with: '33166'
+ fill_in 'subscription[billing_address_attributes][zipcode]', with: '33167'
+ click_button 'Update'
+ subscription.reload
+
+ expect(subscription.shipping_address.zipcode).to eq('33166')
+ expect(subscription.billing_address.zipcode).to eq('33167')
+ end
+end