summaryrefslogtreecommitdiff
path: root/spec/lib/gitlab/grape_logging/loggers/filter_parameters_spec.rb
blob: 15c842c9f4445b6897a567ad081e86d00aee84b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe Gitlab::GrapeLogging::Loggers::FilterParameters do
  subject { described_class.new }

  describe ".parameters" do
    let(:route) { instance_double('Grape::Router::Route', settings: settings) }
    let(:endpoint) { instance_double('Grape::Endpoint', route: route) }

    let(:env) do
      { 'rack.input' => '', Grape::Env::API_ENDPOINT => endpoint }
    end

    let(:mock_request) { ActionDispatch::Request.new(env) }

    before do
      mock_request.params['key'] = 'some key'
      mock_request.params['foo'] = 'wibble'
      mock_request.params['value'] = 'some value'
      mock_request.params['oof'] = 'wobble'
      mock_request.params['other'] = 'Unaffected'
    end

    context 'when the log_safety setting is provided' do
      let(:settings) { { log_safety: { safe: %w[foo bar key], unsafe: %w[oof rab value] } } }

      it 'includes safe parameters, and filters unsafe ones' do
        data = subject.parameters(mock_request, nil)

        expect(data).to eq(
          params: {
            'key' => 'some key',
            'foo' => 'wibble',
            'value' => '[FILTERED]',
            'oof' => '[FILTERED]',
            'other' => 'Unaffected'
          }
        )
      end
    end

    context 'when the log_safety is not provided' do
      let(:settings) { {} }

      it 'behaves like the normal parameter filter' do
        data = subject.parameters(mock_request, nil)

        expect(data).to eq(
          params: {
            'key' => '[FILTERED]',
            'foo' => 'wibble',
            'value' => 'some value',
            'oof' => 'wobble',
            'other' => 'Unaffected'
          }
        )
      end
    end
  end
end