File tree Expand file tree Collapse file tree 2 files changed +25
-11
lines changed 
main/kotlin/org/springframework/ai/chat/client 
test/kotlin/org/springframework/ai/chat/client Expand file tree Collapse file tree 2 files changed +25
-11
lines changed Original file line number Diff line number Diff line change 1616
1717package  org.springframework.ai.chat.client 
1818
19+ import  org.springframework.ai.chat.model.ChatResponse 
20+ import  org.springframework.core.ParameterizedTypeReference 
21+ 
1922/* *
20-  * Extension  for [ChatClient] providing a `entity<Foo>()` variant.  
23+  * Extensions  for [ChatClient] providing a reified generic adapters for  `entity` and `responseEntity`  
2124 * 
2225 * @author Josh Long 
2326 */  
2427
25- inline  fun  <reified  T > ChatClient.CallResponseSpec.entity (): T  =  entity(T ::class .java) as  T 
28+ inline  fun  <reified  T > ChatClient.CallResponseSpec.entity (): T  = 
29+ 	entity(object  :  ParameterizedTypeReference <T >() {}) as  T 
30+ 
31+ inline  fun  <reified  T > ChatClient.CallResponseSpec.responseEntity (): ResponseEntity <ChatResponse , T > = 
32+ 	responseEntity(object  :  ParameterizedTypeReference <T >() {}) 
Original file line number Diff line number Diff line change @@ -20,21 +20,28 @@ import io.mockk.every
2020import  io.mockk.mockk 
2121import  io.mockk.verify 
2222import  org.junit.jupiter.api.Test 
23+ import  org.springframework.ai.chat.model.ChatResponse 
24+ import  org.springframework.core.ParameterizedTypeReference 
2325
2426class  ChatClientExtensionsTests  {
2527
26- 	private  val  crs =  mockk<ChatClient .CallResponseSpec >()
27- 
2828	data class  Joke (val  setup :  String , val  punchline :  String )
2929
3030	@Test
31- 	fun  withEntityType () {
32- 		val  joke =  Joke (
33- 			setup =  " Why did the scarecrow win an award?"  ,
34- 			punchline =  " Because he was outstanding in his field!" 
35- 		)
36- 		every { crs.entity(any<Class <* >>()) } returns joke 
31+ 	fun  responseEntity () {
32+ 		val  crs =  mockk<ChatClient .CallResponseSpec >()
33+ 		val  re =  mockk<ResponseEntity <ChatResponse , Joke >>()
34+ 		every { crs.responseEntity<Joke >() } returns re
35+ 		crs.responseEntity<Joke >()
36+ 		verify { crs.responseEntity(object  :  ParameterizedTypeReference <Joke >() {}) }
37+ 	}
38+ 	
39+ 	@Test
40+ 	fun  entity () {
41+ 		val  crs =  mockk<ChatClient .CallResponseSpec >()
42+ 		val  joke =   mockk<Joke >()
43+ 		every { crs.entity(any<ParameterizedTypeReference <Joke >>()) } returns joke 
3744		crs.entity<Joke >()
38- 		verify { crs.entity(Joke :: class .java ) }
45+ 		verify { crs.entity(object   :   ParameterizedTypeReference < Joke >(){} ) }
3946	}
4047}
    
 
   
 
     
   
   
          
     
  
    
     
 
    
      
     
 
     
    You can’t perform that action at this time.
  
 
    
  
     
    
      
        
     
 
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments