Add tests for SessionActivation (#5668)
* Fabricate SessionActivation not only user_id but user association. * Add tests for SessionActivationmaster
parent
cf7e840990
commit
60f247c2e7
@ -1,4 +1,4 @@ |
||||
Fabricator(:session_activation) do |
||||
user_id 1 |
||||
user |
||||
session_id "MyString" |
||||
end |
||||
|
@ -1,5 +1,127 @@ |
||||
# frozen_string_literal: true |
||||
|
||||
require 'rails_helper' |
||||
|
||||
RSpec.describe SessionActivation, type: :model do |
||||
pending "add some examples to (or delete) #{__FILE__}" |
||||
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_kind_of Browser::Chrome |
||||
end |
||||
end |
||||
|
||||
describe '#browser' do |
||||
before do |
||||
allow(session_activation).to receive(:detection).and_return(detection) |
||||
end |
||||
|
||||
let(:detection) { double(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) { double(platform: double(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 'id is absent' do |
||||
let(:id) { nil } |
||||
|
||||
it 'returns nil' do |
||||
is_expected.to be nil |
||||
end |
||||
end |
||||
|
||||
context 'id is present' do |
||||
let(:id) { '1' } |
||||
let!(:session_activation) { Fabricate(:session_activation, session_id: id) } |
||||
|
||||
context 'id exists as session_id' do |
||||
it 'returns true' do |
||||
is_expected.to be true |
||||
end |
||||
end |
||||
|
||||
context 'id does not exist as session_id' do |
||||
before do |
||||
session_activation.update!(session_id: '2') |
||||
end |
||||
|
||||
it 'returns false' do |
||||
is_expected.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 |
||||
expect(described_class).to receive(:create!).with(options) |
||||
expect(described_class).to receive(:purge_old) |
||||
described_class.activate(options) |
||||
end |
||||
|
||||
it 'returns an instance of SessionActivation' do |
||||
expect(described_class.activate(options)).to be_kind_of SessionActivation |
||||
end |
||||
end |
||||
|
||||
describe '.deactivate' do |
||||
context 'id is absent' do |
||||
let(:id) { nil } |
||||
|
||||
it 'returns nil' do |
||||
expect(described_class.deactivate(id)).to be nil |
||||
end |
||||
end |
||||
|
||||
context 'id exists' do |
||||
let(:id) { '1' } |
||||
|
||||
it 'calls where.destroy_all' do |
||||
expect(described_class).to receive_message_chain(:where, :destroy_all) |
||||
.with(session_id: id).with(no_args) |
||||
|
||||
described_class.deactivate(id) |
||||
end |
||||
end |
||||
end |
||||
|
||||
describe '.purge_old' do |
||||
it 'calls order.offset.destroy_all' do |
||||
expect(described_class).to receive_message_chain(:order, :offset, :destroy_all) |
||||
.with('created_at desc').with(Rails.configuration.x.max_session_activations).with(no_args) |
||||
|
||||
described_class.purge_old |
||||
end |
||||
end |
||||
|
||||
describe '.exclusive' do |
||||
let(:id) { '1' } |
||||
|
||||
it 'calls where.destroy_all' do |
||||
expect(described_class).to receive_message_chain(:where, :destroy_all) |
||||
.with('session_id != ?', id).with(no_args) |
||||
|
||||
described_class.exclusive(id) |
||||
end |
||||
end |
||||
end |
||||
|
Loading…
Reference in new issue