diff options
author | Alessandro Desantis <desa.alessandro@gmail.com> | 2020-11-16 16:24:39 +0100 |
---|---|---|
committer | Alessandro Desantis <desa.alessandro@gmail.com> | 2020-11-16 17:09:04 +0100 |
commit | 380fab143697ebc5508a50771ccba9731aab07af (patch) | |
tree | 11ebec28a09f4646149dc8d89023193c9849c3c8 | |
parent | db9913f3b186b0be11976d1daf315d84057e4216 (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.yml | 1 | ||||
-rw-r--r-- | app/controllers/spree/admin/subscriptions_controller.rb | 4 | ||||
-rw-r--r-- | spec/features/admin/subscriptions_spec.rb | 18 |
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 |