From 8e385a109f1f7fc1a14079f07e4a4f97f17260b8 Mon Sep 17 00:00:00 2001 From: Alexander Liotta Date: Mon, 31 Jul 2023 18:04:45 -0400 Subject: [PATCH] Prompt User For Team Name (#1329) --- cloud/team/team.go | 8 +++++++- cloud/team/team_test.go | 16 ++++++++++++++-- cloud/user/user.go | 2 +- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/cloud/team/team.go b/cloud/team/team.go index 372a3221b..097432fc3 100644 --- a/cloud/team/team.go +++ b/cloud/team/team.go @@ -12,6 +12,7 @@ import ( astrocore "github.com/astronomer/astro-cli/astro-client-core" "github.com/astronomer/astro-cli/cloud/user" "github.com/astronomer/astro-cli/context" + "github.com/astronomer/astro-cli/pkg/ansi" "github.com/astronomer/astro-cli/pkg/input" "github.com/astronomer/astro-cli/pkg/printutil" ) @@ -28,6 +29,7 @@ var ( ErrNoTeamsFoundInWorkspace = errors.New("no teams found in your workspace") ErrNoTeamMembersFoundInTeam = errors.New("no team members found in team") ErrNoUsersFoundInOrg = errors.New("no users found in your organization") + ErrNoTeamNameProvided = errors.New("you must give your Team a name") teamPagnationLimit = 100 ) @@ -42,7 +44,11 @@ func CreateTeam(name, description, role string, out io.Writer, client astrocore. return err } if name == "" { - return ErrInvalidName + fmt.Println("Please specify a name for your Team") + name = input.Text(ansi.Bold("\nTeam name: ")) + if name == "" { + return ErrNoTeamNameProvided + } } ctx, err := context.GetCurrentContext() if err != nil { diff --git a/cloud/team/team_test.go b/cloud/team/team_test.go index b3e035fa0..191b68a61 100644 --- a/cloud/team/team_test.go +++ b/cloud/team/team_test.go @@ -1019,6 +1019,18 @@ func TestCreate(t *testing.T) { assert.Equal(t, expectedOutMessage, out.String()) }) + t.Run("happy path no name passed so user types one in when prompted", func(t *testing.T) { + teamName := "Test Team Name" + expectedOutMessage := fmt.Sprintf("Astro Team %s was successfully created\n", teamName) + out := new(bytes.Buffer) + mockClient := new(astrocore_mocks.ClientWithResponsesInterface) + mockClient.On("CreateTeamWithResponse", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(&CreateTeamResponseOK, nil).Once() + defer testUtil.MockUserInput(t, teamName)() + err := CreateTeam("", *team1.Description, "ORGANIZATION_MEMBER", out, mockClient) + assert.NoError(t, err) + assert.Equal(t, expectedOutMessage, out.String()) + }) + t.Run("error path when CreateTeamWithResponse return network error", func(t *testing.T) { out := new(bytes.Buffer) mockClient := new(astrocore_mocks.ClientWithResponsesInterface) @@ -1056,12 +1068,12 @@ func TestCreate(t *testing.T) { assert.Error(t, err) assert.Equal(t, expectedOutMessage, out.String()) }) - t.Run("error path no name passed in", func(t *testing.T) { + t.Run("error path no name passed in and user doesn't type one in when prompted", func(t *testing.T) { testUtil.InitTestConfig(testUtil.CloudPlatform) out := new(bytes.Buffer) mockClient := new(astrocore_mocks.ClientWithResponsesInterface) err := CreateTeam("", *team1.Description, "ORGANIZATION_MEMBER", out, mockClient) - assert.EqualError(t, err, "no name provided for the team. Retry with a valid name") + assert.EqualError(t, err, "you must give your Team a name") }) t.Run("error path invalid org role", func(t *testing.T) { diff --git a/cloud/user/user.go b/cloud/user/user.go index 2590e0618..c7a526384 100644 --- a/cloud/user/user.go +++ b/cloud/user/user.go @@ -142,7 +142,7 @@ func SelectUser(users []astrocore.User, workspace bool) (astrocore.User, error) Header: []string{"#", "FULLNAME", "EMAIL", "ID", roleColumn, "CREATE DATE"}, } - fmt.Println("\nPlease select the user who's role you would like to update:") + fmt.Println("\nPlease select the user:") userMap := map[string]astrocore.User{} for i := range users {