diff --git a/internal/pkg/service/cli/dialog/use_template.go b/internal/pkg/service/cli/dialog/use_template.go index ad0d27c6fb..028bd699c2 100644 --- a/internal/pkg/service/cli/dialog/use_template.go +++ b/internal/pkg/service/cli/dialog/use_template.go @@ -61,7 +61,7 @@ func (d *useTmplInputsDialog) ask(ctx context.Context, isForTest bool, inputsFil err := d.groups.VisitInputs(func(group *input.StepsGroupExt, step *input.StepExt, inputDef *input.Input) error { // Print info about group and select steps if !group.Announced { - if err := d.announceGroup(group); err != nil { + if err := d.announceGroup(group, isForTest); err != nil { return err } } @@ -116,7 +116,7 @@ func (d *useTmplInputsDialog) ask(ctx context.Context, isForTest bool, inputsFil return d.out, warnings, err } -func (d *useTmplInputsDialog) announceGroup(group *input.StepsGroupExt) error { +func (d *useTmplInputsDialog) announceGroup(group *input.StepsGroupExt, isForTest bool) error { // Only once if group.Announced { return nil @@ -164,7 +164,7 @@ func (d *useTmplInputsDialog) announceGroup(group *input.StepsGroupExt) error { for i, v := range answers { values[i] = v.Value } - return group.ValidateStepsCount(len(group.Steps), len(values)) + return group.ValidateStepsCount(len(group.Steps), len(values), isForTest) }, } @@ -173,7 +173,7 @@ func (d *useTmplInputsDialog) announceGroup(group *input.StepsGroupExt) error { } // Validate steps count - if err := group.ValidateStepsCount(len(group.Steps), len(selectedSteps)); err != nil { + if err := group.ValidateStepsCount(len(group.Steps), len(selectedSteps), isForTest); err != nil { details := errors.NewMultiError() details.Append(err) details.Append(errors.Errorf("number of selected steps (%d) is incorrect", len(selectedSteps))) diff --git a/internal/pkg/service/templates/api/service/inputs.go b/internal/pkg/service/templates/api/service/inputs.go index 8e38056ee4..00e619b6e6 100644 --- a/internal/pkg/service/templates/api/service/inputs.go +++ b/internal/pkg/service/templates/api/service/inputs.go @@ -106,7 +106,7 @@ func validateInputs(ctx context.Context, backends []string, groups template.Step } // Check if required number of steps is configured - if err := group.ValidateStepsCount(stepsCount, configuredSteps); err != nil { + if err := group.ValidateStepsCount(stepsCount, configuredSteps, false); err != nil { msg := strhelper.AsSentence(err.Error()) outGroup.Error = &msg outGroup.Valid = false diff --git a/internal/pkg/template/input/step.go b/internal/pkg/template/input/step.go index 50d5183e6d..723d5a6d01 100644 --- a/internal/pkg/template/input/step.go +++ b/internal/pkg/template/input/step.go @@ -206,14 +206,14 @@ func (g StepsGroup) AreStepsSelectable() bool { (len(g.Steps) > 1 || (g.Required != RequiredAtLeastOne && g.Required != RequiredExactlyOne)) } -func (g StepsGroup) ValidateStepsCount(all, selected int) error { +func (g StepsGroup) ValidateStepsCount(all, selected int, isTest bool) error { if g.Required == RequiredAll && selected < all { return errors.Errorf(requiredAllDescription, all) } if g.Required == RequiredAtLeastOne && selected < 1 { return errors.New(requiredAtLeastOneDescription) } - if g.Required == RequiredExactlyOne && selected != 1 { + if g.Required == RequiredExactlyOne && selected != 1 && !isTest { return errors.New(requiredExactlyOneDescription) } if g.Required == RequiredZeroOrOne && selected > 1 { diff --git a/internal/pkg/template/test/inputs.go b/internal/pkg/template/test/inputs.go index 00ffa2b977..6b8e54f5e7 100644 --- a/internal/pkg/template/test/inputs.go +++ b/internal/pkg/template/test/inputs.go @@ -24,8 +24,8 @@ func ReadInputValues(ctx context.Context, tmpl *template.Template, test *templat inputValues := make(template.InputsValues, 0) err = tmpl.Inputs().ToExtended().VisitInputs(func(group *input.StepsGroupExt, step *input.StepExt, inputDef *input.Input) error { var inputValue template.InputValue - if v, found := inputsFile[inputDef.ID]; found { - inputValue, err = template.ParseInputValue(ctx, v, inputDef, true) + if value, found := inputsFile[inputDef.ID]; found { + inputValue, err = template.ParseInputValue(ctx, value, inputDef, true) if err != nil { return errors.NewNestedError(err, errors.New("please fix the value in the inputs JSON file")) }