Skip to content

Commit 47055b8

Browse files
committed
API: Add SDK Methods for Team Management Endpoints
1 parent 61fabb0 commit 47055b8

File tree

3 files changed

+224
-1
lines changed

3 files changed

+224
-1
lines changed

README.md

+42-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@
1212
* [Trigger a full synchronization](#trigger-a-full-synchronization)
1313
* [Team](#team)
1414
* [List an organization's teams](#list-an-organizations-teams)
15+
* [Create a New Team](#create-a-new-team)
16+
* [Edit a Team](#edit-a-team)
17+
* [Delete a Team](#delete-a-team)
18+
* [Add Member to Team (by User ID)](#add-member-to-team-by-user-id)
19+
* [Remove Member from Team](#remove-member-from-team)
1520
* [List all private packages a team has access to](#list-all-private-packages-a-team-has-access-to)
1621
* [Grant a team access to a list of private packages](#grant-a-team-access-to-a-list-of-private-packages)
1722
* [Remove access for a package from a team](#remove-access-for-a-package-from-a-team)
@@ -108,7 +113,7 @@
108113
* [Validate incoming webhook payloads](#validate-incoming-webhook-payloads)
109114
* [License](#license)
110115

111-
<!-- Added by: zanbaldwin, at: Thu 18 Aug 12:50:05 CEST 2022 -->
116+
<!-- Added by: zanbaldwin, at: Thu 15 Sep 11:30:29 CEST 2022 -->
112117

113118
<!--te-->
114119

@@ -162,6 +167,42 @@ $teams = $client->teams()->all();
162167
```
163168
Returns an array of teams.
164169

170+
#### Create a New Team
171+
```php
172+
$team = $client->teams()->create('New Team Name', true, false, false, true, false);
173+
```
174+
Creates a team and sets permissions applied to team members. Those permissions are (in order):
175+
176+
- `canEditTeamPackages`: members of the team can edit and remove packages, assign package permissions (only applies to packages assigned to team).
177+
- `canAddPackages`: members of the team can add packages to organization; add, edit and remove credentials and mirrored third-party repositories.
178+
- `canCreateSubrepositories`: members of the team can create subrepositories.
179+
- `canViewVendorCustomers`: members of the team can view customers, their Composer information, their packages, and their install statistics.
180+
- `canManageVendorCustomers`: members of the team can create and delete customers, add and remove packages, update their settings, view Composer information and install statistics.
181+
182+
Returns the newly-created team.
183+
184+
#### Edit a Team
185+
```php
186+
$team = $client->teams()->edit(123, 'Altered Team Name', true, false, false, true, false);
187+
```
188+
Edits a team's name and permissions to be applied to team members. Returns the updated team.
189+
190+
#### Delete a Team
191+
```php
192+
$client->teams()->remove($teamId);
193+
```
194+
195+
#### Add Member to Team (by User ID)
196+
```php
197+
$team = $client->teams()->addMember($teamId, $userId);
198+
```
199+
Returns the team the user was added to.
200+
201+
#### Remove Member from Team
202+
```php
203+
$client->teams()->removeMember($teamId, $userId);
204+
```
205+
165206
#### List all private packages a team has access to
166207
```php
167208
$teamId = 1;

src/Api/Teams.php

+47
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,53 @@ public function all()
1616
return $this->get('/teams/');
1717
}
1818

19+
public function create($name, $canEditTeamPackages = false, $canAddPackages = false, $canCreateSubrepositories = false, $canViewVendorCustomers = false, $canManageVendorCustomers = false)
20+
{
21+
$parameters = [
22+
'name' => $name,
23+
'permissions' => [
24+
'canEditTeamPackages' => $canEditTeamPackages,
25+
'canAddPackages' => $canAddPackages,
26+
'canCreateSubrepositories' => $canCreateSubrepositories,
27+
'canViewVendorCustomers' => $canViewVendorCustomers,
28+
'canManageVendorCustomers' => $canManageVendorCustomers,
29+
],
30+
];
31+
32+
return $this->post('/teams/', $parameters);
33+
}
34+
35+
public function edit($teamId, $name, $canEditTeamPackages, $canAddPackages, $canCreateSubrepositories, $canViewVendorCustomers, $canManageVendorCustomers)
36+
{
37+
$parameters = [
38+
'name' => $name,
39+
'permissions' => [
40+
'canEditTeamPackages' => $canEditTeamPackages,
41+
'canAddPackages' => $canAddPackages,
42+
'canCreateSubrepositories' => $canCreateSubrepositories,
43+
'canViewVendorCustomers' => $canViewVendorCustomers,
44+
'canManageVendorCustomers' => $canManageVendorCustomers,
45+
],
46+
];
47+
48+
$this->put(sprintf('/teams/%s/', $teamId), $parameters);
49+
}
50+
51+
public function remove($teamId)
52+
{
53+
return $this->delete(sprintf('/teams/%s/', $teamId));
54+
}
55+
56+
public function addMember($teamId, $userId)
57+
{
58+
return $this->put(sprintf('/teams/%s/members/%s/', $teamId, $userId));
59+
}
60+
61+
public function removeMember($teamId, $userId)
62+
{
63+
return $this->delete(sprintf('/teams/%s/members/%s/', $teamId, $userId));
64+
}
65+
1966
public function packages($teamId)
2067
{
2168
return $this->get(sprintf('/teams/%s/packages/', $teamId));

tests/Api/TeamsTest.php

+135
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,141 @@ public function testRemovePackage()
9393
$this->assertSame($expected, $api->removePackage(1, 'acme-website/package'));
9494
}
9595

96+
public function testCreateTeam()
97+
{
98+
$expected = [
99+
[
100+
'id' => 1,
101+
'name' => 'New Team',
102+
'permissions' => [
103+
'canEditTeamPackages' => true,
104+
'canAddPackages' => false,
105+
'canCreateSubrepositories' => false,
106+
'canViewVendorCustomers' => true,
107+
'canManageVendorCustomers' => false,
108+
],
109+
],
110+
];
111+
112+
/** @var Teams&MockObject $api */
113+
$api = $this->getApiMock();
114+
$api->expects($this->once())
115+
->method('post')
116+
->with($this->equalTo('/teams/'), $this->equalTo([
117+
'name' => 'New Team',
118+
'permissions' => [
119+
'canEditTeamPackages' => true,
120+
'canAddPackages' => false,
121+
'canCreateSubrepositories' => false,
122+
'canViewVendorCustomers' => true,
123+
'canManageVendorCustomers' => false,
124+
],
125+
]))
126+
->willReturn($expected);
127+
128+
$this->assertSame($expected, $api->create('New Team', true, false, false, true, false));
129+
}
130+
131+
public function testEditTeam()
132+
{
133+
$expected = [
134+
[
135+
'id' => 1,
136+
'name' => 'New Team',
137+
'permissions' => [
138+
'canEditTeamPackages' => true,
139+
'canAddPackages' => false,
140+
'canCreateSubrepositories' => false,
141+
'canViewVendorCustomers' => true,
142+
'canManageVendorCustomers' => false,
143+
],
144+
],
145+
];
146+
147+
/** @var Teams&MockObject $api */
148+
$api = $this->getApiMock();
149+
$api->expects($this->once())
150+
->method('post')
151+
->with($this->equalTo('/teams/123/'), $this->equalTo([
152+
'name' => 'New Team',
153+
'permissions' => [
154+
'canEditTeamPackages' => true,
155+
'canAddPackages' => false,
156+
'canCreateSubrepositories' => false,
157+
'canViewVendorCustomers' => true,
158+
'canManageVendorCustomers' => false,
159+
],
160+
]))
161+
->willReturn($expected);
162+
163+
$this->assertSame($expected, $api->edit(123, 'New Team', true, false, false, true, false));
164+
}
165+
166+
public function testDeleteTeam()
167+
{
168+
$expected = null;
169+
170+
/** @var Teams&MockObject $api */
171+
$api = $this->getApiMock();
172+
$api->expects($this->once())
173+
->method('delete')
174+
->with($this->equalTo('/teams/1/'))
175+
->willReturn($expected);
176+
177+
$this->assertSame($expected, $api->remove(1));
178+
}
179+
180+
public function testAddMember()
181+
{
182+
$expected = [
183+
[
184+
'id' => 1,
185+
'name' => 'New Team',
186+
'permission' => 'view',
187+
'members' => [
188+
[
189+
'id' => 12,
190+
'username' => 'username'
191+
]
192+
],
193+
'projects' => [
194+
],
195+
]
196+
];
197+
198+
/** @var Teams&MockObject $api */
199+
$api = $this->getApiMock();
200+
$api->expects($this->once())
201+
->method('put')
202+
->with($this->equalTo('/teams/1/members/12/'))
203+
->willReturn($expected);
204+
205+
$this->assertSame($expected, $api->addMember(1, 12));
206+
}
207+
208+
public function removeMember()
209+
{
210+
$expected = [
211+
[
212+
'id' => 1,
213+
'name' => 'New Team',
214+
'permission' => 'view',
215+
'members' => [],
216+
'projects' => [
217+
],
218+
]
219+
];
220+
221+
/** @var Teams&MockObject $api */
222+
$api = $this->getApiMock();
223+
$api->expects($this->once())
224+
->method('delete')
225+
->with($this->equalTo('/teams/1/members/12/'))
226+
->willReturn($expected);
227+
228+
$this->assertSame($expected, $api->removeMember(1, 12));
229+
}
230+
96231
/**
97232
* @return string
98233
*/

0 commit comments

Comments
 (0)