main
 1require "rails_helper"
 2
 3describe Session do
 4  context "#save" do
 5    it "creates a new session" do
 6      Session.create!(user_id: 1, ip_address: '127.0.0.1')
 7      session = Session.last
 8      expect(session.user_id).to eql(1)
 9      expect(session.ip_address).to eql("127.0.0.1")
10      expect(session.key).to_not be_nil
11    end
12  end
13
14  context ".authenticate" do
15    let(:user_session) { create(:session) }
16
17    context "when the session key is legit" do
18      it 'returns the session' do
19        expect(Session.authenticate!(user_session.key)).to eql(user_session)
20      end
21    end
22
23    context "when the session key is incorrect" do
24      it 'raises an error' do
25        expect(-> { Session.authenticate!('blah') }).to raise_error(ActiveRecord::RecordNotFound)
26      end
27    end
28
29    context "when the session key is revoked" do
30      let(:revoked_session) { create(:session, revoked_at: Time.now) }
31
32      it 'raises an error' do
33        expect(-> { Session.authenticate(revoked_session.key) }).to raise_error
34      end
35    end
36  end
37
38  context "#revoke!" do
39    subject { create(:user_session) }
40
41    it 'marks the time the session was revoked' do
42      subject.revoke!
43      expect(subject.revoked_at).to_not be_nil
44    end
45  end
46
47  context "#access" do
48    subject { create(:user_session) }
49    let(:request) { double(remote_ip: '127.0.0.1') }
50
51    before { subject.access(request) }
52
53    it 'records the ip address' do
54      expect(subject.ip_address).to eql(request.remote_ip)
55    end
56  end
57end