From 330d25c8324438c356e681646b7d1be2d28901b2 Mon Sep 17 00:00:00 2001 From: Gonzalo Rodriguez Date: Tue, 20 Mar 2018 11:42:27 -0300 Subject: [PATCH] Acceptance test cache store config when Rails is present --- rack-attack.gemspec | 2 ++ .../cache_store_config_with_rails_spec.rb | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 spec/acceptance/cache_store_config_with_rails_spec.rb diff --git a/rack-attack.gemspec b/rack-attack.gemspec index 07f2931..b5a1909 100644 --- a/rack-attack.gemspec +++ b/rack-attack.gemspec @@ -23,7 +23,9 @@ Gem::Specification.new do |s| s.required_ruby_version = '>= 2.0.0' s.add_dependency 'rack' + s.add_development_dependency 'minitest' + s.add_development_dependency "minitest-stub-const" s.add_development_dependency 'rack-test' s.add_development_dependency 'rake' s.add_development_dependency 'appraisal' diff --git a/spec/acceptance/cache_store_config_with_rails_spec.rb b/spec/acceptance/cache_store_config_with_rails_spec.rb new file mode 100644 index 0000000..bd87828 --- /dev/null +++ b/spec/acceptance/cache_store_config_with_rails_spec.rb @@ -0,0 +1,31 @@ +require_relative "../spec_helper" +require "minitest/stub_const" +require "ostruct" + +describe "Cache store config with Rails" do + before do + Rack::Attack.throttle("by ip", limit: 1, period: 60) do |request| + request.ip + end + end + + it "fails when Rails.cache is not set" do + Object.stub_const(:Rails, OpenStruct.new(cache: nil)) do + assert_raises(Rack::Attack::MissingStoreError) do + get "/", {}, "REMOTE_ADDR" => "1.2.3.4" + end + end + end + + it "works when Rails.cache is set" do + Object.stub_const(:Rails, OpenStruct.new(cache: ActiveSupport::Cache::MemoryStore.new)) do + get "/", {}, "REMOTE_ADDR" => "1.2.3.4" + + assert_equal 200, last_response.status + + get "/", {}, "REMOTE_ADDR" => "1.2.3.4" + + assert_equal 429, last_response.status + end + end +end