From e844d71abc3a510e37fc9ec24b144a4ce8edd610 Mon Sep 17 00:00:00 2001 From: David Cook Date: Thu, 28 Sep 2023 09:27:09 +1000 Subject: [PATCH] Redirect to edit path on success Simply rendering the edit form on the posted path is problematic. For example if you refresh the path you get a 404. But if there's errors, we want to render the form with unsaved values so you can see the errors and try again. --- app/controllers/spree/admin/users_controller.rb | 10 ++++++---- spec/controllers/spree/admin/users_controller_spec.rb | 7 +++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/app/controllers/spree/admin/users_controller.rb b/app/controllers/spree/admin/users_controller.rb index 4611095a9c..34714ba233 100644 --- a/app/controllers/spree/admin/users_controller.rb +++ b/app/controllers/spree/admin/users_controller.rb @@ -33,8 +33,8 @@ module Spree @user.spree_roles = roles.compact_blank.collect{ |r| Spree::Role.find(r) } end - flash.now[:success] = Spree.t(:created_successfully) - render :edit + flash[:success] = Spree.t(:created_successfully) + redirect_to edit_admin_user_path(@user) else render :new end @@ -50,9 +50,11 @@ module Spree @user.spree_roles = roles.compact_blank.collect{ |r| Spree::Role.find(r) } end - flash.now[:success] = update_message + flash[:success] = update_message + redirect_to edit_admin_user_path(@user) + else + render :edit end - render :edit end protected diff --git a/spec/controllers/spree/admin/users_controller_spec.rb b/spec/controllers/spree/admin/users_controller_spec.rb index d2de374982..96e7cc4df4 100644 --- a/spec/controllers/spree/admin/users_controller_spec.rb +++ b/spec/controllers/spree/admin/users_controller_spec.rb @@ -22,6 +22,13 @@ describe Spree::Admin::UsersController do it "allows admins to update a user's show api key view" do user.spree_roles << Spree::Role.find_or_create_by(name: 'admin') spree_put :update, id: test_user.id, user: { show_api_key_view: true } + expect(response).to redirect_to spree.edit_admin_user_path(test_user) + end + + it "re-renders the edit form if error" do + user.spree_roles << Spree::Role.find_or_create_by(name: 'admin') + spree_put :update, id: test_user.id, user: { password: "blah", password_confirmation: "" } + expect(response).to render_template :edit end