mirror of
https://github.com/ditkrg/idempotent-request.git
synced 2026-01-22 13:56:45 +00:00
Allow configuring concurrent request response status
This commit is contained in:
parent
29f3709846
commit
437462e1cc
@ -5,6 +5,7 @@ module IdempotentRequest
|
|||||||
@config = config
|
@config = config
|
||||||
@policy = config.fetch(:policy)
|
@policy = config.fetch(:policy)
|
||||||
@notifier = ActiveSupport::Notifications if defined?(ActiveSupport::Notifications)
|
@notifier = ActiveSupport::Notifications if defined?(ActiveSupport::Notifications)
|
||||||
|
@conflict_response_status = config.fetch(:conflict_response_status, 429)
|
||||||
end
|
end
|
||||||
|
|
||||||
def call(env)
|
def call(env)
|
||||||
@ -45,7 +46,7 @@ module IdempotentRequest
|
|||||||
end
|
end
|
||||||
|
|
||||||
def concurrent_request_response
|
def concurrent_request_response
|
||||||
status = 429
|
status = @conflict_response_status
|
||||||
headers = { 'Content-Type' => 'application/json' }
|
headers = { 'Content-Type' => 'application/json' }
|
||||||
body = [ Oj.dump('error' => 'Concurrent requests detected') ]
|
body = [ Oj.dump('error' => 'Concurrent requests detected') ]
|
||||||
request.env['idempotent.request']['concurrent_request_response'] = true
|
request.env['idempotent.request']['concurrent_request_response'] = true
|
||||||
|
|||||||
@ -12,11 +12,13 @@ RSpec.describe IdempotentRequest::Middleware do
|
|||||||
let(:policy) do
|
let(:policy) do
|
||||||
class_double('IdempotentRequest::policy', new: double(should?: true))
|
class_double('IdempotentRequest::policy', new: double(should?: true))
|
||||||
end
|
end
|
||||||
|
let(:conflict_response_status) { 429 }
|
||||||
|
|
||||||
let(:middleware) do
|
let(:middleware) do
|
||||||
described_class.new(app,
|
described_class.new(app,
|
||||||
policy: policy,
|
policy: policy,
|
||||||
storage: storage,
|
storage: storage,
|
||||||
|
conflict_response_status: conflict_response_status,
|
||||||
header_key: 'X-Qonto-Idempotency-Key'
|
header_key: 'X-Qonto-Idempotency-Key'
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
@ -80,10 +82,20 @@ RSpec.describe IdempotentRequest::Middleware do
|
|||||||
middleware.call(env)
|
middleware.call(env)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns 429' do
|
it 'returns 429 status' do
|
||||||
expect_any_instance_of(described_class).to receive(:concurrent_request_response)
|
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
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user