Skip to content

Commit a41ebbd

Browse files
Alexandre Ralexandre-pqp
andauthored
Implemented user memberships (#614)
Co-authored-by: Alexandre Rochant <[email protected]>
1 parent 904dcff commit a41ebbd

File tree

2 files changed

+85
-0
lines changed

2 files changed

+85
-0
lines changed

src/Api/Users.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,25 @@ public function show(int $id)
7878
return $this->get('users/'.self::encodePath($id));
7979
}
8080

81+
/**
82+
* @param int $id
83+
* @param array $parameters {
84+
*
85+
* @var string $type Filter memberships by type. Can be either Project or Namespace
86+
* }
87+
*
88+
* @return mixed
89+
*/
90+
public function usersMemberships(int $id, array $parameters = [])
91+
{
92+
$resolver = $this->createOptionsResolver();
93+
$resolver->setDefined('type')
94+
->setAllowedValues('type', ['Project', 'Namespace'])
95+
;
96+
97+
return $this->get('users/'.self::encodePath($id).'/memberships', $resolver->resolve($parameters));
98+
}
99+
81100
/**
82101
* @param int $id
83102
* @param array $parameters {

tests/Api/UsersTest.php

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,72 @@ public function shouldShowUser(): void
106106
$this->assertEquals($expectedArray, $api->show(1));
107107
}
108108

109+
protected function getUsersMembershipsData()
110+
{
111+
return [
112+
[
113+
'source_id' => 1,
114+
'source_name' => 'Project one',
115+
'source_type' => 'Project',
116+
'access_level' => '20',
117+
],
118+
[
119+
'source_id' => 3,
120+
'source_name' => 'Group three',
121+
'source_type' => 'Namespace',
122+
'access_level' => '20',
123+
],
124+
];
125+
}
126+
127+
protected function getUsersMembershipsRequestMock($path, $expectedArray = [], $expectedParameters = [])
128+
{
129+
$api = $this->getApiMock();
130+
$api->expects($this->once())
131+
->method('get')
132+
->with($path, $expectedParameters)
133+
->will($this->returnValue($expectedArray))
134+
;
135+
136+
return $api;
137+
}
138+
139+
/**
140+
* @test
141+
*/
142+
public function shouldShowUsersMemberships(): void
143+
{
144+
$expectedArray = $this->getUsersMembershipsData();
145+
146+
$api = $this->getUsersMembershipsRequestMock('users/1/memberships', $expectedArray);
147+
148+
$this->assertEquals($expectedArray, $api->usersMemberships(1));
149+
}
150+
151+
/**
152+
* @test
153+
*/
154+
public function shouldShowUsersMembershipsWithTypeProject(): void
155+
{
156+
$expectedArray = [$this->getUsersMembershipsData()[0]];
157+
158+
$api = $this->getUsersMembershipsRequestMock('users/1/memberships', $expectedArray, ['type' => 'Project']);
159+
160+
$this->assertEquals($expectedArray, $api->usersMemberships(1, ['type' => 'Project']));
161+
}
162+
163+
/**
164+
* @test
165+
*/
166+
public function shouldShowUsersMembershipsWithTypeNamespace(): void
167+
{
168+
$expectedArray = [$this->getUsersMembershipsData()[1]];
169+
170+
$api = $this->getUsersMembershipsRequestMock('users/1/memberships', $expectedArray, ['type' => 'Namespace']);
171+
172+
$this->assertEquals($expectedArray, $api->usersMemberships(1, ['type' => 'Namespace']));
173+
}
174+
109175
protected function getUsersProjectsData()
110176
{
111177
return [

0 commit comments

Comments
 (0)