Skip to content

Commit 41efc45

Browse files
committed
test(runtime): add foundation contract RED
1 parent 65efc66 commit 41efc45

1 file changed

Lines changed: 71 additions & 0 deletions

File tree

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
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.runtime;
6+
7+
import static org.junit.jupiter.api.Assertions.assertEquals;
8+
import static org.junit.jupiter.api.Assertions.assertFalse;
9+
import static org.junit.jupiter.api.Assertions.assertThrows;
10+
import static org.junit.jupiter.api.Assertions.assertTrue;
11+
12+
import java.util.Arrays;
13+
14+
import org.junit.jupiter.api.Test;
15+
16+
import io.github.easy4j.kimi.KimiException;
17+
import io.github.easy4j.kimi.KimiRuntimeClosedException;
18+
import io.github.easy4j.kimi.KimiTimeoutException;
19+
import io.github.easy4j.kimi.KimiUnsupportedCapabilityException;
20+
21+
class KimiRuntimeFoundationContractTest {
22+
23+
@Test
24+
void shouldExposeImmutableCapabilitiesAndRejectUnsupportedCapability() {
25+
KimiCapabilities capabilities = KimiCapabilities.of(
26+
KimiCapability.PROMPT,
27+
KimiCapability.SESSION);
28+
29+
assertTrue(capabilities.supports(KimiCapability.PROMPT));
30+
assertTrue(capabilities.supports(KimiCapability.SESSION));
31+
assertFalse(capabilities.supports(KimiCapability.WEBSOCKET));
32+
33+
KimiUnsupportedCapabilityException error = assertThrows(
34+
KimiUnsupportedCapabilityException.class,
35+
() -> capabilities.require(KimiCapability.WEBSOCKET));
36+
37+
assertTrue(error instanceof KimiException);
38+
assertEquals(KimiCapability.WEBSOCKET, error.getCapability());
39+
assertThrows(UnsupportedOperationException.class,
40+
() -> capabilities.asSet().add(KimiCapability.WEBSOCKET));
41+
}
42+
43+
@Test
44+
void shouldKeepLifecycleAndHealthAsSeparateObservableFacts() {
45+
KimiHealth healthy = KimiHealth.healthy("ready");
46+
KimiHealth unhealthy = KimiHealth.unhealthy("transport unavailable");
47+
48+
assertTrue(healthy.isHealthy());
49+
assertEquals("ready", healthy.getSummary());
50+
assertFalse(unhealthy.isHealthy());
51+
assertEquals("transport unavailable", unhealthy.getSummary());
52+
53+
assertEquals(Arrays.asList(
54+
KimiRuntimeState.NEW,
55+
KimiRuntimeState.STARTING,
56+
KimiRuntimeState.READY,
57+
KimiRuntimeState.CLOSING,
58+
KimiRuntimeState.CLOSED,
59+
KimiRuntimeState.FAILED),
60+
Arrays.asList(KimiRuntimeState.values()));
61+
}
62+
63+
@Test
64+
void shouldKeepRuntimeExceptionsCompatibleWithKimiException() {
65+
KimiRuntimeClosedException closed = new KimiRuntimeClosedException("closed");
66+
KimiTimeoutException timeout = new KimiTimeoutException("timeout");
67+
68+
assertTrue(closed instanceof KimiException);
69+
assertTrue(timeout instanceof KimiException);
70+
}
71+
}

0 commit comments

Comments
 (0)