@@ -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