Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
extract survey question logic into a separate function and add tests
  • Loading branch information
teresaromero committed Sep 16, 2025
commit 6401c45b82896a8968ce68839f6678a6b1ede50f
86 changes: 47 additions & 39 deletions cmd/create_data_stream.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,49 +56,13 @@ func createDataStreamCommandAction(cmd *cobra.Command, args []string) error {
return fmt.Errorf("data-streams are not supported in input packages")
}

validator := surveyext.Validator{Cwd: "."}
qs := []*survey.Question{
{
Name: "name",
Prompt: &survey.Input{
Message: "Data stream name:",
Default: "new_data_stream",
},
Validate: survey.ComposeValidators(survey.Required, validator.DataStreamDoesNotExist, validator.DataStreamName),
},
{
Name: "title",
Prompt: &survey.Input{
Message: "Data stream title:",
Default: "New Data Stream",
},
Validate: survey.Required,
},
{
Name: "type",
Prompt: &survey.Select{
Message: "Type:",
Options: []string{"logs", "metrics"},
Default: "logs",
},
Validate: survey.Required,
},
}

sv, err := semver.NewVersion(manifest.SpecVersion)
if err != nil {
return fmt.Errorf("failed to obtain spec version from package manifest in \"%s\": %w", packageRoot, err)
}
if !sv.LessThan(semver3_2_0) {
qs = append(qs, &survey.Question{
Name: "subobjects",
Prompt: &survey.Confirm{
Message: "Enable creation of subobjects for fields with dots in their names?",
Default: false,
},
Validate: survey.Required,
})
}

qs := getInitialSurveyQuestionsForVersion(sv)

var answers newDataStreamAnswers
err = survey.Ask(qs, &answers)
if err != nil {
Expand Down Expand Up @@ -241,3 +205,47 @@ func createDataStreamDescriptorFromAnswers(answers newDataStreamAnswers, package
PackageRoot: packageRoot,
}
}

func getInitialSurveyQuestionsForVersion(specVersion *semver.Version) []*survey.Question {
validator := surveyext.Validator{Cwd: "."}
qs := []*survey.Question{
{
Name: "name",
Prompt: &survey.Input{
Message: "Data stream name:",
Default: "new_data_stream",
},
Validate: survey.ComposeValidators(survey.Required, validator.DataStreamDoesNotExist, validator.DataStreamName),
},
{
Name: "title",
Prompt: &survey.Input{
Message: "Data stream title:",
Default: "New Data Stream",
},
Validate: survey.Required,
},
{
Name: "type",
Prompt: &survey.Select{
Message: "Type:",
Options: []string{"logs", "metrics"},
Default: "logs",
},
Validate: survey.Required,
},
}

if !specVersion.LessThan(semver3_2_0) {
qs = append(qs, &survey.Question{
Name: "subobjects",
Prompt: &survey.Confirm{
Message: "Enable creation of subobjects for fields with dots in their names?",
Default: false,
},
Validate: survey.Required,
})
}

return qs
}
43 changes: 43 additions & 0 deletions cmd/create_data_stream_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package cmd

import (
"testing"

"github.com/AlecAivazis/survey/v2"
"github.com/Masterminds/semver/v3"
"github.com/stretchr/testify/assert"
)

func TestGetSurveyQuestionsForVersion_BelowSemver3_2_0(t *testing.T) {
version := semver.MustParse("3.1.9")
questions := getInitialSurveyQuestionsForVersion(version)

assert.Len(t, questions, 3, "should return 3 questions for spec version < 3.2.0")

assert.Equal(t, "name", questions[0].Name)
assert.IsType(t, &survey.Input{}, questions[0].Prompt)
assert.Equal(t, "title", questions[1].Name)
assert.IsType(t, &survey.Input{}, questions[1].Prompt)
assert.Equal(t, "type", questions[2].Name)
assert.IsType(t, &survey.Select{}, questions[2].Prompt)
}

func TestGetSurveyQuestionsForVersion_EqualSemver3_2_0(t *testing.T) {
version := semver.MustParse("3.2.0")
questions := getInitialSurveyQuestionsForVersion(version)

assert.Len(t, questions, 4, "should return 4 questions for spec version >= 3.2.0")

assert.Equal(t, "subobjects", questions[3].Name)
assert.IsType(t, &survey.Confirm{}, questions[3].Prompt)
}

func TestGetSurveyQuestionsForVersion_AboveSemver3_2_0(t *testing.T) {
version := semver.MustParse("3.3.0")
questions := getInitialSurveyQuestionsForVersion(version)

assert.Len(t, questions, 4, "should return 4 questions for spec version > 3.2.0")

assert.Equal(t, "subobjects", questions[3].Name)
assert.IsType(t, &survey.Confirm{}, questions[3].Prompt)
}