|
1 | 1 | package cmd |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "encoding/json" |
4 | 5 | "strings" |
5 | 6 | "testing" |
6 | 7 |
|
@@ -160,3 +161,55 @@ func TestNewEnvCommand_RefreshFlagRegistered(t *testing.T) { |
160 | 161 | t.Error("expected --refresh flag to be registered") |
161 | 162 | } |
162 | 163 | } |
| 164 | + |
| 165 | +func TestEnvCommand_JSONOutput(t *testing.T) { |
| 166 | + credsJSON := `{"aws_access_key":"ASIAXXX","aws_secret_access_key":"secret","aws_session_token":"tok"}` |
| 167 | + |
| 168 | + authLoader := &mockAuthLoader{ |
| 169 | + token: &authmodels.IdsecToken{Token: "test-jwt"}, |
| 170 | + } |
| 171 | + eligLister := &mockEligibilityLister{ |
| 172 | + response: &models.EligibilityResponse{ |
| 173 | + Response: []models.EligibleTarget{{ |
| 174 | + OrganizationID: "o-1", WorkspaceID: "acct-1", WorkspaceName: "AWS Mgmt", |
| 175 | + WorkspaceType: models.WorkspaceTypeAccount, |
| 176 | + RoleInfo: models.RoleInfo{ID: "role-1", Name: "Admin"}, |
| 177 | + }}, |
| 178 | + Total: 1, |
| 179 | + }, |
| 180 | + } |
| 181 | + elevSvc := &mockElevateService{ |
| 182 | + response: &models.ElevateResponse{Response: models.ElevateAccessResult{ |
| 183 | + CSP: models.CSPAWS, OrganizationID: "o-1", |
| 184 | + Results: []models.ElevateTargetResult{{ |
| 185 | + WorkspaceID: "acct-1", RoleID: "Admin", SessionID: "sess-1", |
| 186 | + AccessCredentials: &credsJSON, |
| 187 | + }}, |
| 188 | + }}, |
| 189 | + } |
| 190 | + selector := &mockTargetSelector{ |
| 191 | + target: &models.EligibleTarget{ |
| 192 | + OrganizationID: "o-1", WorkspaceID: "acct-1", WorkspaceName: "AWS Mgmt", |
| 193 | + WorkspaceType: models.WorkspaceTypeAccount, |
| 194 | + RoleInfo: models.RoleInfo{ID: "role-1", Name: "Admin"}, |
| 195 | + }, |
| 196 | + } |
| 197 | + |
| 198 | + cmd := NewEnvCommandWithDeps(nil, authLoader, eligLister, elevSvc, selector, config.DefaultConfig()) |
| 199 | + // Attach to root so --output flag is available |
| 200 | + root := newTestRootCommand() |
| 201 | + root.AddCommand(cmd) |
| 202 | + |
| 203 | + output, err := executeCommand(root, "env", "--provider", "aws", "--target", "AWS Mgmt", "--role", "Admin", "--output", "json") |
| 204 | + if err != nil { |
| 205 | + t.Fatalf("unexpected error: %v\noutput: %s", err, output) |
| 206 | + } |
| 207 | + |
| 208 | + var parsed awsCredentialOutput |
| 209 | + if err := json.Unmarshal([]byte(output), &parsed); err != nil { |
| 210 | + t.Fatalf("invalid JSON: %v\n%s", err, output) |
| 211 | + } |
| 212 | + if parsed.AccessKeyID != "ASIAXXX" { |
| 213 | + t.Errorf("accessKeyId = %q, want ASIAXXX", parsed.AccessKeyID) |
| 214 | + } |
| 215 | +} |
0 commit comments