56 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
require 'fast_spec_helper'
 | 
						|
require 'addressable'
 | 
						|
require 'rspec-parameterized'
 | 
						|
 | 
						|
RSpec.describe Gitlab::Sanitizers::ExceptionMessage, feature_category: :compliance_management do
 | 
						|
  describe '.clean' do
 | 
						|
    let(:exception_name) { exception.class.name }
 | 
						|
    let(:exception_message) { exception.message }
 | 
						|
 | 
						|
    subject { described_class.clean(exception_name, exception_message) }
 | 
						|
 | 
						|
    context 'when error is a URI::InvalidURIError' do
 | 
						|
      let(:exception) do
 | 
						|
        URI.parse('http://foo:bar')
 | 
						|
      rescue URI::InvalidURIError => error
 | 
						|
        error
 | 
						|
      end
 | 
						|
 | 
						|
      it { is_expected.to eq('bad URI(is not URI?): [FILTERED]') }
 | 
						|
    end
 | 
						|
 | 
						|
    context 'when error is an Addressable::URI::InvalidURIError' do
 | 
						|
      using RSpec::Parameterized::TableSyntax
 | 
						|
 | 
						|
      let(:exception) do
 | 
						|
        Addressable::URI.parse(uri)
 | 
						|
      rescue Addressable::URI::InvalidURIError => error
 | 
						|
        error
 | 
						|
      end
 | 
						|
 | 
						|
      where(:uri, :result) do
 | 
						|
        'http://foo:bar' | 'Invalid port number: [FILTERED]'
 | 
						|
        'http://foo:%eb' | 'Invalid encoding in port'
 | 
						|
        'ht%0atp://foo'  | 'Invalid scheme format: [FILTERED]'
 | 
						|
        'http:'          | 'Absolute URI missing hierarchical segment: [FILTERED]'
 | 
						|
        '::http'         | 'Cannot assemble URI string with ambiguous path: [FILTERED]'
 | 
						|
        'http://foo bar' | 'Invalid character in host: [FILTERED]'
 | 
						|
      end
 | 
						|
 | 
						|
      with_them do
 | 
						|
        it { is_expected.to eq(result) }
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    context 'with any other exception' do
 | 
						|
      let(:exception) { StandardError.new('Error message: http://foo@bar:baz@ex:ample.com') }
 | 
						|
 | 
						|
      it 'is not invoked and does nothing' do
 | 
						|
        is_expected.to eq('Error message: http://foo@bar:baz@ex:ample.com')
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |