From 6725327e1a2d0c29ae247bd6484e0af19fe909f6 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 14 Mar 2024 09:45:33 -0400 Subject: [PATCH 1/4] Rename code to options --- spec/controllers/concerns/api/error_handling_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/controllers/concerns/api/error_handling_spec.rb b/spec/controllers/concerns/api/error_handling_spec.rb index 9b36fc20a32..b743977784e 100644 --- a/spec/controllers/concerns/api/error_handling_spec.rb +++ b/spec/controllers/concerns/api/error_handling_spec.rb @@ -33,7 +33,7 @@ describe Api::ErrorHandling do OpenSSL::SSL::SSLError => 503, Seahorse::Client::NetworkingError => 503, Stoplight::Error::RedLight => 503, - }.each do |error, code| + }.each do |error, options| it "Handles error class of #{error}" do allow(FakeService) .to receive(:new) @@ -42,7 +42,7 @@ describe Api::ErrorHandling do get :failure expect(response) - .to have_http_status(code) + .to have_http_status(options) expect(FakeService) .to have_received(:new) end From 007bef5a64b7fcb37568ec13488f8e68d1443609 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 14 Mar 2024 09:46:41 -0400 Subject: [PATCH 2/4] Keep code in options hash --- .../concerns/api/error_handling_spec.rb | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/spec/controllers/concerns/api/error_handling_spec.rb b/spec/controllers/concerns/api/error_handling_spec.rb index b743977784e..bbcfd21ced0 100644 --- a/spec/controllers/concerns/api/error_handling_spec.rb +++ b/spec/controllers/concerns/api/error_handling_spec.rb @@ -19,20 +19,20 @@ describe Api::ErrorHandling do end { - ActiveRecord::RecordInvalid => 422, - ActiveRecord::RecordNotFound => 404, - ActiveRecord::RecordNotUnique => 422, - Date::Error => 422, - HTTP::Error => 503, - Mastodon::InvalidParameterError => 400, - Mastodon::NotPermittedError => 403, - Mastodon::RaceConditionError => 503, - Mastodon::RateLimitExceededError => 429, - Mastodon::UnexpectedResponseError => 503, - Mastodon::ValidationError => 422, - OpenSSL::SSL::SSLError => 503, - Seahorse::Client::NetworkingError => 503, - Stoplight::Error::RedLight => 503, + ActiveRecord::RecordInvalid => { code: 422 }, + ActiveRecord::RecordNotFound => { code: 404 }, + ActiveRecord::RecordNotUnique => { code: 422 }, + Date::Error => { code: 422 }, + HTTP::Error => { code: 503 }, + Mastodon::InvalidParameterError => { code: 400 }, + Mastodon::NotPermittedError => { code: 403 }, + Mastodon::RaceConditionError => { code: 503 }, + Mastodon::RateLimitExceededError => { code: 429 }, + Mastodon::UnexpectedResponseError => { code: 503 }, + Mastodon::ValidationError => { code: 422 }, + OpenSSL::SSL::SSLError => { code: 503 }, + Seahorse::Client::NetworkingError => { code: 503 }, + Stoplight::Error::RedLight => { code: 503 }, }.each do |error, options| it "Handles error class of #{error}" do allow(FakeService) @@ -42,7 +42,7 @@ describe Api::ErrorHandling do get :failure expect(response) - .to have_http_status(options) + .to have_http_status(options[:code]) expect(FakeService) .to have_received(:new) end From 014a18ae9d31448abe555038df669b541f6e7b19 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 14 Mar 2024 09:48:25 -0400 Subject: [PATCH 3/4] Check error message --- .../concerns/api/error_handling_spec.rb | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/spec/controllers/concerns/api/error_handling_spec.rb b/spec/controllers/concerns/api/error_handling_spec.rb index bbcfd21ced0..102891d2ee7 100644 --- a/spec/controllers/concerns/api/error_handling_spec.rb +++ b/spec/controllers/concerns/api/error_handling_spec.rb @@ -19,20 +19,20 @@ describe Api::ErrorHandling do end { - ActiveRecord::RecordInvalid => { code: 422 }, - ActiveRecord::RecordNotFound => { code: 404 }, - ActiveRecord::RecordNotUnique => { code: 422 }, - Date::Error => { code: 422 }, - HTTP::Error => { code: 503 }, - Mastodon::InvalidParameterError => { code: 400 }, - Mastodon::NotPermittedError => { code: 403 }, - Mastodon::RaceConditionError => { code: 503 }, - Mastodon::RateLimitExceededError => { code: 429 }, - Mastodon::UnexpectedResponseError => { code: 503 }, - Mastodon::ValidationError => { code: 422 }, - OpenSSL::SSL::SSLError => { code: 503 }, - Seahorse::Client::NetworkingError => { code: 503 }, - Stoplight::Error::RedLight => { code: 503 }, + ActiveRecord::RecordInvalid => { code: 422, message: // }, + ActiveRecord::RecordNotFound => { code: 404, message: // }, + ActiveRecord::RecordNotUnique => { code: 422, message: // }, + Date::Error => { code: 422, message: // }, + HTTP::Error => { code: 503, message: // }, + Mastodon::InvalidParameterError => { code: 400, message: // }, + Mastodon::NotPermittedError => { code: 403, message: // }, + Mastodon::RaceConditionError => { code: 503, message: // }, + Mastodon::RateLimitExceededError => { code: 429, message: // }, + Mastodon::UnexpectedResponseError => { code: 503, message: // }, + Mastodon::ValidationError => { code: 422, message: // }, + OpenSSL::SSL::SSLError => { code: 503, message: // }, + Seahorse::Client::NetworkingError => { code: 503, message: // }, + Stoplight::Error::RedLight => { code: 503, message: // }, }.each do |error, options| it "Handles error class of #{error}" do allow(FakeService) @@ -45,6 +45,10 @@ describe Api::ErrorHandling do .to have_http_status(options[:code]) expect(FakeService) .to have_received(:new) + expect(body_as_json) + .to include( + error: match(options[:message]) + ) end end end From 2dc09d3c31851e0c0ba77d96ac7a8ad65e6b4d25 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 14 Mar 2024 09:52:16 -0400 Subject: [PATCH 4/4] Use actual messages --- .../concerns/api/error_handling_spec.rb | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/spec/controllers/concerns/api/error_handling_spec.rb b/spec/controllers/concerns/api/error_handling_spec.rb index 102891d2ee7..b8bf6b3dd02 100644 --- a/spec/controllers/concerns/api/error_handling_spec.rb +++ b/spec/controllers/concerns/api/error_handling_spec.rb @@ -19,20 +19,20 @@ describe Api::ErrorHandling do end { - ActiveRecord::RecordInvalid => { code: 422, message: // }, - ActiveRecord::RecordNotFound => { code: 404, message: // }, - ActiveRecord::RecordNotUnique => { code: 422, message: // }, - Date::Error => { code: 422, message: // }, - HTTP::Error => { code: 503, message: // }, + ActiveRecord::RecordInvalid => { code: 422, message: /invalid/i }, + ActiveRecord::RecordNotFound => { code: 404, message: /record not found/i }, + ActiveRecord::RecordNotUnique => { code: 422, message: /duplicate record/i }, + Date::Error => { code: 422, message: /invalid date/i }, + HTTP::Error => { code: 503, message: /remote data could not/i }, Mastodon::InvalidParameterError => { code: 400, message: // }, - Mastodon::NotPermittedError => { code: 403, message: // }, - Mastodon::RaceConditionError => { code: 503, message: // }, - Mastodon::RateLimitExceededError => { code: 429, message: // }, - Mastodon::UnexpectedResponseError => { code: 503, message: // }, - Mastodon::ValidationError => { code: 422, message: // }, - OpenSSL::SSL::SSLError => { code: 503, message: // }, - Seahorse::Client::NetworkingError => { code: 503, message: // }, - Stoplight::Error::RedLight => { code: 503, message: // }, + Mastodon::NotPermittedError => { code: 403, message: /action is not allowed/i }, + Mastodon::RaceConditionError => { code: 503, message: /temporary problem serving/i }, + Mastodon::RateLimitExceededError => { code: 429, message: /too many requests/i }, + Mastodon::UnexpectedResponseError => { code: 503, message: /remote data could not/i }, + Mastodon::ValidationError => { code: 422, message: /validation/i }, + OpenSSL::SSL::SSLError => { code: 503, message: /ssl certificate could not/i }, + Seahorse::Client::NetworkingError => { code: 503, message: /temporary problem serving/i }, + Stoplight::Error::RedLight => { code: 503, message: /temporary problem serving/i }, }.each do |error, options| it "Handles error class of #{error}" do allow(FakeService)