123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- # frozen_string_literal: true
- require 'rails_helper'
- RSpec.describe SessionActivation do
- describe '#detection' do
- let(:session_activation) { Fabricate(:session_activation, user_agent: 'Chrome/62.0.3202.89') }
- it 'sets a Browser instance as detection' do
- expect(session_activation.detection).to be_a Browser::Chrome
- end
- end
- describe '#browser' do
- before do
- allow(session_activation).to receive(:detection).and_return(detection)
- end
- let(:detection) { instance_double(Browser::Chrome, id: 1) }
- let(:session_activation) { Fabricate(:session_activation) }
- it 'returns detection.id' do
- expect(session_activation.browser).to be 1
- end
- end
- describe '#platform' do
- before do
- allow(session_activation).to receive(:detection).and_return(detection)
- end
- let(:session_activation) { Fabricate(:session_activation) }
- let(:detection) { instance_double(Browser::Chrome, platform: instance_double(Browser::Platform, id: 1)) }
- it 'returns detection.platform.id' do
- expect(session_activation.platform).to be 1
- end
- end
- describe '.active?' do
- subject { described_class.active?(id) }
- context 'when id is absent' do
- let(:id) { nil }
- it 'returns nil' do
- expect(subject).to be_nil
- end
- end
- context 'when id is present' do
- let(:id) { '1' }
- let!(:session_activation) { Fabricate(:session_activation, session_id: id) }
- context 'when id exists as session_id' do
- it 'returns true' do
- expect(subject).to be true
- end
- end
- context 'when id does not exist as session_id' do
- before do
- session_activation.update!(session_id: '2')
- end
- it 'returns false' do
- expect(subject).to be false
- end
- end
- end
- end
- describe '.activate' do
- let(:options) { { user: Fabricate(:user), session_id: '1' } }
- it 'calls create! and purge_old' do
- allow(described_class).to receive(:create!).with(**options)
- allow(described_class).to receive(:purge_old)
- described_class.activate(**options)
- expect(described_class).to have_received(:create!).with(**options)
- expect(described_class).to have_received(:purge_old)
- end
- it 'returns an instance of SessionActivation' do
- expect(described_class.activate(**options)).to be_a described_class
- end
- end
- describe '.deactivate' do
- context 'when id is absent' do
- let(:id) { nil }
- it 'returns nil' do
- expect(described_class.deactivate(id)).to be_nil
- end
- end
- context 'when id exists' do
- let!(:session_activation) { Fabricate(:session_activation) }
- it 'destroys the record' do
- described_class.deactivate(session_activation.session_id)
- expect { session_activation.reload }.to raise_error(ActiveRecord::RecordNotFound)
- end
- end
- end
- describe '.purge_old' do
- around do |example|
- before = Rails.configuration.x.max_session_activations
- Rails.configuration.x.max_session_activations = 1
- example.run
- Rails.configuration.x.max_session_activations = before
- end
- let!(:oldest_session_activation) { Fabricate(:session_activation, created_at: 10.days.ago) }
- let!(:newest_session_activation) { Fabricate(:session_activation, created_at: 5.days.ago) }
- it 'preserves the newest X records based on config' do
- described_class.purge_old
- expect { oldest_session_activation.reload }.to raise_error(ActiveRecord::RecordNotFound)
- expect { newest_session_activation.reload }.to_not raise_error
- end
- end
- describe '.exclusive' do
- let!(:unwanted_session_activation) { Fabricate(:session_activation) }
- let!(:wanted_session_activation) { Fabricate(:session_activation) }
- it 'preserves supplied record and destroys all others' do
- described_class.exclusive(wanted_session_activation.session_id)
- expect { unwanted_session_activation.reload }.to raise_error(ActiveRecord::RecordNotFound)
- expect { wanted_session_activation.reload }.to_not raise_error
- end
- end
- end
|