Skip to content

Commit

Permalink
Fix init of stepsGroups for user prompt
Browse files Browse the repository at this point in the history
  • Loading branch information
JakubMatejka committed Mar 30, 2022
1 parent 80415cd commit 787063d
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 16 deletions.
25 changes: 13 additions & 12 deletions internal/pkg/cli/dialog/steps.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,34 +16,35 @@ import (

// stepsDialog to define steps and steps groups.
type stepsDialog struct {
prompt prompt.Prompt
stepsGroups input.StepsGroups
prompt prompt.Prompt
}

func newStepsDialog(prompt prompt.Prompt) *stepsDialog {
return &stepsDialog{prompt: prompt, stepsGroups: make(input.StepsGroups, 0)}
return &stepsDialog{prompt: prompt}
}

func (d *stepsDialog) ask() (input.StepsGroups, error) {
result, _ := d.prompt.Editor("md", &prompt.Question{
Description: `Please define steps and groups for user inputs specification.`,
Default: d.defaultValue(),
Validator: func(val interface{}) error {
if err := d.parse(val.(string)); err != nil {
_, err := d.parse(val.(string))
if err != nil {
// Print errors to new line
return utils.PrefixError("\n", err)
}
return nil
},
})
return d.stepsGroups, d.parse(result)
return d.parse(result)
}

func (d *stepsDialog) parse(result string) error {
func (d *stepsDialog) parse(result string) (input.StepsGroups, error) {
result = strhelper.StripHtmlComments(result)
scanner := bufio.NewScanner(strings.NewReader(result))
errors := utils.NewMultiError()
lineNum := 0
stepsGroups := make(input.StepsGroups, 0)

var currentGroup *input.StepsGroup
var currentStep *input.Step
Expand All @@ -65,7 +66,7 @@ func (d *stepsDialog) parse(result string) error {
// Group definition
currentGroup = &input.StepsGroup{Steps: make([]*input.Step, 0)}
currentStep = nil
d.stepsGroups = append(d.stepsGroups, currentGroup)
stepsGroups = append(stepsGroups, currentGroup)

invalidDefinition = false
case strings.HasPrefix(line, `### Step`):
Expand Down Expand Up @@ -134,10 +135,10 @@ func (d *stepsDialog) parse(result string) error {
}

// Validate
if len(d.stepsGroups) == 0 {
return fmt.Errorf("input must contain at least 1 group")
if len(stepsGroups) == 0 {
return nil, fmt.Errorf("input must contain at least 1 group")
}
if e := d.stepsGroups.Validate(); e != nil {
if e := stepsGroups.Validate(); e != nil {
// nolint: errorlint
err := e.(*utils.MultiError)
for index, item := range err.Errors {
Expand All @@ -153,7 +154,7 @@ func (d *stepsDialog) parse(result string) error {
groupIndex, _ := strconv.Atoi(submatch[1])
stepIndex, _ := strconv.Atoi(submatch[2])
groupOrder := groupIndex + 1
return fmt.Sprintf(`group %d, step "%s": `, groupOrder, d.stepsGroups[groupIndex].Steps[stepIndex].Id)
return fmt.Sprintf(`group %d, step "%s": `, groupOrder, stepsGroups[groupIndex].Steps[stepIndex].Id)
})
} else {
// Replace group by index. Example:
Expand All @@ -177,7 +178,7 @@ func (d *stepsDialog) parse(result string) error {
errors.Append(err)
}

return errors.ErrorOrNil()
return stepsGroups, errors.ErrorOrNil()
}

func (d *stepsDialog) defaultValue() string {
Expand Down
8 changes: 4 additions & 4 deletions internal/pkg/cli/dialog/steps_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,9 @@ icon: common

// Parse
d := newStepsDialog(nopPrompt.New())
err := d.parse(in)
stepsGroups, err := d.parse(in)
assert.NoError(t, err)
assert.Equal(t, expected, d.stepsGroups)
assert.Equal(t, expected, stepsGroups)
}

func TestStepsDialog_Parse_Errors(t *testing.T) {
Expand Down Expand Up @@ -104,7 +104,7 @@ description: Description

// Parse
d := newStepsDialog(nopPrompt.New())
err := d.parse(in)
_, err := d.parse(in)
assert.Error(t, err)
assert.Equal(t, strings.Trim(expected, "\n"), err.Error())
}
Expand All @@ -121,7 +121,7 @@ input must contain at least 1 group

// Parse
d := newStepsDialog(nopPrompt.New())
err := d.parse(in)
_, err := d.parse(in)
assert.Error(t, err)
assert.Equal(t, strings.Trim(expected, "\n"), err.Error())
}

0 comments on commit 787063d

Please sign in to comment.