@@ -176,5 +176,68 @@ describe('utils/string', () => {
176
176
const result = renderTemplate ( template , variables ) ;
177
177
expect ( result ) . toBe ( 'Item first and second' ) ;
178
178
} ) ;
179
+
180
+ it ( 'should handle undefined values by leaving placeholders unchanged' , ( ) => {
181
+ const template = 'Hello, {{name}} and {{greeting}}!' ;
182
+ const variables = { name : 'World' , greeting : undefined } ;
183
+ const result = renderTemplate ( template , variables ) ;
184
+ expect ( result ) . toBe ( 'Hello, World and {{greeting}}!' ) ;
185
+ } ) ;
186
+
187
+ it ( 'should handle all undefined values' , ( ) => {
188
+ const template = '{{greeting}}, {{name}}!' ;
189
+ const variables = { greeting : undefined , name : undefined } ;
190
+ const result = renderTemplate ( template , variables ) ;
191
+ expect ( result ) . toBe ( '{{greeting}}, {{name}}!' ) ;
192
+ } ) ;
193
+
194
+ it ( 'should handle mixed defined and undefined values' , ( ) => {
195
+ const template = 'Module: {{module}}, Version: {{version}}, Author: {{author}}' ;
196
+ const variables = { module : 'vpc-endpoint' , version : undefined , author : 'TechPivot' } ;
197
+ const result = renderTemplate ( template , variables ) ;
198
+ expect ( result ) . toBe ( 'Module: vpc-endpoint, Version: {{version}}, Author: TechPivot' ) ;
199
+ } ) ;
200
+
201
+ it ( 'should handle empty string vs undefined distinction' , ( ) => {
202
+ const template = 'A{{key1}}B{{key2}}C' ;
203
+ const variables = { key1 : '' , key2 : undefined } ;
204
+ const result = renderTemplate ( template , variables ) ;
205
+ expect ( result ) . toBe ( 'AB{{key2}}C' ) ;
206
+ } ) ;
207
+
208
+ it ( 'should handle undefined values in complex templates' , ( ) => {
209
+ const template = 'Path: {{path}}, Command: {{cmd}}, Options: {{opts}}' ;
210
+ const variables = { path : '/opt/bin/terraform' , cmd : undefined , opts : '--verbose' } ;
211
+ const result = renderTemplate ( template , variables ) ;
212
+ expect ( result ) . toBe ( 'Path: /opt/bin/terraform, Command: {{cmd}}, Options: --verbose' ) ;
213
+ } ) ;
214
+
215
+ it ( 'should handle null values by leaving placeholders unchanged' , ( ) => {
216
+ const template = 'Hello, {{name}} and {{greeting}}!' ;
217
+ const variables = { name : 'World' , greeting : null } ;
218
+ const result = renderTemplate ( template , variables ) ;
219
+ expect ( result ) . toBe ( 'Hello, World and {{greeting}}!' ) ;
220
+ } ) ;
221
+
222
+ it ( 'should handle all null values' , ( ) => {
223
+ const template = '{{greeting}}, {{name}}!' ;
224
+ const variables = { greeting : null , name : null } ;
225
+ const result = renderTemplate ( template , variables ) ;
226
+ expect ( result ) . toBe ( '{{greeting}}, {{name}}!' ) ;
227
+ } ) ;
228
+
229
+ it ( 'should handle mixed null, undefined, and defined values' , ( ) => {
230
+ const template = 'Module: {{module}}, Version: {{version}}, Author: {{author}}, License: {{license}}' ;
231
+ const variables = { module : 'vpc-endpoint' , version : null , author : 'TechPivot' , license : undefined } ;
232
+ const result = renderTemplate ( template , variables ) ;
233
+ expect ( result ) . toBe ( 'Module: vpc-endpoint, Version: {{version}}, Author: TechPivot, License: {{license}}' ) ;
234
+ } ) ;
235
+
236
+ it ( 'should handle empty string vs null vs undefined distinction' , ( ) => {
237
+ const template = 'A{{key1}}B{{key2}}C{{key3}}D' ;
238
+ const variables = { key1 : '' , key2 : null , key3 : undefined } ;
239
+ const result = renderTemplate ( template , variables ) ;
240
+ expect ( result ) . toBe ( 'AB{{key2}}C{{key3}}D' ) ;
241
+ } ) ;
179
242
} ) ;
180
243
} ) ;
0 commit comments