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