@@ -86,4 +86,105 @@ void whenMutateThenImmutableContext() {
86
86
assertThat (copy .context ()).isEqualTo (Map .of ("key" , "newValue" ));
87
87
}
88
88
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
+
89
190
}
0 commit comments