Pull the password reauthentication logic out of the user model and put it in the password update controller where it belongs. This fixes an issue where when a new user was created the user model had an incorrect password error set on it by `encrypt_password_on_update`. It was trying to verify the old password even though we don't have one when creating a new user. This error caused the user create action to redirect back to the signup page because `respond_with` thought that creating the user failed.
52 lines
2.1 KiB
Ruby
52 lines
2.1 KiB
Ruby
require 'test_helper'
|
|
|
|
class PasswordsControllerTest < ActionDispatch::IntegrationTest
|
|
context "The passwords controller" do
|
|
setup do
|
|
@user = create(:user, password: "12345")
|
|
end
|
|
|
|
context "edit action" do
|
|
should "work" do
|
|
get_auth edit_user_password_path(@user), @user
|
|
assert_response :success
|
|
end
|
|
end
|
|
|
|
context "update action" do
|
|
should "update the password when given a valid old password" do
|
|
put_auth user_password_path(@user), @user, params: { user: { old_password: "12345", password: "abcde", password_confirmation: "abcde" } }
|
|
|
|
assert_redirected_to @user
|
|
assert_equal(nil, User.authenticate(@user.name, "12345"))
|
|
assert_equal(@user, User.authenticate(@user.name, "abcde"))
|
|
end
|
|
|
|
should "update the password when given a valid login key" do
|
|
signed_user_id = Danbooru::MessageVerifier.new(:login).generate(@user.id)
|
|
put_auth user_password_path(@user), @user, params: { user: { password: "abcde", password_confirmation: "abcde", signed_user_id: signed_user_id } }
|
|
|
|
assert_redirected_to @user
|
|
assert_equal(nil, User.authenticate(@user.name, "12345"))
|
|
assert_equal(@user, User.authenticate(@user.name, "abcde"))
|
|
end
|
|
|
|
should "not update the password when given an invalid old password" do
|
|
put_auth user_password_path(@user), @user, params: { user: { old_password: "3qoirjqe", password: "abcde", password_confirmation: "abcde" } }
|
|
|
|
assert_response :success
|
|
assert_equal(@user, User.authenticate(@user.name, "12345"))
|
|
assert_equal(nil, User.authenticate(@user.name, "abcde"))
|
|
end
|
|
|
|
should "not update the password when password confirmation fails for the new password" do
|
|
put_auth user_password_path(@user), @user, params: { user: { old_password: "12345", password: "abcde", password_confirmation: "qerogijqe" } }
|
|
|
|
assert_response :success
|
|
assert_equal(@user, User.authenticate(@user.name, "12345"))
|
|
assert_equal(nil, User.authenticate(@user.name, "abcde"))
|
|
end
|
|
end
|
|
end
|
|
end
|