Skip to content

Commit 98875e9

Browse files
committed
fix(create): preserve prompt error messages
1 parent f722ba2 commit 98875e9

2 files changed

Lines changed: 59 additions & 3 deletions

File tree

cmd/create.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,17 +152,17 @@ func runCreateApp(cmd *cobra.Command, args []string) error {
152152

153153
appName, err := create.PromptForAppName(appName)
154154
if err != nil {
155-
return fmt.Errorf("failed to get app name: %w", err)
155+
return err
156156
}
157157

158158
language, err = create.PromptForLanguage(language)
159159
if err != nil {
160-
return fmt.Errorf("failed to get language: %w", err)
160+
return err
161161
}
162162

163163
template, err = create.PromptForTemplate(template, language)
164164
if err != nil {
165-
return fmt.Errorf("failed to get template: %w", err)
165+
return err
166166
}
167167

168168
c := CreateCmd{}

cmd/create_test.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010

1111
"github.com/kernel/cli/pkg/create"
1212
"github.com/pterm/pterm"
13+
"github.com/spf13/cobra"
1314
"github.com/stretchr/testify/assert"
1415
"github.com/stretchr/testify/require"
1516
)
@@ -93,6 +94,61 @@ func TestCreateCommand(t *testing.T) {
9394
}
9495
}
9596

97+
func TestRunCreateApp_DoesNotWrapPromptErrors(t *testing.T) {
98+
tests := []struct {
99+
name string
100+
flagValues map[string]string
101+
expectedContains string
102+
unexpectedWrap string
103+
}{
104+
{
105+
name: "missing app name returns direct prompt error",
106+
flagValues: map[string]string{},
107+
expectedContains: "cannot prompt for app name",
108+
unexpectedWrap: "failed to get app name:",
109+
},
110+
{
111+
name: "invalid language returns direct validation error",
112+
flagValues: map[string]string{
113+
"name": "my-app",
114+
// template is intentionally omitted because language validation fails first.
115+
"language": "ruby",
116+
},
117+
expectedContains: "invalid --language 'ruby'",
118+
unexpectedWrap: "failed to get language:",
119+
},
120+
{
121+
name: "invalid template returns direct validation error",
122+
flagValues: map[string]string{
123+
"name": "my-app",
124+
"language": "typescript",
125+
"template": "nonexistent-template",
126+
},
127+
expectedContains: "invalid --template 'nonexistent-template'",
128+
unexpectedWrap: "failed to get template:",
129+
},
130+
}
131+
132+
for _, tt := range tests {
133+
t.Run(tt.name, func(t *testing.T) {
134+
cmd := &cobra.Command{}
135+
cmd.Flags().String("name", "", "")
136+
cmd.Flags().String("language", "", "")
137+
cmd.Flags().String("template", "", "")
138+
cmd.Flags().Bool("yes", false, "")
139+
140+
for flag, value := range tt.flagValues {
141+
require.NoError(t, cmd.Flags().Set(flag, value))
142+
}
143+
144+
err := runCreateApp(cmd, nil)
145+
require.Error(t, err)
146+
assert.Contains(t, err.Error(), tt.expectedContains)
147+
assert.NotContains(t, err.Error(), tt.unexpectedWrap)
148+
})
149+
}
150+
}
151+
96152
// TestAllTemplatesWithDependencies tests all available templates and verifies dependencies are installed
97153
func TestAllTemplatesWithDependencies(t *testing.T) {
98154
if testing.Short() {

0 commit comments

Comments
 (0)