nolint:paralleltest,tparallel // Subtests share one auditor and run sequentially.
(t *testing.T)
| 548 | |
| 549 | //nolint:paralleltest,tparallel // Subtests share one auditor and run sequentially. |
| 550 | func TestUserSkillAudit(t *testing.T) { |
| 551 | t.Parallel() |
| 552 | |
| 553 | auditor := audit.NewMock() |
| 554 | adminClient := coderdtest.New(t, &coderdtest.Options{Auditor: auditor}) |
| 555 | firstUser := coderdtest.CreateFirstUser(t, adminClient) |
| 556 | memberClient, _ := coderdtest.CreateAnotherUser(t, adminClient, firstUser.OrganizationID) |
| 557 | member := codersdk.NewExperimentalClient(memberClient) |
| 558 | ctx := testutil.Context(t, testutil.WaitMedium) |
| 559 | auditor.ResetLogs() |
| 560 | |
| 561 | genName := func(t *testing.T) string { |
| 562 | return strings.ToLower(strings.ReplaceAll(t.Name(), "/", "-")) |
| 563 | } |
| 564 | |
| 565 | t.Run("CreateEmitsLog", func(t *testing.T) { |
| 566 | auditor.ResetLogs() |
| 567 | name := genName(t) |
| 568 | |
| 569 | skill, err := member.CreateUserSkill(ctx, codersdk.Me, codersdk.CreateUserSkillRequest{ |
| 570 | Content: userSkillMarkdown(name, "Audit", "Body."), |
| 571 | }) |
| 572 | require.NoError(t, err) |
| 573 | |
| 574 | logs := auditor.AuditLogs() |
| 575 | require.Len(t, logs, 1) |
| 576 | assert.Equal(t, database.AuditActionCreate, logs[0].Action) |
| 577 | assert.Equal(t, skill.ID, logs[0].ResourceID) |
| 578 | assert.Equal(t, skill.Name, logs[0].ResourceTarget) |
| 579 | assert.EqualValues(t, http.StatusCreated, logs[0].StatusCode) |
| 580 | }) |
| 581 | |
| 582 | t.Run("UpdateEmitsLog", func(t *testing.T) { |
| 583 | auditor.ResetLogs() |
| 584 | name := genName(t) |
| 585 | |
| 586 | skill, err := member.CreateUserSkill(ctx, codersdk.Me, codersdk.CreateUserSkillRequest{ |
| 587 | Content: userSkillMarkdown(name, "Initial", "Body."), |
| 588 | }) |
| 589 | require.NoError(t, err) |
| 590 | _, err = member.UpdateUserSkill(ctx, codersdk.Me, name, codersdk.UpdateUserSkillRequest{ |
| 591 | Content: userSkillMarkdown(name, "Updated", "Updated body."), |
| 592 | }) |
| 593 | require.NoError(t, err) |
| 594 | |
| 595 | logs := auditor.AuditLogs() |
| 596 | require.Len(t, logs, 2) |
| 597 | assert.Equal(t, database.AuditActionCreate, logs[0].Action) |
| 598 | assert.Equal(t, database.AuditActionWrite, logs[1].Action) |
| 599 | assert.Equal(t, skill.ID, logs[1].ResourceID) |
| 600 | assert.Equal(t, skill.Name, logs[1].ResourceTarget) |
| 601 | assert.EqualValues(t, http.StatusOK, logs[1].StatusCode) |
| 602 | }) |
| 603 | |
| 604 | t.Run("DeleteEmitsLog", func(t *testing.T) { |
| 605 | auditor.ResetLogs() |
| 606 | name := genName(t) |
| 607 |
nothing calls this directly
no test coverage detected