Add LoginActivity model spec and BrowserDetection concern shared example (#32959)

This commit is contained in:
Matt Jankowski 2024-11-19 04:15:05 -05:00 committed by GitHub
parent 9fc2fc2251
commit 87e7ad9b8f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 55 additions and 33 deletions

View file

@ -0,0 +1,17 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe LoginActivity do
include_examples 'BrowserDetection'
describe 'Associations' do
it { is_expected.to belong_to(:user).required }
end
describe 'Validations' do
subject { Fabricate.build :login_activity }
it { is_expected.to define_enum_for(:authentication_method).backed_by_column_of_type(:string) }
end
end

View file

@ -3,39 +3,7 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe SessionActivation do RSpec.describe SessionActivation do
describe '#detection' do include_examples 'BrowserDetection'
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 describe '.active?' do
subject { described_class.active?(id) } subject { described_class.active?(id) }

View file

@ -0,0 +1,37 @@
# frozen_string_literal: true
RSpec.shared_examples 'BrowserDetection' do
subject { described_class.new(user_agent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.1 Safari/605.1.15') }
describe '#detection' do
it 'sets a Browser instance as detection' do
expect(subject.detection)
.to be_a(Browser::Safari)
end
end
describe '#browser' do
it 'returns browser name from id' do
expect(subject.browser)
.to eq(:safari)
end
end
describe '#platform' do
it 'returns detected platform' do
expect(subject.platform)
.to eq(:mac)
end
end
describe 'Callbacks' do
describe 'populating the user_agent value' do
subject { Fabricate.build described_class.name.underscore.to_sym, user_agent: nil }
it 'changes nil to empty string' do
expect { subject.save }
.to change(subject, :user_agent).from(nil).to('')
end
end
end
end