Skip to content

Commit 7a3cfda

Browse files
authored
Merge pull request #586 from hashicorp/brandonc/audit_trail_pagination
Fixes audit trail pagination data within list endpoint
2 parents 0d8c80d + 6aee364 commit 7a3cfda

File tree

3 files changed

+60
-6
lines changed

3 files changed

+60
-6
lines changed

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Unreleased
22

3+
## Bug Fixes
4+
5+
* 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)
6+
37
## Enhancements
48

59
* Add OPA support to the Policy Set APIs by @mrinalirao [#575](https://github.com/hashicorp/go-tfe/pull/575)

audit_trail.go

+10-3
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,14 @@ type AuditTrailResource struct {
5252
Meta map[string]interface{} `json:"meta"`
5353
}
5454

55+
type AuditTrailPagination struct {
56+
CurrentPage int `json:"current_page"`
57+
PreviousPage int `json:"prev_page"`
58+
NextPage int `json:"next_page"`
59+
TotalPages int `json:"total_pages"`
60+
TotalCount int `json:"total_count"`
61+
}
62+
5563
// AuditTrail represents an event in the TFC audit log.
5664
type AuditTrail struct {
5765
ID string `json:"id"`
@@ -66,9 +74,8 @@ type AuditTrail struct {
6674

6775
// AuditTrailList represents a list of audit trails.
6876
type AuditTrailList struct {
69-
*Pagination
70-
71-
Items []*AuditTrail `json:"data"`
77+
*AuditTrailPagination `json:"pagination"`
78+
Items []*AuditTrail `json:"data"`
7279
}
7380

7481
// AuditTrailListOptions represents the options for listing audit trails.

audit_trail_integration_test.go

+46-3
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,60 @@ func TestAuditTrailsList(t *testing.T) {
2121
auditTrailClient := testAuditTrailClient(t, userClient, org)
2222

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

27-
_, wkspace2Cleanup := createWorkspace(t, userClient, org)
28-
t.Cleanup(wkspace2Cleanup)
27+
_, err := userClient.Workspaces.Lock(ctx, ws.ID, WorkspaceLockOptions{})
28+
require.NoError(t, err)
29+
_, err = userClient.Workspaces.Unlock(ctx, ws.ID)
30+
require.NoError(t, err)
31+
32+
_, err = userClient.Workspaces.Lock(ctx, ws.ID, WorkspaceLockOptions{})
33+
require.NoError(t, err)
34+
_, err = userClient.Workspaces.Unlock(ctx, ws.ID)
35+
require.NoError(t, err)
36+
37+
_, err = userClient.Workspaces.Lock(ctx, ws.ID, WorkspaceLockOptions{})
38+
require.NoError(t, err)
39+
_, err = userClient.Workspaces.Unlock(ctx, ws.ID)
40+
require.NoError(t, err)
2941

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

47+
require.Equal(t, len(atl.Items), 8)
48+
49+
t.Run("pagination parameters", func(t *testing.T) {
50+
page1, err := auditTrailClient.AuditTrails.List(ctx, &AuditTrailListOptions{
51+
ListOptions: &ListOptions{
52+
PageNumber: 1,
53+
PageSize: 4,
54+
},
55+
})
56+
57+
require.NoError(t, err)
58+
59+
assert.NotEmpty(t, page1.Items)
60+
assert.Equal(t, 1, page1.CurrentPage)
61+
assert.Equal(t, 2, page1.TotalPages)
62+
assert.Equal(t, 8, page1.TotalCount)
63+
64+
page2, err := auditTrailClient.AuditTrails.List(ctx, &AuditTrailListOptions{
65+
ListOptions: &ListOptions{
66+
PageNumber: 2,
67+
PageSize: 4,
68+
},
69+
})
70+
71+
require.NoError(t, err)
72+
73+
assert.NotEmpty(t, page2.Items)
74+
assert.Equal(t, 2, page2.CurrentPage)
75+
assert.Equal(t, 0, page2.NextPage)
76+
})
77+
3578
log := atl.Items[0]
3679
assert.NotEmpty(t, log.ID)
3780
assert.NotEmpty(t, log.Timestamp)

0 commit comments

Comments
 (0)