File: rack_attack_track_spec.rb

package info (click to toggle)
ruby-rack-attack 6.8.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 384 kB
  • sloc: ruby: 2,689; makefile: 4
file content (53 lines) | stat: -rw-r--r-- 1,385 bytes parent folder | download
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
# frozen_string_literal: true

require_relative 'spec_helper'

describe 'Rack::Attack.track' do
  let(:notifications) { [] }

  before do
    Rack::Attack.track("everything") { |_req| true }
  end

  it_allows_ok_requests

  it "should tag the env" do
    get '/'

    _(last_request.env['rack.attack.matched']).must_equal 'everything'
    _(last_request.env['rack.attack.match_type']).must_equal :track
  end

  describe "with a notification subscriber and two tracks" do
    before do
      # A second track
      Rack::Attack.track("homepage") { |req| req.path == "/" }

      ActiveSupport::Notifications.subscribe("track.rack_attack") do |_name, _start, _finish, _id, payload|
        notifications.push(payload)
      end

      get "/"
    end

    it "should notify twice" do
      _(notifications.size).must_equal 2
    end
  end

  describe "without limit and period options" do
    it "should assign the track filter to a Check instance" do
      track = Rack::Attack.track("homepage") { |req| req.path == "/" }

      _(track.filter.class).must_equal Rack::Attack::Check
    end
  end

  describe "with limit and period options" do
    it "should assign the track filter to a Throttle instance" do
      track = Rack::Attack.track("homepage", limit: 10, period: 10) { |req| req.path == "/" }

      _(track.filter.class).must_equal Rack::Attack::Throttle
    end
  end
end