Skip to content

Commit a054864

Browse files
committed
fix: bring back the use of DescribeCmd for user describe
1 parent 1fcab98 commit a054864

File tree

2 files changed

+22
-49
lines changed

2 files changed

+22
-49
lines changed

internal/cmd/iam/user_describe.go

Lines changed: 17 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,10 @@ import (
1717
)
1818

1919
func newUserDescribeCommand(s *state.State) *cobra.Command {
20-
return base.Cmd{
21-
BaseCobraCommand: func() *cobra.Command {
22-
return &cobra.Command{
23-
Use: "describe <user-id-or-email>",
24-
Short: "Describe a user and their assigned roles",
25-
Args: util.ExactArgs(1, "a user ID or email"),
26-
}
27-
},
20+
return base.DescribeCmd[*iamv1.User]{
21+
Use: "describe <user-id-or-email>",
22+
Short: "Describe a user and their assigned roles",
23+
Args: util.ExactArgs(1, "a user ID or email"),
2824
Long: `Describe a user and their assigned roles.
2925
3026
Accepts either a user ID (UUID) or an email address. Displays the user's
@@ -37,23 +33,27 @@ qcloud iam user describe user@example.com
3733
3834
# Output as JSON
3935
qcloud iam user describe user@example.com --json`,
40-
Run: func(s *state.State, cmd *cobra.Command, args []string) error {
41-
ctx := cmd.Context()
42-
client, err := s.Client(ctx)
36+
Fetch: func(s *state.State, cmd *cobra.Command, args []string) (*iamv1.User, error) {
37+
client, err := s.Client(cmd.Context())
4338
if err != nil {
44-
return err
39+
return nil, err
4540
}
4641
accountID, err := s.AccountID()
42+
if err != nil {
43+
return nil, err
44+
}
45+
return resolveUser(cmd, client, accountID, args[0])
46+
},
47+
PrintText: func(cmd *cobra.Command, w io.Writer, user *iamv1.User) error {
48+
ctx := cmd.Context()
49+
client, err := s.Client(ctx)
4750
if err != nil {
4851
return err
4952
}
50-
51-
user, err := resolveUser(cmd, client, accountID, args[0])
53+
accountID, err := s.AccountID()
5254
if err != nil {
5355
return err
5456
}
55-
56-
// Fetch the user's roles.
5757
rolesResp, err := client.IAM().ListUserRoles(ctx, &iamv1.ListUserRolesRequest{
5858
AccountId: accountID,
5959
UserId: user.GetId(),
@@ -62,18 +62,7 @@ qcloud iam user describe user@example.com --json`,
6262
return fmt.Errorf("failed to list user roles: %w", err)
6363
}
6464
roles := rolesResp.GetRoles()
65-
66-
permissions := effectivePermissions(roles)
67-
68-
if s.Config.JSONOutput() {
69-
return output.PrintJSON(cmd.OutOrStdout(), struct {
70-
User *iamv1.User `json:"user"`
71-
Roles []*iamv1.Role `json:"roles"`
72-
}{User: user, Roles: roles})
73-
}
74-
75-
w := cmd.OutOrStdout()
76-
return printUserWithRoles(w, user, roles, permissions)
65+
return printUserWithRoles(w, user, roles, effectivePermissions(roles))
7766
},
7867
}.CobraCommand(s)
7968
}

internal/cmd/iam/user_describe_test.go

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -135,39 +135,23 @@ func TestUserDescribe_JSON(t *testing.T) {
135135
env := testutil.NewTestEnv(t)
136136

137137
userID := testUserID
138-
cat := testRoleCategory
139138
env.IAMServer.ListUsersCalls.Returns(&iamv1.ListUsersResponse{
140139
Items: []*iamv1.User{
141140
{Id: userID, Email: "alice@example.com", Status: iamv1.UserStatus_USER_STATUS_ACTIVE},
142141
},
143142
}, nil)
144-
env.IAMServer.ListUserRolesCalls.Returns(&iamv1.ListUserRolesResponse{
145-
Roles: []*iamv1.Role{
146-
{Id: "role-id-1", Name: "admin", Permissions: []*iamv1.Permission{
147-
{Value: "read:clusters", Category: &cat},
148-
}},
149-
},
150-
}, nil)
143+
// JSON output does not fetch roles; no ListUserRoles call expected.
151144

152145
stdout, _, err := testutil.Exec(t, env, "iam", "user", "describe", userID, "--json")
153146
require.NoError(t, err)
154147

155148
var got struct {
156-
User struct {
157-
Id string `json:"id"`
158-
Email string `json:"email"`
159-
} `json:"user"`
160-
Roles []struct {
161-
Id string `json:"id"`
162-
Name string `json:"name"`
163-
} `json:"roles"`
149+
Id string `json:"id"`
150+
Email string `json:"email"`
164151
}
165152
require.NoError(t, json.Unmarshal([]byte(stdout), &got))
166-
assert.Equal(t, userID, got.User.Id)
167-
assert.Equal(t, "alice@example.com", got.User.Email)
168-
require.Len(t, got.Roles, 1)
169-
assert.Equal(t, "role-id-1", got.Roles[0].Id)
170-
assert.Equal(t, "admin", got.Roles[0].Name)
153+
assert.Equal(t, userID, got.Id)
154+
assert.Equal(t, "alice@example.com", got.Email)
171155
}
172156

173157
func TestUserDescribe_NotFound(t *testing.T) {

0 commit comments

Comments
 (0)