Skip to content

Commit

Permalink
Merge pull request #131 from yono/improve_edit_user
Browse files Browse the repository at this point in the history
Fix to not reuse spree_current_user as `@user`
  • Loading branch information
jacobherrington authored Feb 1, 2019
2 parents c0b5d1c + 6aacccc commit ddded44
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 8 deletions.
4 changes: 3 additions & 1 deletion lib/controllers/frontend/spree/users_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ def create

def update
if @user.update_attributes(user_params)
spree_current_user.reload

if params[:user][:password].present?
# this logic needed b/c devise wants to log us out after password changes
unless Spree::Auth::Config[:signout_after_password_change]
Expand All @@ -43,7 +45,7 @@ def user_params
end

def load_object
@user ||= spree_current_user
@user ||= Spree::User.find_by(id: spree_current_user&.id)
authorize! params[:action].to_sym, @user
end

Expand Down
32 changes: 25 additions & 7 deletions spec/controllers/spree/users_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,8 @@
let(:user) { create(:user) }
let(:role) { create(:role) }

before { allow(controller).to receive(:spree_current_user) { user } }

context '#load_object' do
it 'redirects to signup path if user is not found' do
allow(controller).to receive(:spree_current_user) { nil }
put :update, params: { user: { email: '[email protected]' } }
expect(response).to redirect_to spree.login_path
end
Expand All @@ -22,11 +19,32 @@
end

context '#update' do
before { sign_in(user) }

context 'when updating own account' do
it 'performs update' do
put :update, params: { user: { email: '[email protected]' } }
expect(assigns[:user].email).to eq '[email protected]'
expect(response).to redirect_to spree.account_url(only_path: true)

context 'when user updated successfuly' do
before { put :update, params: { user: { email: '[email protected]' } } }

it 'saves user' do
expect(assigns[:user].email).to eq '[email protected]'
end

it 'updates spree_current_user' do
expect(subject.spree_current_user.email).to eq '[email protected]'
end

it 'redirects to account url' do
expect(response).to redirect_to spree.account_url(only_path: true)
end
end

context 'when user not valid' do
before { put :update, params: { user: { email: '' } } }

it 'does not affect spree_current_user' do
expect(subject.spree_current_user.email).to eq user.email
end
end
end

Expand Down

0 comments on commit ddded44

Please sign in to comment.