48 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
require 'spec_helper'
 | 
						|
 | 
						|
RSpec.describe Gitlab::ExternalAuthorization::Logger do
 | 
						|
  let(:request_time) { Time.parse('2018-03-26 20:22:15') }
 | 
						|
 | 
						|
  def fake_access(has_access, user, load_type = :request)
 | 
						|
    access = double('access')
 | 
						|
    allow(access).to receive_messages(user: user,
 | 
						|
                                      has_access?: has_access,
 | 
						|
                                      loaded_at: request_time,
 | 
						|
                                      label: 'dummy_label',
 | 
						|
                                      load_type: load_type)
 | 
						|
 | 
						|
    access
 | 
						|
  end
 | 
						|
 | 
						|
  describe '.log_access' do
 | 
						|
    it 'logs a nice message for an access request' do
 | 
						|
      expected_message = "GRANTED admin@example.com access to 'dummy_label' (the/project/path)"
 | 
						|
      fake_access = fake_access(true, build(:user, email: 'admin@example.com'))
 | 
						|
 | 
						|
      expect(described_class).to receive(:info).with(expected_message)
 | 
						|
 | 
						|
      described_class.log_access(fake_access, 'the/project/path')
 | 
						|
    end
 | 
						|
 | 
						|
    it 'does not trip without a project path' do
 | 
						|
      expected_message = "DENIED admin@example.com access to 'dummy_label'"
 | 
						|
      fake_access = fake_access(false, build(:user, email: 'admin@example.com'))
 | 
						|
 | 
						|
      expect(described_class).to receive(:info).with(expected_message)
 | 
						|
 | 
						|
      described_class.log_access(fake_access, nil)
 | 
						|
    end
 | 
						|
 | 
						|
    it 'adds the load time for cached accesses' do
 | 
						|
      expected_message = "DENIED admin@example.com access to 'dummy_label' - cache #{request_time}"
 | 
						|
      fake_access = fake_access(false, build(:user, email: 'admin@example.com'), :cache)
 | 
						|
 | 
						|
      expect(described_class).to receive(:info).with(expected_message)
 | 
						|
 | 
						|
      described_class.log_access(fake_access, nil)
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |