Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes audit trail pagination data within list endpoint #586

Merged
merged 2 commits into from Nov 14, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
@@ -1,5 +1,9 @@
# Unreleased

## Bug Fixes

* Fixes `AuditTrail` pagination parameters (`CurrentPage`, `PreviousPage`, `NextPage`, `TotalPages`, `TotalCount`), which were not deserialized after reading from the List endpoint by @brandonc [#586](https://github.com/hashicorp/go-tfe/pull/586)

## Enhancements

* Add OPA support to the Policy Set APIs by @mrinalirao [#575](https://github.com/hashicorp/go-tfe/pull/575)
Expand Down
13 changes: 10 additions & 3 deletions audit_trail.go
Expand Up @@ -52,6 +52,14 @@ type AuditTrailResource struct {
Meta map[string]interface{} `json:"meta"`
}

type AuditTrailPagination struct {
CurrentPage int `json:"current_page"`
PreviousPage int `json:"prev_page"`
NextPage int `json:"next_page"`
TotalPages int `json:"total_pages"`
TotalCount int `json:"total_count"`
}

// AuditTrail represents an event in the TFC audit log.
type AuditTrail struct {
ID string `json:"id"`
Expand All @@ -66,9 +74,8 @@ type AuditTrail struct {

// AuditTrailList represents a list of audit trails.
type AuditTrailList struct {
*Pagination

Items []*AuditTrail `json:"data"`
*AuditTrailPagination `json:"pagination"`
Items []*AuditTrail `json:"data"`
}

// AuditTrailListOptions represents the options for listing audit trails.
Expand Down
49 changes: 46 additions & 3 deletions audit_trail_integration_test.go
Expand Up @@ -21,17 +21,60 @@ func TestAuditTrailsList(t *testing.T) {
auditTrailClient := testAuditTrailClient(t, userClient, org)

// First let's generate some audit events in this test organization
_, wkspace1Cleanup := createWorkspace(t, userClient, org)
ws, wkspace1Cleanup := createWorkspace(t, userClient, org)
t.Cleanup(wkspace1Cleanup)

_, wkspace2Cleanup := createWorkspace(t, userClient, org)
t.Cleanup(wkspace2Cleanup)
_, err := userClient.Workspaces.Lock(ctx, ws.ID, WorkspaceLockOptions{})
require.NoError(t, err)
_, err = userClient.Workspaces.Unlock(ctx, ws.ID)
require.NoError(t, err)

_, err = userClient.Workspaces.Lock(ctx, ws.ID, WorkspaceLockOptions{})
require.NoError(t, err)
_, err = userClient.Workspaces.Unlock(ctx, ws.ID)
require.NoError(t, err)

_, err = userClient.Workspaces.Lock(ctx, ws.ID, WorkspaceLockOptions{})
require.NoError(t, err)
_, err = userClient.Workspaces.Unlock(ctx, ws.ID)
require.NoError(t, err)

t.Run("with no specified timeframe", func(t *testing.T) {
atl, err := auditTrailClient.AuditTrails.List(ctx, nil)
require.NoError(t, err)
require.NotEmpty(t, atl.Items)

require.Equal(t, len(atl.Items), 8)

t.Run("pagination parameters", func(t *testing.T) {
page1, err := auditTrailClient.AuditTrails.List(ctx, &AuditTrailListOptions{
ListOptions: &ListOptions{
PageNumber: 1,
PageSize: 4,
},
})

require.NoError(t, err)

assert.NotEmpty(t, page1.Items)
assert.Equal(t, 1, page1.CurrentPage)
assert.Equal(t, 2, page1.TotalPages)
assert.Equal(t, 8, page1.TotalCount)

page2, err := auditTrailClient.AuditTrails.List(ctx, &AuditTrailListOptions{
ListOptions: &ListOptions{
PageNumber: 2,
PageSize: 4,
},
})

require.NoError(t, err)

assert.NotEmpty(t, page2.Items)
assert.Equal(t, 2, page2.CurrentPage)
assert.Equal(t, 0, page2.NextPage)
})

log := atl.Items[0]
assert.NotEmpty(t, log.ID)
assert.NotEmpty(t, log.Timestamp)
Expand Down