Merge pull request #52825 from fatkodima/include-caching-in-api-controllers

Fix rate limiting for `ActionController::API` controllers
This commit is contained in:
Ryuta Kamizono 2024-09-07 17:47:34 +09:00 committed by GitHub
commit 2ae883cc16
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 41 additions and 0 deletions

View File

@ -123,6 +123,7 @@ module ActionController
BasicImplicitRender,
StrongParameters,
RateLimiting,
Caching,
DataStreaming,
DefaultHeaders,

View File

@ -0,0 +1,40 @@
# frozen_string_literal: true
require "abstract_unit"
class ApiRateLimitedController < ActionController::API
self.cache_store = ActiveSupport::Cache::MemoryStore.new
rate_limit to: 2, within: 2.seconds, only: :limited_to_two
def limited_to_two
head :ok
end
end
class ApiRateLimitingTest < ActionController::TestCase
tests ApiRateLimitedController
setup do
ApiRateLimitedController.cache_store.clear
end
test "exceeding basic limit" do
get :limited_to_two
get :limited_to_two
assert_response :ok
get :limited_to_two
assert_response :too_many_requests
end
test "limit resets after time" do
get :limited_to_two
get :limited_to_two
assert_response :ok
travel_to Time.now + 3.seconds do
get :limited_to_two
assert_response :ok
end
end
end