@@ -396,12 +396,13 @@ func TestResolveTokenValue(t *testing.T) {
396396
397397func TestResolveStringInterpolation (t * testing.T ) {
398398 tests := []struct {
399- name string
400- input string
401- setupVars map [string ]string
402- expected string
403- expectError bool
404- errorMsg string
399+ name string
400+ input string
401+ setupVars map [string ]string
402+ setupGlobalVars map [string ]string
403+ expectedTokens []string
404+ expectError bool
405+ errorMsg string
405406 }{
406407 {
407408 name : "string with two tokens" ,
@@ -410,7 +411,8 @@ func TestResolveStringInterpolation(t *testing.T) {
410411 "var1-middle" : "value1" ,
411412 "var2-suffix" : "value2" ,
412413 },
413- expectError : false ,
414+ expectedTokens : []string {"self.var1-middle" , "self.var2-suffix" },
415+ expectError : false ,
414416 },
415417 {
416418 name : "string with adjacent tokens" ,
@@ -419,23 +421,26 @@ func TestResolveStringInterpolation(t *testing.T) {
419421 "var1" : "value1" ,
420422 "var2" : "value2" ,
421423 },
422- expectError : false ,
424+ expectedTokens : []string {"self.var1" , "self.var2" },
425+ expectError : false ,
423426 },
424427 {
425428 name : "string with token at start" ,
426429 input : "self.var1-suffix" ,
427430 setupVars : map [string ]string {
428431 "var1-suffix" : "value1" ,
429432 },
430- expectError : false ,
433+ expectedTokens : []string {"self.var1-suffix" },
434+ expectError : false ,
431435 },
432436 {
433437 name : "string with token at end" ,
434438 input : "prefix-self.var1" ,
435439 setupVars : map [string ]string {
436440 "var1" : "value1" ,
437441 },
438- expectError : false ,
442+ expectedTokens : []string {"self.var1" },
443+ expectError : false ,
439444 },
440445 {
441446 name : "string with ${} wrapped tokens" ,
@@ -444,7 +449,32 @@ func TestResolveStringInterpolation(t *testing.T) {
444449 "var1" : "value1" ,
445450 "var2" : "value2" ,
446451 },
447- expectError : false ,
452+ expectedTokens : []string {"self.var1" , "self.var2" },
453+ expectError : false ,
454+ },
455+ {
456+ name : "string with coalesce function" ,
457+ input : "${coalesce(self.project_id, var.project_id)}" ,
458+ setupVars : map [string ]string {
459+ "project_id" : "test-project-123" ,
460+ },
461+ setupGlobalVars : map [string ]string {
462+ "project_id" : "global-project" ,
463+ },
464+ expectedTokens : []string {"self.project_id" , "var.project_id" },
465+ expectError : false ,
466+ },
467+ {
468+ name : "string with ternary operator" ,
469+ input : "${self.env != null ? self.env : var.env}" ,
470+ setupVars : map [string ]string {
471+ "env" : "production" ,
472+ },
473+ setupGlobalVars : map [string ]string {
474+ "env" : "staging" ,
475+ },
476+ expectedTokens : []string {"self.env" , "self.env" , "var.env" },
477+ expectError : false ,
448478 },
449479 }
450480
@@ -459,6 +489,15 @@ func TestResolveStringInterpolation(t *testing.T) {
459489 instancedTerraformVariables : make (map [string ]map [string ]cdktf.TerraformVariable ),
460490 }
461491
492+ for varName , varValue := range tt .setupGlobalVars {
493+ if td .terraformVariables == nil {
494+ td .terraformVariables = make (map [string ]cdktf.TerraformVariable )
495+ }
496+ td .terraformVariables [varName ] = cdktf .NewTerraformVariable (stack , jsii .String (varName ), & cdktf.TerraformVariableConfig {
497+ Default : varValue ,
498+ })
499+ }
500+
462501 td .instancedTerraformVariables ["test_intent" ] = make (map [string ]cdktf.TerraformVariable )
463502 for varName , varValue := range tt .setupVars {
464503 td .instancedTerraformVariables ["test_intent" ][varName ] = cdktf .NewTerraformVariable (stack , jsii .String ("test_" + varName ), & cdktf.TerraformVariableConfig {
@@ -467,6 +506,15 @@ func TestResolveStringInterpolation(t *testing.T) {
467506 }
468507
469508 tokens := findAllTokens (tt .input )
509+
510+ // Extract token strings from TokenMatch for comparison
511+ tokenStrings := make ([]string , len (tokens ))
512+ for i , token := range tokens {
513+ tokenStrings [i ] = token .Token
514+ }
515+
516+ assert .Equal (t , tt .expectedTokens , tokenStrings , "tokens found do not match expected" )
517+
470518 result , err := td .resolveStringInterpolation ("test_intent" , tt .input , tokens )
471519
472520 if tt .expectError {
0 commit comments