From 3457bf4350dea6b9223ddf83c0ac7d07e33ae8c0 Mon Sep 17 00:00:00 2001 From: Philipp Kolmann Date: Fri, 27 Feb 2026 09:05:52 +0100 Subject: [PATCH] Add usersContributedProjects method and corresponding tests --- src/Api/Users.php | 29 +++++++++++++++++++++++++++++ tests/Api/UsersTest.php | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/src/Api/Users.php b/src/Api/Users.php index 01fd1ff3..30bdfb43 100644 --- a/src/Api/Users.php +++ b/src/Api/Users.php @@ -161,6 +161,35 @@ public function usersProjects(int $id, array $parameters = []): mixed return $this->get('users/'.self::encodePath($id).'/projects', $resolver->resolve($parameters)); } + /** + * @param array $parameters { + * + * @var string $order_by Return projects ordered by id, name, path, created_at, updated_at, + * star_count, or last_activity_at fields (default is created_at) + * @var string $sort Return projects sorted in asc or desc order (default is desc) + * @var bool $simple return only the ID, URL, name, and path of each project + * } + */ + public function usersContributedProjects(int $id, array $parameters = []): mixed + { + $resolver = $this->createOptionsResolver(); + $booleanNormalizer = function (Options $resolver, $value): string { + return $value ? 'true' : 'false'; + }; + $resolver->setDefined('order_by') + ->setAllowedValues('order_by', ['id', 'name', 'path', 'created_at', 'updated_at', 'star_count', 'last_activity_at']) + ; + $resolver->setDefined('sort') + ->setAllowedValues('sort', ['asc', 'desc']) + ; + $resolver->setDefined('simple') + ->setAllowedTypes('simple', 'bool') + ->setNormalizer('simple', $booleanNormalizer) + ; + + return $this->get('users/'.self::encodePath($id).'/contributed_projects', $resolver->resolve($parameters)); + } + /** * @param array $parameters { * diff --git a/tests/Api/UsersTest.php b/tests/Api/UsersTest.php index fdda2693..4405bb90 100644 --- a/tests/Api/UsersTest.php +++ b/tests/Api/UsersTest.php @@ -346,6 +346,43 @@ public function shouldSearchUsersStarredProjects(): void $this->assertEquals($expectedArray, $api->usersStarredProjects(1, ['search' => 'a project'])); } + #[Test] + public function shouldGetUsersContributedProjects(): void + { + $expectedArray = $this->getUsersProjectsData(); + + $api = $this->getUsersProjectsRequestMock('users/1/contributed_projects', $expectedArray); + + $this->assertEquals($expectedArray, $api->usersContributedProjects(1)); + } + + #[Test] + public function shouldGetUsersContributedProjectsOrderByIdDesc(): void + { + $expectedArray = $this->getUsersProjectsData(); + + $api = $this->getUsersProjectsRequestMock( + 'users/1/contributed_projects', + $expectedArray, + ['order_by' => 'id', 'sort' => 'desc'] + ); + + $this->assertEquals( + $expectedArray, + $api->usersContributedProjects(1, ['order_by' => 'id', 'sort' => 'desc']) + ); + } + + #[Test] + public function shouldGetUsersContributedProjectsSimple(): void + { + $expectedArray = $this->getUsersProjectsData(); + + $api = $this->getUsersProjectsRequestMock('users/1/contributed_projects', $expectedArray, ['simple' => 'true']); + + $this->assertEquals($expectedArray, $api->usersContributedProjects(1, ['simple' => true])); + } + #[Test] public function shouldCreateUser(): void {