Skip to content

Commit dd86571

Browse files
committed
team project access cleanup and update changelog
1 parent 70995d6 commit dd86571

3 files changed

+51
-49
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## Bug Fixes
44

55
## Enhancements
6+
* Add Beta `TeamProjectAccesses` interface with `list`, `add`, `read`, `update`, `remove` methods and integration tests @hs26gill [#599](https://github.com/hashicorp/go-tfe/pull/599)
67
* Add Beta `Projects` interface with `list`, `read`, `update`, `delete` methods and integration tests @hs26gill [#564](https://github.com/hashicorp/go-tfe/pull/564)
78

89
# v1.14.0

team_project_access.go

+2-3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ var _ TeamProjectAccesses = (*teamProjectAccesses)(nil)
1313
// Enterprise API supports
1414
//
1515
// TFE API docs: (TODO: ADD DOCS URL)
16+
// **Note: This functionality is still in BETA and subject to change.**
1617
type TeamProjectAccesses interface {
1718
// List all project accesses for a given project.
1819
List(ctx context.Context, options *TeamProjectAccessListOptions) (*TeamProjectAccessList, error)
@@ -77,7 +78,6 @@ type TeamProjectAccessAddOptions struct {
7778

7879
// The team to add to the project
7980
Team *Team `jsonapi:"relation,team"`
80-
8181
// The project to which the team is to be added.
8282
Project *Project `jsonapi:"relation,project"`
8383
}
@@ -88,8 +88,7 @@ type TeamProjectAccessUpdateOptions struct {
8888
// set the resource type via the field tag.
8989
// It is not a user-defined value and does not need to be set.
9090
// https://jsonapi.org/format/#crud-creating
91-
ID string `jsonapi:"primary,team-projects"`
92-
91+
Type string `jsonapi:"primary,team-projects"`
9392
// The type of access to grant.
9493
Access *TeamProjectAccessType `jsonapi:"attr,access,omitempty"`
9594
}

team_project_access_integration_test.go

+48-46
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import (
99
)
1010

1111
func TestTeamProjectAccessesList(t *testing.T) {
12+
skipIfBeta(t)
13+
1214
client := testClient(t)
1315
ctx := context.Background()
1416

@@ -23,72 +25,66 @@ func TestTeamProjectAccessesList(t *testing.T) {
2325
tmTest2, tmTest2Cleanup := createTeam(t, client, orgTest)
2426
defer tmTest2Cleanup()
2527

26-
tpaTest1, taTest1Cleanup := createTeamProjectAccess(t, client, tmTest1, pTest, orgTest)
27-
defer taTest1Cleanup()
28-
tpaTest2, taTest2Cleanup := createTeamProjectAccess(t, client, tmTest2, pTest, orgTest)
29-
defer taTest2Cleanup()
28+
tpaTest1, tpaTest1Cleanup := createTeamProjectAccess(t, client, tmTest1, pTest, orgTest)
29+
defer tpaTest1Cleanup()
30+
tpaTest2, tpaTest2Cleanup := createTeamProjectAccess(t, client, tmTest2, pTest, orgTest)
31+
defer tpaTest2Cleanup()
3032

3133
t.Run("with valid options", func(t *testing.T) {
3234
tpal, err := client.TeamProjectAccess.List(ctx, &TeamProjectAccessListOptions{
3335
ProjectID: pTest.ID,
34-
ListOptions: ListOptions{
35-
PageNumber: 1,
36-
PageSize: 100,
37-
},
3836
})
3937
require.NoError(t, err)
4038
assert.Contains(t, tpal.Items, tpaTest1)
4139
assert.Contains(t, tpal.Items, tpaTest2)
42-
43-
//t.Skip("paging not supported yet in API")
44-
assert.Equal(t, 1, tpal.CurrentPage)
45-
assert.Equal(t, 2, tpal.TotalCount)
4640
})
4741

4842
t.Run("with list options", func(t *testing.T) {
49-
t.Skip("paging not supported yet in API")
5043
// Request a page number which is out of range. The result should
5144
// be successful, but return no results if the paging options are
5245
// properly passed along.
53-
tal, err := client.TeamProjectAccess.List(ctx, &TeamProjectAccessListOptions{
46+
tpal, err := client.TeamProjectAccess.List(ctx, &TeamProjectAccessListOptions{
47+
ProjectID: pTest.ID,
5448
ListOptions: ListOptions{
5549
PageNumber: 999,
5650
PageSize: 100,
5751
},
5852
})
5953
require.NoError(t, err)
60-
assert.Empty(t, tal.Items)
61-
assert.Equal(t, 999, tal.CurrentPage)
62-
assert.Equal(t, 2, tal.TotalCount)
54+
assert.Empty(t, tpal.Items)
55+
assert.Equal(t, 999, tpal.CurrentPage)
56+
assert.Equal(t, 2, tpal.TotalCount)
6357
})
6458

6559
t.Run("without TeamProjectAccessListOptions", func(t *testing.T) {
66-
tal, err := client.TeamProjectAccess.List(ctx, nil)
67-
assert.Nil(t, tal)
60+
tpal, err := client.TeamProjectAccess.List(ctx, nil)
61+
assert.Nil(t, tpal)
6862
assert.Equal(t, err, ErrRequiredTeamProjectAccessListOps)
6963
})
7064

7165
t.Run("without projectID options", func(t *testing.T) {
72-
tal, err := client.TeamProjectAccess.List(ctx, &TeamProjectAccessListOptions{
66+
tpal, err := client.TeamProjectAccess.List(ctx, &TeamProjectAccessListOptions{
7367
ListOptions: ListOptions{
7468
PageNumber: 2,
7569
PageSize: 25,
7670
},
7771
})
78-
assert.Nil(t, tal)
72+
assert.Nil(t, tpal)
7973
assert.Equal(t, err, ErrRequiredProjectID)
8074
})
8175

8276
t.Run("without a valid projectID", func(t *testing.T) {
83-
tal, err := client.TeamProjectAccess.List(ctx, &TeamProjectAccessListOptions{
77+
tpal, err := client.TeamProjectAccess.List(ctx, &TeamProjectAccessListOptions{
8478
ProjectID: badIdentifier,
8579
})
86-
assert.Nil(t, tal)
80+
assert.Nil(t, tpal)
8781
assert.EqualError(t, err, ErrInvalidProjectID.Error())
8882
})
8983
}
9084

9185
func TestTeamProjectAccessesRead(t *testing.T) {
86+
skipIfBeta(t)
87+
9288
client := testClient(t)
9389
ctx := context.Background()
9490

@@ -105,34 +101,36 @@ func TestTeamProjectAccessesRead(t *testing.T) {
105101
defer tpaTestCleanup()
106102

107103
t.Run("when the team access exists", func(t *testing.T) {
108-
ta, err := client.TeamProjectAccess.Read(ctx, tpaTest.ID)
104+
tpa, err := client.TeamProjectAccess.Read(ctx, tpaTest.ID)
109105
require.NoError(t, err)
110106

111-
assert.Equal(t, TeamProjectAccessAdmin, ta.Access)
107+
assert.Equal(t, TeamProjectAccessAdmin, tpa.Access)
112108

113109
t.Run("team relationship is decoded", func(t *testing.T) {
114-
assert.NotEmpty(t, ta.Team)
110+
assert.NotEmpty(t, tpa.Team)
115111
})
116112

117113
t.Run("project relationship is decoded", func(t *testing.T) {
118-
assert.NotEmpty(t, ta.Project)
114+
assert.NotEmpty(t, tpa.Project)
119115
})
120116
})
121117

122118
t.Run("when the team access does not exist", func(t *testing.T) {
123-
ta, err := client.TeamProjectAccess.Read(ctx, "nonexisting")
124-
assert.Nil(t, ta)
119+
tpa, err := client.TeamProjectAccess.Read(ctx, "nonexisting")
120+
assert.Nil(t, tpa)
125121
assert.Equal(t, err, ErrResourceNotFound)
126122
})
127123

128124
t.Run("without a valid team access ID", func(t *testing.T) {
129-
ta, err := client.TeamProjectAccess.Read(ctx, badIdentifier)
130-
assert.Nil(t, ta)
125+
tpa, err := client.TeamProjectAccess.Read(ctx, badIdentifier)
126+
assert.Nil(t, tpa)
131127
assert.Equal(t, err, ErrInvalidTeamProjectAccessID)
132128
})
133129
}
134130

135131
func TestTeamProjectAccessesAdd(t *testing.T) {
132+
skipIfBeta(t)
133+
136134
client := testClient(t)
137135
ctx := context.Background()
138136

@@ -152,22 +150,22 @@ func TestTeamProjectAccessesAdd(t *testing.T) {
152150
Project: pTest,
153151
}
154152

155-
ta, err := client.TeamProjectAccess.Add(ctx, options)
153+
tpa, err := client.TeamProjectAccess.Add(ctx, options)
156154
defer func() {
157-
err := client.TeamProjectAccess.Remove(ctx, ta.ID)
155+
err := client.TeamProjectAccess.Remove(ctx, tpa.ID)
158156
if err != nil {
159-
t.Logf("error removing team access (%s): %s", ta.ID, err)
157+
t.Logf("error removing team access (%s): %s", tpa.ID, err)
160158
}
161159
}()
162160

163161
require.NoError(t, err)
164162

165163
// Get a refreshed view from the API.
166-
refreshed, err := client.TeamProjectAccess.Read(ctx, ta.ID)
164+
refreshed, err := client.TeamProjectAccess.Read(ctx, tpa.ID)
167165
require.NoError(t, err)
168166

169167
for _, item := range []*TeamProjectAccess{
170-
ta,
168+
tpa,
171169
refreshed,
172170
} {
173171
assert.NotEmpty(t, item.ID)
@@ -176,8 +174,8 @@ func TestTeamProjectAccessesAdd(t *testing.T) {
176174
})
177175

178176
t.Run("when the team already has access to the project", func(t *testing.T) {
179-
_, taTestCleanup := createTeamProjectAccess(t, client, tmTest, pTest, nil)
180-
defer taTestCleanup()
177+
_, tpaTestCleanup := createTeamProjectAccess(t, client, tmTest, pTest, nil)
178+
defer tpaTestCleanup()
181179

182180
options := TeamProjectAccessAddOptions{
183181
Access: ProjectAccess(TeamProjectAccessAdmin),
@@ -190,34 +188,36 @@ func TestTeamProjectAccessesAdd(t *testing.T) {
190188
})
191189

192190
t.Run("when options is missing access", func(t *testing.T) {
193-
ta, err := client.TeamProjectAccess.Add(ctx, TeamProjectAccessAddOptions{
191+
tpa, err := client.TeamProjectAccess.Add(ctx, TeamProjectAccessAddOptions{
194192
Team: tmTest,
195193
Project: pTest,
196194
})
197-
assert.Nil(t, ta)
195+
assert.Nil(t, tpa)
198196
assert.Equal(t, err, ErrRequiredAccess)
199197
})
200198

201199
t.Run("when options is missing team", func(t *testing.T) {
202-
ta, err := client.TeamProjectAccess.Add(ctx, TeamProjectAccessAddOptions{
200+
tpa, err := client.TeamProjectAccess.Add(ctx, TeamProjectAccessAddOptions{
203201
Access: ProjectAccess(TeamProjectAccessAdmin),
204202
Project: pTest,
205203
})
206-
assert.Nil(t, ta)
204+
assert.Nil(t, tpa)
207205
assert.Equal(t, err, ErrRequiredTeam)
208206
})
209207

210208
t.Run("when options is missing project", func(t *testing.T) {
211-
ta, err := client.TeamProjectAccess.Add(ctx, TeamProjectAccessAddOptions{
209+
tpa, err := client.TeamProjectAccess.Add(ctx, TeamProjectAccessAddOptions{
212210
Access: ProjectAccess(TeamProjectAccessAdmin),
213211
Team: tmTest,
214212
})
215-
assert.Nil(t, ta)
213+
assert.Nil(t, tpa)
216214
assert.Equal(t, err, ErrRequiredProject)
217215
})
218216
}
219217

220218
func TestTeamProjectAccessesUpdate(t *testing.T) {
219+
skipIfBeta(t)
220+
221221
client := testClient(t)
222222
ctx := context.Background()
223223

@@ -238,14 +238,16 @@ func TestTeamProjectAccessesUpdate(t *testing.T) {
238238
Access: ProjectAccess(TeamProjectAccessRead),
239239
}
240240

241-
ta, err := client.TeamProjectAccess.Update(ctx, tpaTest.ID, options)
241+
tpa, err := client.TeamProjectAccess.Update(ctx, tpaTest.ID, options)
242242
require.NoError(t, err)
243243

244-
assert.Equal(t, ta.Access, TeamProjectAccessRead)
244+
assert.Equal(t, tpa.Access, TeamProjectAccessRead)
245245
})
246246
}
247247

248248
func TestTeamProjectAccessesRemove(t *testing.T) {
249+
skipIfBeta(t)
250+
249251
client := testClient(t)
250252
ctx := context.Background()
251253

0 commit comments

Comments
 (0)