diff --git a/internal/cli/roles.go b/internal/cli/roles.go index 41e350995..ef2426214 100644 --- a/internal/cli/roles.go +++ b/internal/cli/roles.go @@ -87,6 +87,9 @@ func listRolesCmd(cli *cli) *cobra.Command { if err != nil { return nil, false, err } + if roleList == nil { + return result, false, nil + } for _, role := range roleList.Roles { result = append(result, role) @@ -350,6 +353,10 @@ func (c *cli) rolePickerOptions(ctx context.Context) (pickerOptions, error) { var opts pickerOptions + if list == nil { + return nil, errors.New("there are currently no roles to choose from. Create one by running: `auth0 roles create`") + } + for _, c := range list.Roles { value := c.GetID() label := fmt.Sprintf("%s %s", c.GetName(), ansi.Faint("("+value+")")) diff --git a/internal/cli/roles_permissions.go b/internal/cli/roles_permissions.go index 799fceaa8..817ccb5be 100644 --- a/internal/cli/roles_permissions.go +++ b/internal/cli/roles_permissions.go @@ -91,6 +91,9 @@ func listRolePermissionsCmd(cli *cli) *cobra.Command { if err != nil { return nil, false, err } + if permissionsList == nil { + return result, false, nil + } for _, role := range permissionsList.Permissions { result = append(result, role) diff --git a/internal/cli/roles_test.go b/internal/cli/roles_test.go index 343a3ca32..214c476e1 100644 --- a/internal/cli/roles_test.go +++ b/internal/cli/roles_test.go @@ -3,6 +3,7 @@ package cli import ( "context" "errors" + "io" "testing" "github.com/auth0/go-auth0/management" @@ -12,8 +13,50 @@ import ( "github.com/auth0/auth0-cli/internal/auth0" "github.com/auth0/auth0-cli/internal/auth0/mock" + "github.com/auth0/auth0-cli/internal/display" ) +func TestListRolesCmd(t *testing.T) { + tests := []struct { + name string + roleList *management.RoleList + }{ + { + name: "nil role list (no results)", + roleList: nil, + }, + { + name: "empty role list", + roleList: &management.RoleList{Roles: []*management.Role{}}, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + roleAPI := mock.NewMockRoleAPI(ctrl) + roleAPI.EXPECT(). + List(gomock.Any(), gomock.Any(), gomock.Any()). + Return(test.roleList, nil) + + cli := &cli{ + renderer: &display.Renderer{ + MessageWriter: io.Discard, + ResultWriter: io.Discard, + }, + api: &auth0.API{Role: roleAPI}, + } + + cmd := listRolesCmd(cli) + cmd.SetArgs([]string{}) + + assert.NoError(t, cmd.Execute()) + }) + } +} + func TestRolesPickerOptions(t *testing.T) { tests := []struct { name string