mastodon/spec/models/session_activation_spec.rb
2025-11-26 10:26:39 +00:00

114 lines
3.2 KiB
Ruby

# frozen_string_literal: true
require 'rails_helper'
RSpec.describe SessionActivation do
it_behaves_like 'BrowserDetection'
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(:user) { Fabricate :user }
let!(:session_activation) { Fabricate :session_activation, user: }
around do |example|
original = Rails.configuration.x.max_session_activations
Rails.configuration.x.max_session_activations = 1
example.run
Rails.configuration.x.max_session_activations = original
end
it 'creates a new activation and purges older ones' do
result = described_class.activate(user: user, session_id: '123')
expect(result)
.to be_a(described_class)
.and have_attributes(session_id: '123', user:)
expect { session_activation.reload }
.to raise_error(ActiveRecord::RecordNotFound)
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