@@ -162,6 +162,53 @@ func TestParsePortForward(t *testing.T) {
162162 }
163163}
164164
165+ func TestBuildParamExpressions (t * testing.T ) {
166+ tests := []struct {
167+ name string
168+ params []string
169+ allowedParams map [string ]string
170+ expected []string
171+ expectError string
172+ }{
173+ {
174+ name : "single param" ,
175+ params : []string {"version=v1.35" },
176+ allowedParams : map [string ]string {"version" : "" },
177+ expected : []string {`.param["version"] = "v1.35"` },
178+ },
179+ {
180+ name : "value contains equals" ,
181+ params : []string {"token=a=b" },
182+ allowedParams : map [string ]string {"token" : "" },
183+ expected : []string {`.param["token"] = "a=b"` },
184+ },
185+ {
186+ name : "invalid format" ,
187+ params : []string {"version" },
188+ allowedParams : map [string ]string {"version" : "" },
189+ expectError : `invalid parameter "version", expected NAME=VALUE` ,
190+ },
191+ {
192+ name : "undefined param" ,
193+ params : []string {"missing=value" },
194+ allowedParams : map [string ]string {"version" : "" },
195+ expectError : `template does not define param "missing"` ,
196+ },
197+ }
198+
199+ for _ , tt := range tests {
200+ t .Run (tt .name , func (t * testing.T ) {
201+ result , err := BuildParamExpressions (tt .params , tt .allowedParams )
202+ if tt .expectError != "" {
203+ assert .ErrorContains (t , err , tt .expectError )
204+ } else {
205+ assert .NilError (t , err )
206+ assert .DeepEqual (t , tt .expected , result )
207+ }
208+ })
209+ }
210+ }
211+
165212func TestYQExpressions (t * testing.T ) {
166213 expand := func (s string ) string {
167214 s , err := localpathutil .Expand (s )
@@ -225,6 +272,18 @@ func TestYQExpressions(t *testing.T) {
225272 newInstance : false ,
226273 expected : []string {`.nestedVirtualization = true` },
227274 },
275+ {
276+ name : "param" ,
277+ args : []string {"--param" , "version=v1.35" },
278+ newInstance : false ,
279+ expected : []string {`.param["version"] = "v1.35"` },
280+ },
281+ {
282+ name : "undefined param" ,
283+ args : []string {"--param" , "missing=value" },
284+ newInstance : false ,
285+ expectError : `template does not define param "missing"` ,
286+ },
228287 {
229288 name : "invalid network" ,
230289 args : []string {"--network" , "invalid" },
@@ -237,7 +296,7 @@ func TestYQExpressions(t *testing.T) {
237296 cmd := & cobra.Command {}
238297 RegisterEdit (cmd , "" )
239298 assert .NilError (t , cmd .ParseFlags (tt .args ))
240- expr , err := YQExpressions (cmd .Flags (), tt .newInstance )
299+ expr , err := YQExpressions (cmd .Flags (), tt .newInstance , map [ string ] string { "version" : "" } )
241300 if tt .expectError != "" {
242301 assert .ErrorContains (t , err , tt .expectError )
243302 } else {
0 commit comments