diff --git a/internal/cli/apps.go b/internal/cli/apps.go index 097f2bd23..e84abe225 100644 --- a/internal/cli/apps.go +++ b/internal/cli/apps.go @@ -513,8 +513,24 @@ func createAppCmd(cli *cli) *cobra.Command { // Prompt for resource server identifier if app type is resource_server. if appIsResourceServer { - if err := appResourceServerIdentifier.Ask(cmd, &inputs.ResourceServerIdentifier, nil); err != nil { - return err + if !appResourceServerIdentifier.IsSet(cmd) { + var selectedAPIID string + if err := appResourceServerIdentifier.Pick(cmd, &selectedAPIID, cli.apiPickerOptionsWithoutAuth0); err != nil { + return err + } + + var selectedAPI *management.ResourceServer + if err := ansi.Waiting(func() error { + var err error + selectedAPI, err = cli.api.ResourceServer.Read(cmd.Context(), selectedAPIID) + return err + }); err != nil { + return fmt.Errorf("failed to read selected API: %w", err) + } + + inputs.ResourceServerIdentifier = selectedAPI.GetIdentifier() + } else if strings.TrimSpace(inputs.ResourceServerIdentifier) == "" { + return fmt.Errorf("resource-server-identifier cannot be empty for resource_server app type") } } diff --git a/internal/cli/apps_test.go b/internal/cli/apps_test.go index 904b73f5b..ad6f3474e 100644 --- a/internal/cli/apps_test.go +++ b/internal/cli/apps_test.go @@ -90,6 +90,54 @@ func TestAppsListCmd(t *testing.T) { } } +func TestAppsCreateCmd(t *testing.T) { + tests := []struct { + name string + args []string + expectedError string + }{ + { + name: "Resource Server - resource-server-identifier is empty string", + args: []string{ + "--name", "My Resource Server App", + "--type", "resource_server", + "--resource-server-identifier", "", + }, + expectedError: "resource-server-identifier cannot be empty for resource_server app type", + }, + { + name: "Resource Server - resource-server-identifier is whitespace only", + args: []string{ + "--name", "My Resource Server App", + "--type", "resource_server", + "--resource-server-identifier", " ", + }, + expectedError: "resource-server-identifier cannot be empty for resource_server app type", + }, + { + name: "Resource Server - resource-server-identifier is tab/newline", + args: []string{ + "--name", "My Resource Server App", + "--type", "resource_server", + "--resource-server-identifier", "\t\n", + }, + expectedError: "resource-server-identifier cannot be empty for resource_server app type", + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + cli := &cli{} + cli.noInput = true // Non-interactive mode. + cmd := createAppCmd(cli) + cmd.SetArgs(test.args) + err := cmd.Execute() + + assert.EqualError(t, err, test.expectedError) + }) + } +} + func TestFormatAppSettingsPath(t *testing.T) { assert.Empty(t, formatAppSettingsPath("")) assert.Equal(t, "applications/app-id-1/settings", formatAppSettingsPath("app-id-1"))