@@ -141,5 +141,135 @@ def test_read_resource_returns_empty_array_when_no_contents
141141
142142 assert_empty ( contents )
143143 end
144+
145+ def test_prompts_sends_request_to_transport_and_returns_prompts_array
146+ transport = mock
147+ mock_response = {
148+ "result" => {
149+ "prompts" => [
150+ {
151+ "name" => "prompt_1" ,
152+ "description" => "First prompt" ,
153+ "arguments" => [
154+ {
155+ "name" => "code_1" ,
156+ "description" => "The code_1 to review" ,
157+ "required" => true ,
158+ } ,
159+ ] ,
160+ } ,
161+ {
162+ "name" => "prompt_2" ,
163+ "description" => "Second prompt" ,
164+ "arguments" => [
165+ {
166+ "name" => "code_2" ,
167+ "description" => "The code_2 to review" ,
168+ "required" => true ,
169+ } ,
170+ ] ,
171+ } ,
172+ ] ,
173+ } ,
174+ }
175+
176+ # Only checking for the essential parts of the request
177+ transport . expects ( :send_request ) . with do |args |
178+ args in { request : { method : "prompts/list" , jsonrpc : "2.0" } }
179+ end . returns ( mock_response ) . once
180+
181+ client = Client . new ( transport : transport )
182+ prompts = client . prompts
183+
184+ assert_equal ( 2 , prompts . size )
185+ assert_equal ( "prompt_1" , prompts . first [ "name" ] )
186+ assert_equal ( "First prompt" , prompts . first [ "description" ] )
187+ assert_equal ( "code_1" , prompts . first [ "arguments" ] . first [ "name" ] )
188+ assert_equal ( "The code_1 to review" , prompts . first [ "arguments" ] . first [ "description" ] )
189+ assert ( prompts . first [ "arguments" ] . first [ "required" ] )
190+
191+ assert_equal ( "prompt_2" , prompts . last [ "name" ] )
192+ assert_equal ( "Second prompt" , prompts . last [ "description" ] )
193+ assert_equal ( "code_2" , prompts . last [ "arguments" ] . first [ "name" ] )
194+ assert_equal ( "The code_2 to review" , prompts . last [ "arguments" ] . first [ "description" ] )
195+ assert ( prompts . last [ "arguments" ] . first [ "required" ] )
196+ end
197+
198+ def test_prompts_returns_empty_array_when_no_prompts
199+ transport = mock
200+ mock_response = { "result" => { "prompts" => [ ] } }
201+
202+ transport . expects ( :send_request ) . returns ( mock_response ) . once
203+
204+ client = Client . new ( transport : transport )
205+ prompts = client . prompts
206+
207+ assert_empty ( prompts )
208+ end
209+
210+ def test_get_prompt_sends_request_to_transport_and_returns_contents
211+ transport = mock
212+ name = "first_prompt"
213+ mock_response = {
214+ "result" => {
215+ "description" => "First prompt" ,
216+ "messages" => [
217+ {
218+ "role" => "user" ,
219+ "content" => {
220+ "text" => "First prompt content" ,
221+ "type" => "text" ,
222+ } ,
223+ } ,
224+ ] ,
225+ } ,
226+ }
227+
228+ # Only checking for the essential parts of the request
229+ transport . expects ( :send_request ) . with do |args |
230+ args in {
231+ request : {
232+ method : "prompts/get" ,
233+ jsonrpc : "2.0" ,
234+ params : {
235+ name : name ,
236+ } ,
237+ } ,
238+ }
239+ end . returns ( mock_response ) . once
240+
241+ client = Client . new ( transport : transport )
242+ contents = client . get_prompt ( name : name )
243+
244+ assert_equal ( "First prompt" , contents [ "description" ] )
245+ assert_equal ( "user" , contents [ "messages" ] . first [ "role" ] )
246+ assert_equal ( "First prompt content" , contents [ "messages" ] . first [ "content" ] [ "text" ] )
247+ end
248+
249+ def test_get_prompt_returns_empty_hash_when_no_contents
250+ transport = mock
251+ name = "nonexistent_prompt"
252+ mock_response = { "result" => { } }
253+
254+ transport . expects ( :send_request ) . returns ( mock_response ) . once
255+
256+ client = Client . new ( transport : transport )
257+ contents = client . get_prompt ( name : name )
258+
259+ assert_empty ( contents )
260+ end
261+
262+ def test_get_prompt_returns_empty_hash
263+ transport = mock
264+ name = "nonexistent_prompt"
265+ mock_response = { }
266+
267+ transport . expects ( :send_request ) . returns ( mock_response ) . once
268+
269+ client = Client . new ( transport : transport )
270+ contents = client . get_prompt ( name : name )
271+
272+ assert_empty ( contents )
273+ end
144274 end
145275end
0 commit comments