Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0d37c75

Browse files
authored
[11.11] Add expires_at parameter to Groups::addMember() (#746)
1 parent f80b11f commit 0d37c75

File tree

4 files changed

+33
-7
lines changed

4 files changed

+33
-7
lines changed

src/Api/AbstractApi.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,16 @@ abstract class AbstractApi
3838
*/
3939
private const URI_PREFIX = '/api/v4/';
4040

41+
/**
42+
* The access levels for groups and projects
43+
* as defined in the Gitlab::Access module.
44+
*
45+
* @see https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/access.rb
46+
*
47+
* @var array
48+
*/
49+
protected const ACCESS_LEVELS = [0, 10, 20, 30, 40, 50];
50+
4151
/**
4252
* The client instance.
4353
*

src/Api/Groups.php

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -208,15 +208,28 @@ public function allMember($group_id, int $user_id)
208208
* @param int|string $group_id
209209
* @param int $user_id
210210
* @param int $access_level
211+
* @param array $parameters
211212
*
212213
* @return mixed
213214
*/
214-
public function addMember($group_id, int $user_id, int $access_level)
215+
public function addMember($group_id, int $user_id, int $access_level, array $parameters = [])
215216
{
216-
return $this->post('groups/'.self::encodePath($group_id).'/members', [
217+
$dateNormalizer = function (OptionsResolver $optionsResolver, \DateTimeInterface $date): string {
218+
return $date->format('Y-m-d');
219+
};
220+
221+
$resolver = $this->createOptionsResolver()
222+
->setDefined('expires_at')
223+
->setAllowedTypes('expires_at', \DateTimeInterface::class)
224+
->setNormalizer('expires_at', $dateNormalizer)
225+
;
226+
227+
$parameters = \array_merge([
217228
'user_id' => $user_id,
218229
'access_level' => $access_level,
219-
]);
230+
], $resolver->resolve($parameters));
231+
232+
return $this->post('groups/'.self::encodePath($group_id).'/members', $parameters);
220233
}
221234

222235
/**

src/Api/Projects.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1276,7 +1276,7 @@ public function addShare($project_id, array $parameters = [])
12761276

12771277
$resolver->setRequired('group_access')
12781278
->setAllowedTypes('group_access', 'int')
1279-
->setAllowedValues('group_access', [0, 10, 20, 30, 40, 50]);
1279+
->setAllowedValues('group_access', self::ACCESS_LEVELS);
12801280

12811281
$resolver->setDefined('expires_at')
12821282
->setAllowedTypes('expires_at', \DateTimeInterface::class)

tests/Api/GroupsTest.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -282,16 +282,19 @@ public function shouldGetMembers(): void
282282
*/
283283
public function shouldAddMember(): void
284284
{
285-
$expectedArray = ['id' => 1, 'name' => 'Matt'];
285+
$tomorrow = (new DateTime('tomorrow'));
286+
$expectedArray = ['id' => 1, 'name' => 'Matt', 'expires_at' => $tomorrow];
286287

287288
$api = $this->getApiMock();
288289
$api->expects($this->once())
289290
->method('post')
290-
->with('groups/1/members', ['user_id' => 2, 'access_level' => 3])
291+
->with('groups/1/members', [
292+
'user_id' => 2, 'access_level' => 10, 'expires_at' => $tomorrow->format('Y-m-d'),
293+
])
291294
->will($this->returnValue($expectedArray))
292295
;
293296

294-
$this->assertEquals($expectedArray, $api->addMember(1, 2, 3));
297+
$this->assertEquals($expectedArray, $api->addMember(1, 2, 10, ['expires_at' => $tomorrow]));
295298
}
296299

297300
/**

0 commit comments

Comments
 (0)