main
1# frozen_string_literal: true
2
3require 'rails_helper'
4
5RSpec.describe UserSession do
6 subject { build(:user_session) }
7
8 describe "#revoke!" do
9 before { subject.revoke! }
10
11 specify { expect(subject.revoked_at).to be_present }
12 end
13
14 describe "#access" do
15 subject { create(:user_session) }
16
17 let(:request) { instance_double(ActionDispatch::Request, ip: "192.168.1.1", user_agent: "blah") }
18 let(:result) { subject.access(request) }
19
20 before do
21 freeze_time
22 result
23 end
24
25 specify { expect(subject.accessed_at).to eql(Time.current) }
26 specify { expect(subject.ip).to eql(request.ip) }
27 specify { expect(subject.user_agent).to eql(request.user_agent) }
28 specify { expect(subject).to be_persisted }
29 specify { expect(result).to eql(subject.key) }
30 end
31
32 describe ".active" do
33 let!(:active_session) { create(:user_session) }
34 let!(:inactive_session) { create(:user_session, :idle_timeout_expired) }
35 let!(:expired_session) { create(:user_session, :absolute_timeout_expired) }
36 let!(:revoked_session) { create(:user_session, :revoked) }
37
38 specify { expect(described_class.active).to match_array([active_session]) }
39 specify { expect(described_class.revoked).to match_array([revoked_session]) }
40 specify { expect(described_class.expired).to match_array([inactive_session, expired_session]) }
41 specify { expect(described_class.idle_timeout).to match_array([inactive_session]) }
42 specify { expect(described_class.absolute_timeout).to match_array([expired_session]) }
43 end
44
45 describe ".authenticate" do
46 let!(:active_session) { create(:user_session) }
47 let!(:inactive_session) { create(:user_session, :idle_timeout_expired) }
48 let!(:expired_session) { create(:user_session, :absolute_timeout_expired) }
49 let!(:revoked_session) { create(:user_session, :revoked) }
50
51 specify { expect(described_class.authenticate(active_session.key)).to eql(active_session) }
52 specify { expect(described_class.authenticate("blah")).to be_nil }
53 specify { expect(described_class.authenticate(inactive_session.key)).to be_nil }
54 specify { expect(described_class.authenticate(expired_session.key)).to be_nil }
55 specify { expect(described_class.authenticate(revoked_session.key)).to be_nil }
56 specify { expect(described_class.authenticate(nil)).to be_nil }
57 specify { expect(described_class.authenticate("")).to be_nil }
58 end
59
60 describe ".sudo?" do
61 let!(:sudo_session) { create(:user_session, :sudo) }
62 let!(:non_sudo_session) { create(:user_session) }
63
64 specify { expect(sudo_session).to be_sudo }
65 specify { expect(non_sudo_session).not_to be_sudo }
66 end
67end