Merge pull request #4 from laurynas/feature/concurrent_request_response_status

Allow configuring concurrent request response status
This commit is contained in:
Dmytro Zakharov 2020-11-13 15:44:25 +01:00 committed by GitHub
commit 4900c3af68
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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