From b1fa433a47d1b7ecf562f88e0929f4a8c151c23e Mon Sep 17 00:00:00 2001 From: Enrique Mogollan Date: Sat, 12 Jul 2025 00:47:09 -0700 Subject: [PATCH] Adding test for streamable errors for http transport --- .../streamable_http_transport_test.rb | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/test/mcp/server/transports/streamable_http_transport_test.rb b/test/mcp/server/transports/streamable_http_transport_test.rb index 536f6cff..2e86696c 100644 --- a/test/mcp/server/transports/streamable_http_transport_test.rb +++ b/test/mcp/server/transports/streamable_http_transport_test.rb @@ -566,6 +566,41 @@ class StreamableHTTPTransportTest < ActiveSupport::TestCase assert_not @transport.instance_variable_get(:@sessions).key?(session_id) end + test "responds with 405 for unsupported methods" do + request = create_rack_request( + "PUT", + "/", + {}, + ) + + response = @transport.handle_request(request) + assert_equal 405, response[0] + assert_equal({ "Content-Type" => "application/json" }, response[1]) + + body = JSON.parse(response[2][0]) + assert_equal "Method not allowed", body["error"] + end + + test "handle post request with a standard error" do + request = create_rack_request( + "POST", + "/", + { "CONTENT_TYPE" => "application/json" }, + { jsonrpc: "2.0", method: "initialize", id: "4567" }.to_json, + ) + + @transport.define_singleton_method(:extract_session_id) do |_request| + raise StandardError, "Test error" + end + + response = @transport.handle_request(request) + assert_equal 500, response[0] + assert_equal({ "Content-Type" => "application/json" }, response[1]) + + body = JSON.parse(response[2][0]) + assert_equal "Internal server error", body["error"] + end + private def create_rack_request(method, path, headers, body = nil)