Skip to content

Commit 0d641a7

Browse files
committed
Fix delete response in admin users controller
If a user with orders gets deleted in the admin an exception is raised. This exception is handled by the `user_destroy_with_orders_error method`. This method uses the deprecated (and later removed) `text` response. Instead we need to use `plain`.
1 parent 0c6ad90 commit 0d641a7

File tree

3 files changed

+36
-1
lines changed

3 files changed

+36
-1
lines changed

backend/app/controllers/spree/admin/users_controller.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ def user_params
121121
# handling raise from Spree::Admin::ResourceController#destroy
122122
def user_destroy_with_orders_error
123123
invoke_callbacks(:destroy, :fails)
124-
render status: :forbidden, text: t('spree.error_user_destroy_with_orders')
124+
render status: :forbidden, plain: t("spree.error_user_destroy_with_orders")
125125
end
126126

127127
def sign_in_if_change_own_password

backend/spec/controllers/spree/admin/users_controller_spec.rb

+29
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,35 @@ def user
473473
end
474474
end
475475

476+
describe "#destroy" do
477+
stub_authorization! do |_user|
478+
can :manage, Spree.user_class
479+
end
480+
481+
subject do
482+
delete :destroy, params: { id: user.id }
483+
response
484+
end
485+
486+
context "with user having no orders" do
487+
let(:user) { create(:user) }
488+
489+
it "can be destroyed" do
490+
is_expected.to be_redirect
491+
expect(flash[:success]).to eq("User has been successfully removed!")
492+
end
493+
end
494+
495+
context "with user having orders" do
496+
let(:user) { create(:user, :with_orders) }
497+
498+
it "cannot be destroyed" do
499+
is_expected.to be_forbidden
500+
expect(subject.body).to eq I18n.t("spree.error_user_destroy_with_orders")
501+
end
502+
end
503+
end
504+
476505
describe "#orders" do
477506
stub_authorization! do |_user|
478507
can :manage, Spree.user_class

core/lib/spree/testing_support/factories/user_factory.rb

+6
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@
2121
end
2222
end
2323

24+
trait :with_orders do
25+
after(:create) do |user, _|
26+
create(:order, user: user)
27+
end
28+
end
29+
2430
factory :admin_user do
2531
after(:create) do |user, _|
2632
admin_role = Spree::Role.find_by(name: 'admin') || create(:role, name: 'admin')

0 commit comments

Comments
 (0)