From 384a195cbd96f876c1fca02dfcfcb9188b69fe48 Mon Sep 17 00:00:00 2001 From: Nastia Gorokhova-Alekseeva Date: Tue, 15 Feb 2022 18:28:29 +0300 Subject: [PATCH] Treat 406 from Microsoft as 429 --- lib/webpush/request.rb | 2 +- spec/webpush_spec.rb | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/webpush/request.rb b/lib/webpush/request.rb index d90a01f..7460f24 100644 --- a/lib/webpush/request.rb +++ b/lib/webpush/request.rb @@ -175,7 +175,7 @@ def verify_response(resp) raise Unauthorized.new(resp, uri.host) elsif resp.is_a?(Net::HTTPRequestEntityTooLarge) # 413 raise PayloadTooLarge.new(resp, uri.host) - elsif resp.is_a?(Net::HTTPTooManyRequests) # 429, try again later! + elsif resp.is_a?(Net::HTTPTooManyRequests) || resp.is_a?(Net::HTTPNotAcceptable) # 429, try again later! or 406 from Microsoft raise TooManyRequests.new(resp, uri.host) elsif resp.is_a?(Net::HTTPServerError) # 5xx raise PushServiceError.new(resp, uri.host) diff --git a/spec/webpush_spec.rb b/spec/webpush_spec.rb index a6866cb..7b4e324 100644 --- a/spec/webpush_spec.rb +++ b/spec/webpush_spec.rb @@ -44,6 +44,12 @@ expect { subject }.to raise_error(Webpush::TooManyRequests) end + it 'raises TooManyRequests if the API returns a 406 Error' do + stub_request(:post, expected_endpoint) + .to_return(status: 406, body: '', headers: {}) + expect { subject }.to raise_error(Webpush::TooManyRequests) + end + it 'raises PushServiceError if the API returns a 5xx Error' do stub_request(:post, expected_endpoint) .to_return(status: 500, body: '', headers: {})