mirror of https://github.com/mastodon/mastodon
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			128 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Ruby
		
	
			
		
		
	
	
			128 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Ruby
		
	
# frozen_string_literal: true
 | 
						|
 | 
						|
require 'rails_helper'
 | 
						|
 | 
						|
RSpec.describe SessionActivation, type: :model 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_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
 |