(t *testing.T)
| 496 | } |
| 497 | |
| 498 | func TestVCSProviderUserActuatorAndExport(t *testing.T) { |
| 499 | t.Parallel() |
| 500 | a := require.New(t) |
| 501 | ctx := context.Background() |
| 502 | ctl := &controller{} |
| 503 | ctx, err := ctl.StartServerWithExternalPg(ctx) |
| 504 | a.NoError(err) |
| 505 | defer ctl.Close(ctx) |
| 506 | |
| 507 | stores := getStore(t, ctl.server) |
| 508 | workspaceID, err := stores.GetWorkspaceID(ctx) |
| 509 | a.NoError(err) |
| 510 | |
| 511 | ok, err := stores.TouchVCSProviderUser(ctx, workspaceID, &store.VCSProviderUserMessage{ |
| 512 | VCSType: v1pb.VCSType_GITHUB, |
| 513 | UserID: "1001", |
| 514 | Payload: &storepb.VCSProviderUserPayload{ |
| 515 | UserName: "alice", |
| 516 | DisplayName: "Alice", |
| 517 | }, |
| 518 | }, 90*24*time.Hour, 20) |
| 519 | a.NoError(err) |
| 520 | a.True(ok) |
| 521 | |
| 522 | _, err = stores.GetDB().ExecContext(ctx, ` |
| 523 | INSERT INTO vcs_provider_user (workspace, vcs_type, user_id, last_seen_at, payload) |
| 524 | VALUES ($1, $2, 'inactive-1', now() - interval '91 days', '{"userName":"inactive"}'::jsonb) |
| 525 | `, workspaceID, v1pb.VCSType_GITHUB.String()) |
| 526 | a.NoError(err) |
| 527 | |
| 528 | info, err := ctl.actuatorServiceClient.GetActuatorInfo(ctx, connect.NewRequest(&v1pb.GetActuatorInfoRequest{})) |
| 529 | a.NoError(err) |
| 530 | a.Equal(int32(1), info.Msg.ActiveVcsUserCount) |
| 531 | |
| 532 | _, err = stores.GetDB().ExecContext(ctx, ` |
| 533 | INSERT INTO vcs_provider_user (workspace, vcs_type, user_id, last_seen_at, payload) |
| 534 | VALUES ($1, $2, '1002', now(), '{"userName":"bob"}'::jsonb) |
| 535 | `, workspaceID, v1pb.VCSType_GITHUB.String()) |
| 536 | a.NoError(err) |
| 537 | info, err = ctl.actuatorServiceClient.GetActuatorInfo(ctx, connect.NewRequest(&v1pb.GetActuatorInfoRequest{})) |
| 538 | a.NoError(err) |
| 539 | a.Equal(int32(1), info.Msg.ActiveVcsUserCount) |
| 540 | |
| 541 | body, err := ctl.subscriptionServiceClient.ExportVCSProviderUsers(ctx, connect.NewRequest(&v1pb.ExportVCSProviderUsersRequest{})) |
| 542 | a.NoError(err) |
| 543 | a.Equal("text/csv; charset=utf-8", body.Msg.ContentType) |
| 544 | csv := string(body.Msg.Data) |
| 545 | a.Contains(csv, "vcs_type,user_id,user_name,display_name,last_seen_at") |
| 546 | a.Contains(csv, "GITHUB,1001,alice,Alice,") |
| 547 | a.Contains(csv, "GITHUB,1002,bob,,") |
| 548 | a.NotContains(csv, "inactive-1") |
| 549 | } |
| 550 | |
| 551 | func TestVCSProviderUserExportEscapesSpreadsheetFormulas(t *testing.T) { |
| 552 | t.Parallel() |
nothing calls this directly
no test coverage detected