@@ -85,4 +85,66 @@ void whenPromptTemplateIsNullThenUseDefault() {
8585 assertThat (queryExpander ).isNotNull ();
8686 }
8787
88+ @ Test
89+ void whenPromptTemplateHasBothPlaceholdersThenBuild () {
90+ PromptTemplate validTemplate = new PromptTemplate ("Generate {number} variations of: {query}" );
91+
92+ MultiQueryExpander expander = MultiQueryExpander .builder ()
93+ .chatClientBuilder (mock (ChatClient .Builder .class ))
94+ .promptTemplate (validTemplate )
95+ .build ();
96+
97+ assertThat (expander ).isNotNull ();
98+ }
99+
100+ @ Test
101+ void whenPromptTemplateHasExtraPlaceholdersThenBuild () {
102+ PromptTemplate templateWithExtra = new PromptTemplate (
103+ "Generate {number} variations of: {query}. Context: {context}" );
104+
105+ MultiQueryExpander expander = MultiQueryExpander .builder ()
106+ .chatClientBuilder (mock (ChatClient .Builder .class ))
107+ .promptTemplate (templateWithExtra )
108+ .build ();
109+
110+ assertThat (expander ).isNotNull ();
111+ }
112+
113+ @ Test
114+ void whenBuilderSetMultipleTimesThenUseLastValue () {
115+ ChatClient .Builder firstBuilder = mock (ChatClient .Builder .class );
116+ ChatClient .Builder secondBuilder = mock (ChatClient .Builder .class );
117+
118+ MultiQueryExpander expander = MultiQueryExpander .builder ()
119+ .chatClientBuilder (firstBuilder )
120+ .chatClientBuilder (secondBuilder )
121+ .build ();
122+
123+ assertThat (expander ).isNotNull ();
124+ }
125+
126+ @ Test
127+ void whenPromptTemplateSetToNullAfterValidTemplateThenUseDefault () {
128+ PromptTemplate validTemplate = new PromptTemplate ("Config: {number} values for {query}" );
129+
130+ MultiQueryExpander expander = MultiQueryExpander .builder ()
131+ .chatClientBuilder (mock (ChatClient .Builder .class ))
132+ .promptTemplate (validTemplate )
133+ .promptTemplate (null )
134+ .build ();
135+
136+ assertThat (expander ).isNotNull ();
137+ }
138+
139+ @ Test
140+ void whenPromptTemplateHasPlaceholdersInDifferentCaseThenThrow () {
141+ PromptTemplate templateWithWrongCase = new PromptTemplate ("Generate {NUMBER} variations of: {QUERY}" );
142+
143+ assertThatThrownBy (() -> MultiQueryExpander .builder ()
144+ .chatClientBuilder (mock (ChatClient .Builder .class ))
145+ .promptTemplate (templateWithWrongCase )
146+ .build ()).isInstanceOf (IllegalArgumentException .class )
147+ .hasMessageContaining ("The following placeholders must be present in the prompt template" );
148+ }
149+
88150}
0 commit comments