summaryrefslogtreecommitdiff
path: root/spec/lib/gitlab/rate_limit_helpers_spec.rb
blob: ad0e2de144833dad5ea73a8d4fd8c865ac300570 (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
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe Gitlab::RateLimitHelpers, :clean_gitlab_redis_rate_limiting do
  let(:limiter_class) do
    Class.new do
      include ::Gitlab::RateLimitHelpers

      attr_reader :request

      def initialize(request)
        @request = request
      end
    end
  end

  let(:request) { instance_double(ActionDispatch::Request, request_method: 'GET', ip: '127.0.0.1', fullpath: '/') }
  let(:class_instance) { limiter_class.new(request) }

  let_it_be(:user) { create(:user) }
  let_it_be(:project) { create(:project) }

  describe '#archive_rate_limit_reached?' do
    context 'with a user' do
      it 'rate limits the user properly' do
        5.times do
          expect(class_instance.archive_rate_limit_reached?(user, project)).to be_falsey
        end

        expect(class_instance.archive_rate_limit_reached?(user, project)).to be_truthy
      end
    end

    context 'with an anonymous user' do
      before do
        stub_const('Gitlab::RateLimitHelpers::ARCHIVE_RATE_ANONYMOUS_THRESHOLD', 2)
      end

      it 'rate limits with higher limits' do
        2.times do
          expect(class_instance.archive_rate_limit_reached?(nil, project)).to be_falsey
        end

        expect(class_instance.archive_rate_limit_reached?(nil, project)).to be_truthy
        expect(class_instance.archive_rate_limit_reached?(user, project)).to be_falsey
      end
    end
  end
end