master
1require "rails_helper"
2
3describe PasswordReset do
4 describe ".send_reset_instructions_to" do
5 let(:user) { create(:user, reset_password_token: nil, reset_password_sent_at: nil) }
6 let(:mailer) { double(deliver_later: true) }
7
8 before :each do
9 allow(PasswordResetMailer).
10 to receive(:send_password_reset_instructions_to).
11 with(user).
12 and_return(mailer)
13 end
14
15 it "creates a new reset token for the user" do
16 PasswordReset.send_reset_instructions_to(user.email)
17 user.reload
18 expect(user.reset_password_token).to_not be_nil
19 expect(user.reset_password_sent_at).to_not be_nil
20 end
21
22 it "sends an email to the user" do
23 PasswordReset.send_reset_instructions_to(user.email)
24 expect(mailer).to have_received(:deliver_later)
25 end
26
27 it "does nothing if the email is not known" do
28 PasswordReset.send_reset_instructions_to(FFaker::Internet.email)
29 expect(mailer).to_not have_received(:deliver_later)
30 end
31 end
32
33 describe ".reset" do
34 let(:reset_token) { SecureRandom.hex(32) }
35 let(:password) { SecureRandom.hex(8) }
36 let!(:user) { create(:user, reset_password_token: reset_token) }
37
38 it "changes the users password" do
39 PasswordReset.reset(reset_token, password)
40 user.reload
41 expect(user.authenticate(password)).to be_truthy
42 end
43
44 it "deletes the reset token" do
45 PasswordReset.reset(reset_token, password)
46 user.reload
47 expect(user.reset_password_token).to be_nil
48 expect(user.reset_password_sent_at).to be_nil
49 end
50
51 it "does nothing if the token cannot be found" do
52 PasswordReset.reset(SecureRandom.hex(32), password)
53 end
54 end
55end