77 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
require 'fast_spec_helper'
 | 
						|
 | 
						|
RSpec.describe Gitlab::APIAuthentication::Builder do
 | 
						|
  describe '#build' do
 | 
						|
    shared_examples 'builds the correct result' do |token_type:, sent_through:, builds:|
 | 
						|
      context "with #{token_type.size} token type(s) and #{sent_through.size} sent through(s)" do
 | 
						|
        it 'works when passed together' do
 | 
						|
          strategies = described_class.new.build { |allow| allow.token_types(*token_type).sent_through(*sent_through) }
 | 
						|
 | 
						|
          expect(strategies).to eq(builds)
 | 
						|
        end
 | 
						|
 | 
						|
        it 'works when token types are passed separately' do
 | 
						|
          strategies = described_class.new.build { |allow| token_type.each { |t| allow.token_types(t).sent_through(*sent_through) } }
 | 
						|
 | 
						|
          expect(strategies).to eq(builds)
 | 
						|
        end
 | 
						|
 | 
						|
        it 'works when sent throughs are passed separately' do
 | 
						|
          strategies = described_class.new.build { |allow| sent_through.each { |s| allow.token_types(*token_type).sent_through(s) } }
 | 
						|
 | 
						|
          expect(strategies).to eq(builds)
 | 
						|
        end
 | 
						|
 | 
						|
        it 'works when token types and sent throughs are passed separately' do
 | 
						|
          strategies = described_class.new.build { |allow| token_type.each { |t| sent_through.each { |s| allow.token_types(t).sent_through(s) } } }
 | 
						|
 | 
						|
          expect(strategies).to eq(builds)
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    it_behaves_like 'builds the correct result',
 | 
						|
      token_type: [:pat],
 | 
						|
      sent_through: [:basic],
 | 
						|
      builds: { basic: [:pat] }
 | 
						|
 | 
						|
    it_behaves_like 'builds the correct result',
 | 
						|
      token_type: [:pat],
 | 
						|
      sent_through: [:basic, :oauth],
 | 
						|
      builds: { basic: [:pat], oauth: [:pat] }
 | 
						|
 | 
						|
    it_behaves_like 'builds the correct result',
 | 
						|
      token_type: [:pat, :job],
 | 
						|
      sent_through: [:basic],
 | 
						|
      builds: { basic: [:pat, :job] }
 | 
						|
 | 
						|
    it_behaves_like 'builds the correct result',
 | 
						|
      token_type: [:pat, :job],
 | 
						|
      sent_through: [:basic, :oauth],
 | 
						|
      builds: { basic: [:pat, :job], oauth: [:pat, :job] }
 | 
						|
 | 
						|
    context 'with a complex auth strategy' do
 | 
						|
      it 'builds the correct result' do
 | 
						|
        strategies = described_class.new.build do |allow|
 | 
						|
          allow.token_types(:pat, :job, :deploy).sent_through(:http_basic, :oauth)
 | 
						|
          allow.token_types(:pat).sent_through(:http_private, :query_private)
 | 
						|
          allow.token_types(:oauth2).sent_through(:http_bearer, :query_access)
 | 
						|
        end
 | 
						|
 | 
						|
        expect(strategies).to eq({
 | 
						|
          http_basic: [:pat, :job, :deploy],
 | 
						|
          oauth: [:pat, :job, :deploy],
 | 
						|
 | 
						|
          http_private: [:pat],
 | 
						|
          query_private: [:pat],
 | 
						|
 | 
						|
          http_bearer: [:oauth2],
 | 
						|
          query_access: [:oauth2]
 | 
						|
        })
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |