Commit 4f5283e8
Changed files (2)
app
models
spec
models
app/models/password_reset.rb
@@ -5,7 +5,11 @@ class PasswordReset
user.update(reset_password_token: SecureRandom.hex(32), reset_password_sent_at: DateTime.now)
PasswordResetMailer.delay.send_password_reset_instructions_to(user)
end
-
+
def self.reset(reset_token, new_password)
+ user = User.find_by(reset_password_token: reset_token)
+ return if user.nil?
+ user.change_password(new_password)
+ user.update(reset_password_token: nil, reset_password_sent_at: nil)
end
end
spec/models/password_reset_spec.rb
@@ -28,12 +28,25 @@ describe PasswordReset do
end
describe ".reset" do
+ let(:reset_token) { SecureRandom.hex(32) }
+ let(:password) { SecureRandom.hex(8) }
+ let!(:user) { create(:user, reset_password_token: reset_token) }
+
it "changes the users password" do
-
+ PasswordReset.reset(reset_token, password)
+ user.reload
+ expect(user.valid_password?(password)).to be_truthy
end
it "deletes the reset token" do
-
+ PasswordReset.reset(reset_token, password)
+ user.reload
+ expect(user.reset_password_token).to be_nil
+ expect(user.reset_password_sent_at).to be_nil
+ end
+
+ it "does nothing if the token cannot be found" do
+ PasswordReset.reset(SecureRandom.hex(32), password)
end
end
end