Skip to content

Commit

Permalink
Merge pull request #586 from hashicorp/brandonc/audit_trail_pagination
Browse files Browse the repository at this point in the history
Fixes audit trail pagination data within list endpoint
  • Loading branch information
brandonc committed Nov 14, 2022
2 parents 0d8c80d + 6aee364 commit 7a3cfda
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 6 deletions.
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

0 comments on commit 7a3cfda

Please sign in to comment.