@@ -538,6 +538,67 @@ def test_complete_returns_default_when_result_is_missing
538538 refute ( result [ "hasMore" ] )
539539 end
540540
541+ def test_ping_sends_request_and_returns_empty_hash
542+ transport = mock
543+ mock_response = { "result" => { } }
544+
545+ transport . expects ( :send_request ) . with do |args |
546+ req = args [ :request ]
547+ req [ :method ] == "ping" &&
548+ req [ :jsonrpc ] == "2.0" &&
549+ !req . key? ( :params )
550+ end . returns ( mock_response ) . once
551+
552+ client = Client . new ( transport : transport )
553+ result = client . ping
554+
555+ assert_equal ( { } , result )
556+ end
557+
558+ def test_ping_raises_server_error_on_error_response
559+ transport = mock
560+ mock_response = { "error" => { "code" => -32_603 , "message" => "Internal error" } }
561+
562+ transport . expects ( :send_request ) . returns ( mock_response ) . once
563+
564+ client = Client . new ( transport : transport )
565+ error = assert_raises ( Client ::ServerError ) { client . ping }
566+ assert_equal ( -32_603 , error . code )
567+ assert_equal ( "Internal error" , error . message )
568+ end
569+
570+ def test_ping_raises_validation_error_when_result_is_missing
571+ transport = mock
572+ mock_response = { }
573+
574+ transport . expects ( :send_request ) . returns ( mock_response ) . once
575+
576+ client = Client . new ( transport : transport )
577+ error = assert_raises ( Client ::ValidationError ) { client . ping }
578+ assert_equal ( "Response validation failed: missing or invalid `result`" , error . message )
579+ end
580+
581+ def test_ping_raises_validation_error_when_result_is_wrong_type
582+ transport = mock
583+ mock_response = { "result" => "ok" }
584+
585+ transport . expects ( :send_request ) . returns ( mock_response ) . once
586+
587+ client = Client . new ( transport : transport )
588+ error = assert_raises ( Client ::ValidationError ) { client . ping }
589+ assert_equal ( "Response validation failed: missing or invalid `result`" , error . message )
590+ end
591+
592+ def test_ping_propagates_transport_errors
593+ transport = mock
594+ transport_error = StandardError . new ( "read timeout" )
595+ transport . expects ( :send_request ) . raises ( transport_error ) . once
596+
597+ client = Client . new ( transport : transport )
598+ error = assert_raises ( StandardError ) { client . ping }
599+ assert_equal ( "read timeout" , error . message )
600+ end
601+
541602 def test_tools_auto_paginates_across_multiple_pages
542603 transport = mock
543604
0 commit comments