Skip to content

Commit 1b2b891

Browse files
authored
test: Add ChatClientRequest mutation and context handling tests (#4022)
Signed-off-by: Alex Klimenko <[email protected]>
1 parent 7d6f9be commit 1b2b891

File tree

1 file changed

+101
-0
lines changed

1 file changed

+101
-0
lines changed

spring-ai-client-chat/src/test/java/org/springframework/ai/chat/client/ChatClientRequestTests.java

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,4 +86,105 @@ void whenMutateThenImmutableContext() {
8686
assertThat(copy.context()).isEqualTo(Map.of("key", "newValue"));
8787
}
8888

89+
@Test
90+
void whenBuilderWithMultipleContextEntriesThenSuccess() {
91+
Prompt prompt = new Prompt("test message");
92+
Map<String, Object> context = Map.of("key1", "value1", "key2", 42, "key3", true, "key4",
93+
Map.of("nested", "value"));
94+
95+
ChatClientRequest request = ChatClientRequest.builder().prompt(prompt).context(context).build();
96+
97+
assertThat(request.context()).hasSize(4);
98+
assertThat(request.context().get("key1")).isEqualTo("value1");
99+
assertThat(request.context().get("key2")).isEqualTo(42);
100+
assertThat(request.context().get("key3")).isEqualTo(true);
101+
assertThat(request.context().get("key4")).isEqualTo(Map.of("nested", "value"));
102+
}
103+
104+
@Test
105+
void whenMutateWithNewContextKeysThenMerged() {
106+
Prompt prompt = new Prompt("test message");
107+
ChatClientRequest original = ChatClientRequest.builder()
108+
.prompt(prompt)
109+
.context(Map.of("existing", "value"))
110+
.build();
111+
112+
ChatClientRequest mutated = original.mutate().context("new1", "newValue1").context("new2", "newValue2").build();
113+
114+
assertThat(original.context()).hasSize(1);
115+
assertThat(mutated.context()).hasSize(3);
116+
assertThat(mutated.context().get("existing")).isEqualTo("value");
117+
assertThat(mutated.context().get("new1")).isEqualTo("newValue1");
118+
assertThat(mutated.context().get("new2")).isEqualTo("newValue2");
119+
}
120+
121+
@Test
122+
void whenMutateWithOverridingContextKeysThenOverridden() {
123+
Prompt prompt = new Prompt("test message");
124+
ChatClientRequest original = ChatClientRequest.builder()
125+
.prompt(prompt)
126+
.context(Map.of("key", "originalValue", "other", "untouched"))
127+
.build();
128+
129+
ChatClientRequest mutated = original.mutate().context("key", "newValue").build();
130+
131+
assertThat(original.context().get("key")).isEqualTo("originalValue");
132+
assertThat(mutated.context().get("key")).isEqualTo("newValue");
133+
assertThat(mutated.context().get("other")).isEqualTo("untouched");
134+
}
135+
136+
@Test
137+
void whenMutatePromptThenPromptChanged() {
138+
Prompt originalPrompt = new Prompt("original message");
139+
Prompt newPrompt = new Prompt("new message");
140+
141+
ChatClientRequest original = ChatClientRequest.builder()
142+
.prompt(originalPrompt)
143+
.context(Map.of("key", "value"))
144+
.build();
145+
146+
ChatClientRequest mutated = original.mutate().prompt(newPrompt).build();
147+
148+
assertThat(original.prompt()).isEqualTo(originalPrompt);
149+
assertThat(mutated.prompt()).isEqualTo(newPrompt);
150+
assertThat(mutated.context()).isEqualTo(original.context());
151+
}
152+
153+
@Test
154+
void whenMutateContextWithMapThenMerged() {
155+
Prompt prompt = new Prompt("test message");
156+
ChatClientRequest original = ChatClientRequest.builder()
157+
.prompt(prompt)
158+
.context(Map.of("existing", "value"))
159+
.build();
160+
161+
Map<String, Object> newContext = Map.of("new1", "value1", "new2", "value2");
162+
ChatClientRequest mutated = original.mutate().context(newContext).build();
163+
164+
assertThat(mutated.context()).hasSize(3);
165+
assertThat(mutated.context().get("existing")).isEqualTo("value");
166+
assertThat(mutated.context().get("new1")).isEqualTo("value1");
167+
assertThat(mutated.context().get("new2")).isEqualTo("value2");
168+
}
169+
170+
@Test
171+
void whenContextContainsComplexObjectsThenPreserved() {
172+
Prompt prompt = new Prompt("test message");
173+
174+
// Test with various object types
175+
Map<String, Object> nestedMap = Map.of("nested", "value");
176+
java.util.List<String> list = java.util.List.of("item1", "item2");
177+
178+
ChatClientRequest request = ChatClientRequest.builder()
179+
.prompt(prompt)
180+
.context(Map.of("map", nestedMap, "list", list, "string", "value", "number", 123, "boolean", true))
181+
.build();
182+
183+
assertThat(request.context().get("map")).isEqualTo(nestedMap);
184+
assertThat(request.context().get("list")).isEqualTo(list);
185+
assertThat(request.context().get("string")).isEqualTo("value");
186+
assertThat(request.context().get("number")).isEqualTo(123);
187+
assertThat(request.context().get("boolean")).isEqualTo(true);
188+
}
189+
89190
}

0 commit comments

Comments
 (0)