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