Commit 4f5283e8

mo khan <mo@mokhan.ca>
2014-09-18 17:01:54
add logic to reset a users password,
1 parent 3995f99
Changed files (2)
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