Allow configuring concurrent request response status

This commit is contained in:
Laurynas Butkus 2019-12-11 00:19:18 +02:00
parent 29f3709846
commit 437462e1cc
2 changed files with 17 additions and 4 deletions

View File

@ -5,6 +5,7 @@ module IdempotentRequest
@config = config
@policy = config.fetch(:policy)
@notifier = ActiveSupport::Notifications if defined?(ActiveSupport::Notifications)
@conflict_response_status = config.fetch(:conflict_response_status, 429)
end
def call(env)
@ -45,7 +46,7 @@ module IdempotentRequest
end
def concurrent_request_response
status = 429
status = @conflict_response_status
headers = { 'Content-Type' => 'application/json' }
body = [ Oj.dump('error' => 'Concurrent requests detected') ]
request.env['idempotent.request']['concurrent_request_response'] = true

View File

@ -12,11 +12,13 @@ RSpec.describe IdempotentRequest::Middleware do
let(:policy) do
class_double('IdempotentRequest::policy', new: double(should?: true))
end
let(:conflict_response_status) { 429 }
let(:middleware) do
described_class.new(app,
policy: policy,
storage: storage,
conflict_response_status: conflict_response_status,
header_key: 'X-Qonto-Idempotency-Key'
)
end
@ -80,10 +82,20 @@ RSpec.describe IdempotentRequest::Middleware do
middleware.call(env)
end
it 'returns 429' do
expect_any_instance_of(described_class).to receive(:concurrent_request_response)
it 'returns 429 status' do
status, _headers, _body = middleware.call(env)
middleware.call(env)
expect(status).to be(429)
end
context 'when custom response status is set' do
let(:conflict_response_status) { 409 }
it 'returns 409 status' do
status, _headers, _body = middleware.call(env)
expect(status).to be(409)
end
end
end
end