@@ -84,6 +84,110 @@ remote_state = {
8484 }
8585}
8686
87+ func TestParseTerragruntConfigRemoteStateAttrStringBoolCoercion (t * testing.T ) {
88+ t .Parallel ()
89+
90+ cfg := `
91+ locals {
92+ enable_flags = true
93+ }
94+
95+ remote_state = {
96+ backend = "s3"
97+ disable_init = local.enable_flags ? "true" : "false"
98+ disable_dependency_optimization = local.enable_flags ? "false" : "true"
99+ config = {
100+ bucket = "my-bucket"
101+ key = "terraform.tfstate"
102+ region = "us-east-1"
103+ }
104+ }
105+ `
106+
107+ l := createLogger ()
108+
109+ ctx , pctx := config .NewParsingContext (t .Context (), l , mockOptionsForTest (t ))
110+ terragruntConfig , err := config .ParseConfigString (ctx , pctx , l , config .DefaultTerragruntConfigPath , cfg , nil )
111+ require .NoError (t , err )
112+
113+ if assert .NotNil (t , terragruntConfig .RemoteState ) {
114+ assert .True (t , terragruntConfig .RemoteState .DisableInit )
115+ assert .False (t , terragruntConfig .RemoteState .DisableDependencyOptimization )
116+ }
117+ }
118+
119+ func TestParseTerragruntConfigRemoteStateAttrInvalidStringBool (t * testing.T ) {
120+ t .Parallel ()
121+
122+ cfg := `
123+ remote_state = {
124+ backend = "s3"
125+ disable_init = "maybe"
126+ config = {}
127+ }
128+ `
129+
130+ l := createLogger ()
131+
132+ ctx , pctx := config .NewParsingContext (t .Context (), l , mockOptionsForTest (t ))
133+ _ , err := config .ParseConfigString (ctx , pctx , l , config .DefaultTerragruntConfigPath , cfg , nil )
134+ require .Error (t , err )
135+ assert .Contains (t , err .Error (), "invalid boolean string" )
136+ }
137+
138+ func TestParseTerragruntConfigGenerateAttrStringBoolCoercion (t * testing.T ) {
139+ t .Parallel ()
140+
141+ cfg := `
142+ locals {
143+ enable_flags = true
144+ }
145+
146+ generate = {
147+ provider = {
148+ path = "provider.tf"
149+ if_exists = "overwrite"
150+ contents = "provider \"aws\" {}"
151+ disable_signature = local.enable_flags ? "true" : "false"
152+ disable = local.enable_flags ? "false" : "true"
153+ }
154+ }
155+ `
156+
157+ l := createLogger ()
158+
159+ ctx , pctx := config .NewParsingContext (t .Context (), l , mockOptionsForTest (t ))
160+ terragruntConfig , err := config .ParseConfigString (ctx , pctx , l , config .DefaultTerragruntConfigPath , cfg , nil )
161+ require .NoError (t , err )
162+
163+ providerGenerateConfig , ok := terragruntConfig .GenerateConfigs ["provider" ]
164+ require .True (t , ok )
165+ assert .True (t , providerGenerateConfig .DisableSignature )
166+ assert .False (t , providerGenerateConfig .Disable )
167+ }
168+
169+ func TestParseTerragruntConfigGenerateAttrInvalidStringBool (t * testing.T ) {
170+ t .Parallel ()
171+
172+ cfg := `
173+ generate = {
174+ provider = {
175+ path = "provider.tf"
176+ if_exists = "overwrite"
177+ contents = "provider \"aws\" {}"
178+ disable_signature = "maybe"
179+ }
180+ }
181+ `
182+
183+ l := createLogger ()
184+
185+ ctx , pctx := config .NewParsingContext (t .Context (), l , mockOptionsForTest (t ))
186+ _ , err := config .ParseConfigString (ctx , pctx , l , config .DefaultTerragruntConfigPath , cfg , nil )
187+ require .Error (t , err )
188+ assert .Contains (t , err .Error (), "invalid boolean string" )
189+ }
190+
87191func TestParseTerragruntJsonConfigRemoteStateMinimalConfig (t * testing.T ) {
88192 t .Parallel ()
89193
0 commit comments