Skip to content

Commit 3457bf4

Browse files
Add usersContributedProjects method and corresponding tests
1 parent b7516e4 commit 3457bf4

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

src/Api/Users.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,35 @@ public function usersProjects(int $id, array $parameters = []): mixed
161161
return $this->get('users/'.self::encodePath($id).'/projects', $resolver->resolve($parameters));
162162
}
163163

164+
/**
165+
* @param array $parameters {
166+
*
167+
* @var string $order_by Return projects ordered by id, name, path, created_at, updated_at,
168+
* star_count, or last_activity_at fields (default is created_at)
169+
* @var string $sort Return projects sorted in asc or desc order (default is desc)
170+
* @var bool $simple return only the ID, URL, name, and path of each project
171+
* }
172+
*/
173+
public function usersContributedProjects(int $id, array $parameters = []): mixed
174+
{
175+
$resolver = $this->createOptionsResolver();
176+
$booleanNormalizer = function (Options $resolver, $value): string {
177+
return $value ? 'true' : 'false';
178+
};
179+
$resolver->setDefined('order_by')
180+
->setAllowedValues('order_by', ['id', 'name', 'path', 'created_at', 'updated_at', 'star_count', 'last_activity_at'])
181+
;
182+
$resolver->setDefined('sort')
183+
->setAllowedValues('sort', ['asc', 'desc'])
184+
;
185+
$resolver->setDefined('simple')
186+
->setAllowedTypes('simple', 'bool')
187+
->setNormalizer('simple', $booleanNormalizer)
188+
;
189+
190+
return $this->get('users/'.self::encodePath($id).'/contributed_projects', $resolver->resolve($parameters));
191+
}
192+
164193
/**
165194
* @param array $parameters {
166195
*

tests/Api/UsersTest.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,43 @@ public function shouldSearchUsersStarredProjects(): void
346346
$this->assertEquals($expectedArray, $api->usersStarredProjects(1, ['search' => 'a project']));
347347
}
348348

349+
#[Test]
350+
public function shouldGetUsersContributedProjects(): void
351+
{
352+
$expectedArray = $this->getUsersProjectsData();
353+
354+
$api = $this->getUsersProjectsRequestMock('users/1/contributed_projects', $expectedArray);
355+
356+
$this->assertEquals($expectedArray, $api->usersContributedProjects(1));
357+
}
358+
359+
#[Test]
360+
public function shouldGetUsersContributedProjectsOrderByIdDesc(): void
361+
{
362+
$expectedArray = $this->getUsersProjectsData();
363+
364+
$api = $this->getUsersProjectsRequestMock(
365+
'users/1/contributed_projects',
366+
$expectedArray,
367+
['order_by' => 'id', 'sort' => 'desc']
368+
);
369+
370+
$this->assertEquals(
371+
$expectedArray,
372+
$api->usersContributedProjects(1, ['order_by' => 'id', 'sort' => 'desc'])
373+
);
374+
}
375+
376+
#[Test]
377+
public function shouldGetUsersContributedProjectsSimple(): void
378+
{
379+
$expectedArray = $this->getUsersProjectsData();
380+
381+
$api = $this->getUsersProjectsRequestMock('users/1/contributed_projects', $expectedArray, ['simple' => 'true']);
382+
383+
$this->assertEquals($expectedArray, $api->usersContributedProjects(1, ['simple' => true]));
384+
}
385+
349386
#[Test]
350387
public function shouldCreateUser(): void
351388
{

0 commit comments

Comments
 (0)