Skip to content

Commit ef8493d

Browse files
Merge pull request #18 from hmcts/chore/tidy-api-mapping-test
feat: tidy api mapping test
2 parents 53758be + b998f95 commit ef8493d

File tree

2 files changed

+61
-114
lines changed

2 files changed

+61
-114
lines changed

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@ dependencies {
262262
testAnnotationProcessor "org.projectlombok:lombok:$lombokVersion"
263263

264264
// Testing
265+
testImplementation("org.assertj:assertj-core:3.6.1")
265266
testImplementation platform('org.junit:junit-bom:6.0.0')
266267
testImplementation 'org.junit.jupiter:junit-jupiter-api'
267268
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'

src/test/java/uk/gov/hmcts/cp/openapi/codegen/ExamplePayloadBindingTest.java

Lines changed: 60 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22

33
import com.fasterxml.jackson.databind.ObjectMapper;
44
import com.fasterxml.jackson.databind.SerializationFeature;
5-
import com.fasterxml.jackson.databind.node.ObjectNode;
65
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
76
import 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

1515
class 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

Comments
 (0)