Skip to content

Commit 678750d

Browse files
committed
Add restriction for metadata update after order is complete
User cannot update customer_metadata after the status of order is complete
1 parent a6a4998 commit 678750d

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

api/app/controllers/spree/api/orders_controller.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,12 +112,19 @@ def mine
112112
def order_params
113113
if params[:order]
114114
normalize_params
115+
prevent_customer_metadata_update
115116
params.require(:order).permit(permitted_order_attributes)
116117
else
117118
{}
118119
end
119120
end
120121

122+
def prevent_customer_metadata_update
123+
return unless @order&.completed? && cannot?(:admin, Spree::Order)
124+
125+
params[:order].delete(:customer_metadata) if params[:order]
126+
end
127+
121128
def normalize_params
122129
if params[:order][:payments]
123130
payments_params = params[:order].delete(:payments)

api/spec/requests/spree/api/orders_spec.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,17 @@ module Spree::Api
128128

129129
expect(json_response).not_to have_key('admin_metadata')
130130
end
131+
132+
it "cannot update customer metadata if the order is complete" do
133+
order = create(:order)
134+
order.completed_at = Time.current
135+
order.state = 'complete'
136+
order.save!
137+
138+
put spree.api_order_path(order), params: { order: attributes_with_metadata }
139+
140+
expect(json_response['customer_metadata']).to eq({})
141+
end
131142
end
132143

133144
context "when the current user can administrate the order" do

0 commit comments

Comments
 (0)