@@ -57,5 +57,89 @@ def test_call_tool_sends_request_to_transport_and_returns_content
5757
5858 assert_equal ( "result" , content )
5959 end
60+
61+ def test_resources_sends_request_to_transport_and_returns_resources_array
62+ transport = mock
63+ mock_response = {
64+ "result" => {
65+ "resources" => [
66+ { "name" => "resource1" , "uri" => "file:///path/to/resource1" , "description" => "First resource" } ,
67+ { "name" => "resource2" , "uri" => "file:///path/to/resource2" , "description" => "Second resource" } ,
68+ ] ,
69+ } ,
70+ }
71+
72+ # Only checking for the essential parts of the request
73+ transport . expects ( :send_request ) . with do |args |
74+ args in { request : { method : "resources/list" , jsonrpc : "2.0" } }
75+ end . returns ( mock_response ) . once
76+
77+ client = Client . new ( transport : transport )
78+ resources = client . resources
79+
80+ assert_equal ( 2 , resources . size )
81+ assert_equal ( "resource1" , resources . first [ "name" ] )
82+ assert_equal ( "file:///path/to/resource1" , resources . first [ "uri" ] )
83+ assert_equal ( "resource2" , resources . last [ "name" ] )
84+ assert_equal ( "file:///path/to/resource2" , resources . last [ "uri" ] )
85+ end
86+
87+ def test_read_resource_sends_request_to_transport_and_returns_contents
88+ transport = mock
89+ uri = "file:///path/to/resource.txt"
90+ mock_response = {
91+ "result" => {
92+ "contents" => [
93+ { "uri" => uri , "mimeType" => "text/plain" , "text" => "Hello, world!" } ,
94+ ] ,
95+ } ,
96+ }
97+
98+ # Only checking for the essential parts of the request
99+ transport . expects ( :send_request ) . with do |args |
100+ args in {
101+ request : {
102+ method : "resources/read" ,
103+ jsonrpc : "2.0" ,
104+ params : {
105+ uri : uri ,
106+ } ,
107+ } ,
108+ }
109+ end . returns ( mock_response ) . once
110+
111+ client = Client . new ( transport : transport )
112+ contents = client . read_resource ( uri : uri )
113+
114+ assert_equal ( 1 , contents . size )
115+ assert_equal ( uri , contents . first [ "uri" ] )
116+ assert_equal ( "text/plain" , contents . first [ "mimeType" ] )
117+ assert_equal ( "Hello, world!" , contents . first [ "text" ] )
118+ end
119+
120+ def test_read_resource_returns_empty_array_when_no_contents
121+ transport = mock
122+ uri = "file:///path/to/nonexistent.txt"
123+ mock_response = { "result" => { } }
124+
125+ transport . expects ( :send_request ) . returns ( mock_response ) . once
126+
127+ client = Client . new ( transport : transport )
128+ contents = client . read_resource ( uri : uri )
129+
130+ assert_empty ( contents )
131+ end
132+
133+ def test_resources_returns_empty_array_when_no_resources
134+ transport = mock
135+ mock_response = { "result" => { } }
136+
137+ transport . expects ( :send_request ) . returns ( mock_response ) . once
138+
139+ client = Client . new ( transport : transport )
140+ resources = client . resources
141+
142+ assert_empty ( resources )
143+ end
60144 end
61145end
0 commit comments