Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix Action Mailbox assuming request.body present
In Rack 3.1, `rack.intput` (`request.body`) is no longer guaranteed to be present, so we can no longer unconditionally call `read` on it. I tried adding a test: ```diff diff --git a/actionmailbox/test/controllers/ingresses/relay/inbound_emails_controller_test.rb b/actionmailbox/test/controllers/ingresses/relay/inbound_emails_controller_test.rb index dcf698ae4a..bec607ce99 100644 --- a/actionmailbox/test/controllers/ingresses/relay/inbound_emails_controller_test.rb +++ b/actionmailbox/test/controllers/ingresses/relay/inbound_emails_controller_test.rb @@ -31,6 +31,15 @@ class ActionMailbox::Ingresses::Relay::InboundEmailsControllerTest < ActionDispa assert_equal "[email protected]", inbound_email.message_id end + test "rejecting a request with no body" do + assert_no_difference -> { ActionMailbox::InboundEmail.count } do + post rails_relay_inbound_emails_url, headers: { "Authorization" => credentials, "Content-Type" => "message/rfc822" } + end + + assert_response :unprocessable_entity + end + test "rejecting an unauthorized inbound email" do assert_no_difference -> { ActionMailbox::InboundEmail.count } do post rails_relay_inbound_emails_url, headers: { "Content-Type" => "message/rfc822" }, ``` However, this doesn't currently work because `IntegrationTest` ends up calling `Rack::Test::Session#request` (which goes through `Rack::MockRequest`) and forces `rack.input` to be present in the test.
- Loading branch information