Skip to content

Commit

Permalink
Add tests for SessionActivation (mastodon#5668)
Browse files Browse the repository at this point in the history
* Fabricate SessionActivation

not only user_id but user association.

* Add tests for SessionActivation
  • Loading branch information
ysksn authored and ykzts committed Nov 13, 2017
1 parent cf7e840 commit 60f247c
Show file tree
Hide file tree
Showing 2 changed files with 124 additions and 2 deletions.
2 changes: 1 addition & 1 deletion spec/fabricators/session_activation_fabricator.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Fabricator(:session_activation) do
user_id 1
user
session_id "MyString"
end
124 changes: 123 additions & 1 deletion spec/models/session_activation_spec.rb
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 60f247c

Please sign in to comment.