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