64 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
require 'fast_spec_helper'
 | 
						|
 | 
						|
RSpec.describe Gitlab::Utils::LogLimitedArray do
 | 
						|
  describe '.log_limited_array' do
 | 
						|
    context 'when the argument is not an array' do
 | 
						|
      it 'returns an empty array' do
 | 
						|
        expect(described_class.log_limited_array('aa')).to eq([])
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    context 'when the argument is an array' do
 | 
						|
      context 'when the array is under the limit' do
 | 
						|
        it 'returns the array unchanged' do
 | 
						|
          expect(described_class.log_limited_array(%w[a b])).to eq(%w[a b])
 | 
						|
        end
 | 
						|
      end
 | 
						|
 | 
						|
      context 'when the array exceeds the limit' do
 | 
						|
        let(:long_array) do
 | 
						|
          half_limit = described_class::MAXIMUM_ARRAY_LENGTH / 2
 | 
						|
 | 
						|
          ['a' * half_limit, 'b' * half_limit, 'c']
 | 
						|
        end
 | 
						|
 | 
						|
        context 'when no sentinel value is passed' do
 | 
						|
          it 'replaces arguments after the limit with an ellipsis string' do
 | 
						|
            expect(described_class.log_limited_array(long_array))
 | 
						|
              .to eq(long_array.take(1) + ['...'])
 | 
						|
          end
 | 
						|
        end
 | 
						|
 | 
						|
        context 'when a sentinel value is passed' do
 | 
						|
          it 'replaces arguments after the limit with the sentinel' do
 | 
						|
            sentinel = { truncated: true }
 | 
						|
 | 
						|
            expect(described_class.log_limited_array(long_array, sentinel: sentinel))
 | 
						|
              .to eq(long_array.take(1) + [sentinel])
 | 
						|
          end
 | 
						|
        end
 | 
						|
      end
 | 
						|
 | 
						|
      context 'when the array contains arrays and hashes' do
 | 
						|
        it 'calculates the size based on the JSON representation' do
 | 
						|
          long_array = [
 | 
						|
            'a',
 | 
						|
            ['b'] * 10,
 | 
						|
            { c: 'c' * 10 },
 | 
						|
            # Each character in the array takes up four characters: the
 | 
						|
            # character itself, the two quotes, and the comma (closing
 | 
						|
            # square bracket for the last item)
 | 
						|
            ['d'] * (described_class::MAXIMUM_ARRAY_LENGTH / 4),
 | 
						|
            'e'
 | 
						|
          ]
 | 
						|
 | 
						|
          expect(described_class.log_limited_array(long_array))
 | 
						|
            .to eq(long_array.take(3) + ['...'])
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |