Skip to content

Commit a4e7e00

Browse files
committed
test(protocol): add session and result RED cases
1 parent 31a9f47 commit a4e7e00

1 file changed

Lines changed: 60 additions & 0 deletions

File tree

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
/*
2+
* Copyright (c) 2018-present, easy-4-java.
3+
* Licensed under the Apache License, Version 2.0.
4+
*/
5+
package io.github.easy4j.kimi.model;
6+
7+
import static org.junit.jupiter.api.Assertions.assertEquals;
8+
import static org.junit.jupiter.api.Assertions.assertNotNull;
9+
import static org.junit.jupiter.api.Assertions.assertThrows;
10+
11+
import org.junit.jupiter.api.Test;
12+
13+
class KimiProtocolCoreModelTest {
14+
15+
private final KimiProtocolMapper mapper = new KimiProtocolMapper();
16+
17+
@Test
18+
void shouldParseSessionAndPreserveFutureFields() {
19+
KimiSession session = mapper.readSession(
20+
"{\"sessionId\":\"sess_1\",\"model\":\"kimi-k2\",\"mode\":\"code\","
21+
+ "\"future_session\":{\"branch\":\"main\"}}");
22+
23+
assertEquals("sess_1", session.getId());
24+
assertEquals("kimi-k2", session.getModel());
25+
assertEquals("code", session.getMode());
26+
assertEquals("main",
27+
session.getExtensions().get("future_session").path("branch").asText());
28+
}
29+
30+
@Test
31+
void shouldParsePromptResultWithUsageAndUnknownStopReason() {
32+
KimiPromptResult result = mapper.readPromptResult(
33+
"{\"sessionId\":\"sess_1\",\"stopReason\":\"future_reason\","
34+
+ "\"content\":\"done\","
35+
+ "\"usage\":{\"inputTokens\":12,\"outputTokens\":7,\"totalTokens\":19},"
36+
+ "\"future_result\":true}");
37+
38+
assertEquals("sess_1", result.getSessionId());
39+
assertEquals("future_reason", result.getStopReason().getValue());
40+
assertEquals("done", result.getContent());
41+
assertEquals(12L, result.getUsage().getInputTokens());
42+
assertEquals(7L, result.getUsage().getOutputTokens());
43+
assertEquals(19L, result.getUsage().getTotalTokens());
44+
assertEquals(true, result.getExtensions().get("future_result").asBoolean());
45+
}
46+
47+
@Test
48+
void shouldKeepPromptResultImmutableAndDefensive() {
49+
KimiPromptResult result = mapper.readPromptResult(
50+
"{\"sessionId\":\"sess_1\",\"stopReason\":\"end_turn\","
51+
+ "\"content\":\"done\",\"future\":{\"x\":1}}");
52+
53+
assertNotNull(result.getExtensions());
54+
assertThrows(UnsupportedOperationException.class,
55+
() -> result.getExtensions().put("mutate", result.getExtensions().get("future")));
56+
57+
result.getExtensions().get("future").deepCopy().withObject("/").put("x", 99);
58+
assertEquals(1, result.getExtensions().get("future").path("x").asInt());
59+
}
60+
}

0 commit comments

Comments
 (0)