22
33import com .fasterxml .jackson .databind .ObjectMapper ;
44import com .fasterxml .jackson .databind .SerializationFeature ;
5- import com .fasterxml .jackson .databind .node .ObjectNode ;
65import com .fasterxml .jackson .datatype .jsr310 .JavaTimeModule ;
76import org .junit .jupiter .api .Test ;
7+ import uk .gov .hmcts .cp .openapi .model .cdk .AnswerResponse ;
8+ import uk .gov .hmcts .cp .openapi .model .cdk .AnswerWithLlmResponse ;
9+ import uk .gov .hmcts .cp .openapi .model .cdk .QueryStatusResponse ;
10+ import uk .gov .hmcts .cp .openapi .model .cdk .QuerySummary ;
811
9- import java .time .OffsetDateTime ;
10- import java .util .List ;
11- import java .util .UUID ;
12-
13- import static org .junit .jupiter .api .Assertions .*;
12+ import static org .assertj .core .api .Assertions .assertThat ;
13+ import static uk .gov .hmcts .cp .openapi .model .cdk .QueryLifecycleStatus .ANSWER_AVAILABLE ;
1414
1515class ExamplePayloadBindingTest {
1616
@@ -19,119 +19,65 @@ class ExamplePayloadBindingTest {
1919 .disable (SerializationFeature .WRITE_DATES_AS_TIMESTAMPS );
2020
2121 @ Test
22- void can_deserialize_AnswerResponse_example () throws Exception {
23- String json = """
24- {
25- "queryId": "%s",
26- "userQuery": "Summary of case based on witness statements",
27- "answer": "jkhkdvlvld ::SourcePage 12",
28- "version": 1,
29- "createdAt": "2025-01-01T11:11:11Z"
30- }
31- """ .formatted (UUID .randomUUID ());
32-
33- Class <?> cls = Class .forName ("uk.gov.hmcts.cp.openapi.model.cdk.AnswerResponse" );
34- Object obj = mapper .readValue (json , cls );
35- assertNotNull (obj );
36-
37- Object queryId = cls .getMethod ("getQueryId" ).invoke (obj );
38- Object userQuery = cls .getMethod ("getUserQuery" ).invoke (obj );
39- Object answer = cls .getMethod ("getAnswer" ).invoke (obj );
40- Object createdAt = cls .getMethod ("getCreatedAt" ).invoke (obj );
41- Object version = cls .getMethod ("getVersion" ).invoke (obj );
42-
43- assertNotNull (queryId );
44- assertEquals ("Summary of case based on witness statements" , userQuery );
45- assertEquals ("jkhkdvlvld ::SourcePage 12" , answer );
46-
47- if (createdAt instanceof OffsetDateTime odt ) {
48- assertEquals (OffsetDateTime .parse ("2025-01-01T11:11:11Z" ), odt );
49- } else {
50- assertEquals ("2025-01-01T11:11:11Z" , String .valueOf (createdAt ));
51- }
52-
53- assertEquals (1 , ((Number ) version ).intValue ());
22+ void json_should_map_to_AnswerResponse_object () throws Exception {
23+ String json = "{\n " +
24+ " \" queryId\" : \" a1a6eeb3-06f5-4c33-ac48-c09d66991ca1\" ,\n " +
25+ " \" userQuery\" : \" Summary of case based on witness statements\" ,\n " +
26+ " \" answer\" : \" jkhkdvlvld ::SourcePage 12\" ,\n " +
27+ " \" version\" : 1,\n " +
28+ " \" createdAt\" : \" 2025-01-01T11:11:11Z\" \n " +
29+ "}" ;
30+
31+ AnswerResponse answerResponse = mapper .readValue (json , AnswerResponse .class );
32+ assertThat (answerResponse .getQueryId ().toString ()).isEqualTo ("a1a6eeb3-06f5-4c33-ac48-c09d66991ca1" );
33+ assertThat (answerResponse .getUserQuery ()).isEqualTo ("Summary of case based on witness statements" );
34+ assertThat (answerResponse .getAnswer ()).isEqualTo ("jkhkdvlvld ::SourcePage 12" );
35+ assertThat (answerResponse .getVersion ()).isEqualTo (1 );
36+ assertThat (answerResponse .getCreatedAt ()).isEqualTo ("2025-01-01T11:11:11Z" );
5437 }
5538
5639 @ Test
57- void can_deserialize_AnswerWithLlmResponse_example () throws Exception {
58- String json = """
59- {
60- "queryId": "%s",
61- "userQuery": "Summary of case based on witness statements",
62- "answer": "jkhkdvlvld",
63- "version": 2,
64- "llmInput": "jv,dfnv,nv.,c .,c,",
65- "createdAt": "2025-01-01T11:11:11Z"
66- }
67- """ .formatted (UUID .randomUUID ());
68-
69- Class <?> cls = Class .forName ("uk.gov.hmcts.cp.openapi.model.cdk.AnswerWithLlmResponse" );
70- Object obj = mapper .readValue (json , cls );
71- assertNotNull (obj );
72-
73- assertEquals ("jv,dfnv,nv.,c .,c," , cls .getMethod ("getLlmInput" ).invoke (obj ));
74- assertEquals (2 , ((Number ) cls .getMethod ("getVersion" ).invoke (obj )).intValue ());
75-
76- Object createdAt = cls .getMethod ("getCreatedAt" ).invoke (obj );
77- if (createdAt instanceof OffsetDateTime odt ) {
78- assertEquals (OffsetDateTime .parse ("2025-01-01T11:11:11Z" ), odt );
79- } else {
80- assertEquals ("2025-01-01T11:11:11Z" , String .valueOf (createdAt ));
81- }
40+ void json_should_map_to_AnswerWithLimResponse_object () throws Exception {
41+ String json = "{\n " +
42+ " \" queryId\" : \" a1a6eeb3-06f5-4c33-ac48-c09d66991ca1\" ,\n " +
43+ " \" userQuery\" : \" Summary of case based on witness statements\" ,\n " +
44+ " \" answer\" : \" jkhkdvlvld\" ,\n " +
45+ " \" version\" : 2,\n " +
46+ " \" llmInput\" : \" jv,dfnv,nv.,c .,c,\" ,\n " +
47+ " \" createdAt\" : \" 2025-01-01T11:11:11Z\" \n " +
48+ "}" ;
49+
50+ AnswerWithLlmResponse answerResponse = mapper .readValue (json , AnswerWithLlmResponse .class );
51+ assertThat (answerResponse .getQueryId ().toString ()).isEqualTo ("a1a6eeb3-06f5-4c33-ac48-c09d66991ca1" );
52+ assertThat (answerResponse .getUserQuery ()).isEqualTo ("Summary of case based on witness statements" );
53+ assertThat (answerResponse .getAnswer ()).isEqualTo ("jkhkdvlvld" );
54+ assertThat (answerResponse .getVersion ()).isEqualTo (2 );
55+ assertThat (answerResponse .getLlmInput ()).isEqualTo ("jv,dfnv,nv.,c .,c," );
56+ assertThat (answerResponse .getCreatedAt ()).isEqualTo ("2025-01-01T11:11:11Z" );
8257 }
8358
8459 @ Test
85- @ SuppressWarnings ("unchecked" )
86- void can_serialize_roundtrip_QueryStatusResponse () throws Exception {
87- String expectedAsOf = "2025-05-01T12:00:00Z" ;
88-
89- ObjectNode root = mapper .createObjectNode ();
90- root .put ("asOf" , expectedAsOf );
91-
92- ObjectNode q = mapper .createObjectNode ();
93- q .put ("queryId" , UUID .randomUUID ().toString ());
94- q .put ("userQuery" , "Summary of case based on witness statements" );
95- q .put ("queryPrompt" , "Summarise the case using all witness statements, focusing on timeline." );
96- q .put ("status" , "ANSWER_AVAILABLE" );
97- q .put ("effectiveAt" , "2025-05-01T11:59:00Z" );
98-
99- root .putArray ("queries" ).add (q );
100-
101- Class <?> respCls = Class .forName ("uk.gov.hmcts.cp.openapi.model.cdk.QueryStatusResponse" );
102- Object resp = mapper .readValue (mapper .writeValueAsString (root ), respCls );
103- assertNotNull (resp );
104-
105- Object asOfObj = respCls .getMethod ("getAsOf" ).invoke (resp );
106- assertNotNull (asOfObj );
107- if (asOfObj instanceof OffsetDateTime odt ) {
108- assertEquals (OffsetDateTime .parse (expectedAsOf ), odt );
109- } else {
110- assertEquals (expectedAsOf , asOfObj .toString ());
111- }
112-
113- Object queriesObj = respCls .getMethod ("getQueries" ).invoke (resp );
114- assertNotNull (queriesObj );
115- assertTrue (queriesObj instanceof List <?>);
116- List <?> queries = (List <?>) queriesObj ;
117- assertEquals (1 , queries .size ());
118-
119- Object first = queries .get (0 );
120- Class <?> qCls = first .getClass ();
121-
122- Object status = qCls .getMethod ("getStatus" ).invoke (first );
123- String statusText = (status instanceof Enum <?> e ) ? e .name () : String .valueOf (status );
124- assertEquals ("ANSWER_AVAILABLE" , statusText );
125-
126- assertEquals (
127- "Summarise the case using all witness statements, focusing on timeline." ,
128- qCls .getMethod ("getQueryPrompt" ).invoke (first )
129- );
130- assertEquals (
131- "Summary of case based on witness statements" ,
132- qCls .getMethod ("getUserQuery" ).invoke (first )
133- );
134-
135- assertNotNull (qCls .getMethod ("getEffectiveAt" ).invoke (first ), "effectiveAt must be present" );
60+ void json_should_map_to_QueryStatusResponse_object () throws Exception {
61+ String json = "{\n " +
62+ " \" asOf\" : \" 2025-05-01T12:00:00Z\" ,\n " +
63+ " \" queries\" : [\n " +
64+ " {\n " +
65+ " \" queryId\" : \" a1a6eeb3-06f5-4c33-ac48-c09d66991ca1\" ,\n " +
66+ " \" userQuery\" : \" Summary of case based on witness statements\" ,\n " +
67+ " \" queryPrompt\" : \" Summarise the case using all witness statements, focusing on timeline.\" ,\n " +
68+ " \" status\" : \" ANSWER_AVAILABLE\" ,\n " +
69+ " \" effectiveAt\" : \" 2025-01-01T11:11:11Z\" \n " +
70+ " }\n " +
71+ " ]\n " +
72+ "}" ;
73+
74+ QueryStatusResponse statusResponse = mapper .readValue (json , QueryStatusResponse .class );
75+ assertThat (statusResponse .getAsOf ()).isEqualTo ("2025-05-01T12:00:00Z" );
76+ QuerySummary item0 = statusResponse .getQueries ().get (0 );
77+ assertThat (item0 .getQueryId ().toString ()).isEqualTo ("a1a6eeb3-06f5-4c33-ac48-c09d66991ca1" );
78+ assertThat (item0 .getUserQuery ()).isEqualTo ("Summary of case based on witness statements" );
79+ assertThat (item0 .getQueryPrompt ()).isEqualTo ("Summarise the case using all witness statements, focusing on timeline." );
80+ assertThat (item0 .getStatus ()).isEqualTo (ANSWER_AVAILABLE );
81+ assertThat (item0 .getEffectiveAt ()).isEqualTo ("2025-01-01T11:11:11Z" );
13682 }
13783}
0 commit comments