main
 1require "rails_helper"
 2
 3describe User do
 4  context "#save" do
 5    it "can be saved" do
 6      User.create!(email: 'mo@mokhan.ca', password: 'password', password_confirmation: 'password')
 7      expect(User.count).to eql(1)
 8    end
 9  end
10
11  context "#authenticate" do
12    let(:user) { User.create!(email: 'blah@example.com', password: 'password', password_confirmation: 'password') }
13
14    it "returns true when the password is correct" do
15      expect(user.authenticate('password')).to be_truthy
16    end
17
18    it "returns false when the password is incorrect" do
19      expect(user.authenticate('wrong')).to be_falsey
20    end
21  end
22
23  context "validations" do
24    subject { build(:user) }
25
26    context "when all fields are provided" do
27      it 'is valid' do
28        expect(subject).to be_valid
29      end
30    end
31
32    context "when the email is blank" do
33      it 'produces an error' do
34        subject.email = ''
35        expect(subject).to_not be_valid
36        expect(subject.errors[:email]).to_not be_empty
37      end
38    end
39
40    context "when the email is invalid" do
41      it 'produces an error when' do
42        subject.email = 'blah'
43        expect(subject).to_not be_valid
44        expect(subject.errors[:email]).to_not be_empty
45      end
46    end
47
48    context 'when the email is legit' do
49      it 'is valid' do
50        expect(subject).to be_valid
51        expect(subject.errors[:email]).to be_empty
52      end
53    end
54
55    context "when the password is missing" do
56      it 'produces an error' do
57        subject.password = nil
58        expect(subject).to_not be_valid
59      end
60    end
61  end
62
63  context "#login" do
64    subject { create(:user, password: 'password') }
65
66    context "when the credentials are good" do
67      it 'returns a new session' do
68        result = subject.login('password')
69        expect(result).to_not be_nil
70        expect(result).to be_instance_of(Session)
71      end
72    end
73
74    context "when the credentials are invalid" do
75      it 'returns nil' do
76        expect(subject.login('wrong')).to be_nil
77      end
78    end
79  end
80end