Skip to content

Commit 904dcff

Browse files
Add missing parameters to the GitLab\Api\Projects:all method (#623)
1 parent ac34a3d commit 904dcff

File tree

3 files changed

+170
-17
lines changed

3 files changed

+170
-17
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [11.2.0] - UPCOMING
99

10-
* UPCOMING
10+
* Add support for the following projects parameters: id_after, id_before, last_activity_after, last_activity_before, repository_checksum_failed, repository_storage, wiki_checksum_failed, with_custom_attributes, with_programming_language
1111

1212
## [11.1.0] - 2021-01-25
1313

src/Api/Projects.php

Lines changed: 56 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,31 @@ class Projects extends AbstractApi
2424
/**
2525
* @param array $parameters {
2626
*
27-
* @var bool $archived limit by archived status
28-
* @var string $visibility limit by visibility public, internal, or private
29-
* @var string $order_by Return projects ordered by id, name, path, created_at, updated_at,
30-
* last_activity_at, repository_size, storage_size, packages_size or
31-
* wiki_size fields (default is created_at)
32-
* @var string $sort Return projects sorted in asc or desc order (default is desc)
33-
* @var string $search return list of projects matching the search criteria
34-
* @var bool $search_namespaces Include ancestor namespaces when matching search criteria
35-
* @var bool $simple return only the ID, URL, name, and path of each project
36-
* @var bool $owned limit by projects owned by the current user
37-
* @var bool $membership limit by projects that the current user is a member of
38-
* @var bool $starred limit by projects starred by the current user
39-
* @var bool $statistics include project statistics
40-
* @var bool $with_issues_enabled limit by enabled issues feature
41-
* @var bool $with_merge_requests_enabled limit by enabled merge requests feature
42-
* @var int $min_access_level Limit by current user minimal access level
27+
* @var bool $archived limit by archived status
28+
* @var string $visibility limit by visibility public, internal, or private
29+
* @var string $order_by Return projects ordered by id, name, path, created_at, updated_at,
30+
* last_activity_at, repository_size, storage_size, packages_size or
31+
* wiki_size fields (default is created_at)
32+
* @var string $sort Return projects sorted in asc or desc order (default is desc)
33+
* @var string $search return list of projects matching the search criteria
34+
* @var bool $search_namespaces Include ancestor namespaces when matching search criteria
35+
* @var bool $simple return only the ID, URL, name, and path of each project
36+
* @var bool $owned limit by projects owned by the current user
37+
* @var bool $membership limit by projects that the current user is a member of
38+
* @var bool $starred limit by projects starred by the current user
39+
* @var bool $statistics include project statistics
40+
* @var bool $with_issues_enabled limit by enabled issues feature
41+
* @var bool $with_merge_requests_enabled limit by enabled merge requests feature
42+
* @var int $min_access_level Limit by current user minimal access level
43+
* @var int $id_after Limit by project id's greater than the specified id
44+
* @var int $id_before Limit by project id's less than the specified id
45+
* @var \DateTimeInterface $last_activity_after Limit by last_activity after specified time
46+
* @var \DateTimeInterface $last_activity_before Limit by last_activity before specified time
47+
* @var bool $repository_checksum_failed Limit by failed repository checksum calculation
48+
* @var string $repository_storage Limit by repository storage type
49+
* @var bool $wiki_checksum_failed Limit by failed wiki checksum calculation
50+
* @var bool $with_custom_attributes Include custom attributes in response
51+
* @var string $with_programming_language Limit by programming language
4352
* }
4453
*
4554
* @throws UndefinedOptionsException If an option name is undefined
@@ -54,6 +63,9 @@ public function all(array $parameters = [])
5463
$booleanNormalizer = function (Options $resolver, $value): string {
5564
return $value ? 'true' : 'false';
5665
};
66+
$datetimeNormalizer = function (Options $resolver, \DateTimeInterface $value): string {
67+
return $value->format('c');
68+
};
5769
$resolver->setDefined('archived')
5870
->setAllowedTypes('archived', 'bool')
5971
->setNormalizer('archived', $booleanNormalizer)
@@ -107,6 +119,34 @@ public function all(array $parameters = [])
107119
$resolver->setDefined('min_access_level')
108120
->setAllowedValues('min_access_level', [null, 10, 20, 30, 40, 50])
109121
;
122+
$resolver->setDefined('id_after')
123+
->setAllowedTypes('id_after', 'integer')
124+
;
125+
$resolver->setDefined('id_before')
126+
->setAllowedTypes('id_before', 'integer')
127+
;
128+
$resolver->setDefined('last_activity_after')
129+
->setAllowedTypes('last_activity_after', \DateTimeInterface::class)
130+
->setNormalizer('last_activity_after', $datetimeNormalizer)
131+
;
132+
$resolver->setDefined('last_activity_before')
133+
->setAllowedTypes('last_activity_before', \DateTimeInterface::class)
134+
->setNormalizer('last_activity_before', $datetimeNormalizer)
135+
;
136+
$resolver->setDefined('repository_checksum_failed')
137+
->setAllowedTypes('repository_checksum_failed', 'bool')
138+
->setNormalizer('repository_checksum_failed', $booleanNormalizer)
139+
;
140+
$resolver->setDefined('repository_storage');
141+
$resolver->setDefined('wiki_checksum_failed')
142+
->setAllowedTypes('wiki_checksum_failed', 'bool')
143+
->setNormalizer('wiki_checksum_failed', $booleanNormalizer)
144+
;
145+
$resolver->setDefined('with_custom_attributes')
146+
->setAllowedTypes('with_custom_attributes', 'bool')
147+
->setNormalizer('with_custom_attributes', $booleanNormalizer)
148+
;
149+
$resolver->setDefined('with_programming_language');
110150

111151
return $this->get('projects', $resolver->resolve($parameters));
112152
}

tests/Api/ProjectsTest.php

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
namespace Gitlab\Tests\Api;
1616

17+
use DateTime;
1718
use Gitlab\Api\Projects;
1819

1920
class ProjectsTest extends TestCase
@@ -136,6 +137,118 @@ public function shouldSearchProjectsWithNamespace(): void
136137
$this->assertEquals($expectedArray, $api->all(['search' => 'a_project', 'search_namespaces' => true]));
137138
}
138139

140+
/**
141+
* @test
142+
*/
143+
public function shouldGetProjectsAfterId(): void
144+
{
145+
$expectedArray = $this->getMultipleProjectsData();
146+
147+
$api = $this->getMultipleProjectsRequestMock('projects', $expectedArray, ['id_after' => 0]);
148+
149+
$this->assertEquals($expectedArray, $api->all(['id_after' => 0]));
150+
}
151+
152+
/**
153+
* @test
154+
*/
155+
public function shouldGetProjectsWithLastActivityAfter(): void
156+
{
157+
$unixEpochDateTime = new DateTime('@0');
158+
159+
$expectedArray = $this->getMultipleProjectsData();
160+
161+
$api = $this->getMultipleProjectsRequestMock('projects', $expectedArray, ['last_activity_after' => $unixEpochDateTime->format('c')]);
162+
163+
$this->assertEquals($expectedArray, $api->all(['last_activity_after' => $unixEpochDateTime]));
164+
}
165+
166+
/**
167+
* @test
168+
*/
169+
public function shouldGetProjectsWithLastActivityBefore(): void
170+
{
171+
$now = new DateTime();
172+
173+
$expectedArray = $this->getMultipleProjectsData();
174+
175+
$api = $this->getMultipleProjectsRequestMock('projects', $expectedArray, ['last_activity_before' => $now->format('c')]);
176+
177+
$this->assertEquals($expectedArray, $api->all(['last_activity_before' => $now]));
178+
}
179+
180+
/**
181+
* @test
182+
*/
183+
public function shouldGetProjectsWithoutFailedRepositoryChecksum(): void
184+
{
185+
$expectedArray = $this->getMultipleProjectsData();
186+
187+
$api = $this->getMultipleProjectsRequestMock('projects', $expectedArray, ['repository_checksum_failed' => 'false']);
188+
189+
$this->assertEquals($expectedArray, $api->all(['repository_checksum_failed' => false]));
190+
}
191+
192+
/**
193+
* @test
194+
*/
195+
public function shouldGetProjectsWithDefaultRepositoryStorage(): void
196+
{
197+
$expectedArray = $this->getMultipleProjectsData();
198+
199+
$api = $this->getMultipleProjectsRequestMock('projects', $expectedArray, ['repository_storage' => 'default']);
200+
201+
$this->assertEquals($expectedArray, $api->all(['repository_storage' => 'default']));
202+
}
203+
204+
/**
205+
* @test
206+
*/
207+
public function shouldGetStarredProjects(): void
208+
{
209+
$expectedArray = $this->getMultipleProjectsData();
210+
211+
$api = $this->getMultipleProjectsRequestMock('projects', $expectedArray, ['starred' => 'true']);
212+
213+
$this->assertEquals($expectedArray, $api->all(['starred' => true]));
214+
}
215+
216+
/**
217+
* @test
218+
*/
219+
public function shouldGetProjectsWithoutFailedWikiChecksum(): void
220+
{
221+
$expectedArray = $this->getMultipleProjectsData();
222+
223+
$api = $this->getMultipleProjectsRequestMock('projects', $expectedArray, ['wiki_checksum_failed' => 'false']);
224+
225+
$this->assertEquals($expectedArray, $api->all(['wiki_checksum_failed' => false]));
226+
}
227+
228+
/**
229+
* @test
230+
*/
231+
public function shouldGetProjectsWithCustomAttributes(): void
232+
{
233+
$expectedArray = $this->getMultipleProjectsData();
234+
235+
$api = $this->getMultipleProjectsRequestMock('projects', $expectedArray, ['with_custom_attributes' => 'true']);
236+
237+
$this->assertEquals($expectedArray, $api->all(['with_custom_attributes' => true]));
238+
}
239+
240+
/**
241+
* @test
242+
*/
243+
public function shouldGetProjectsWithPhpProgrammingLanguage(): void
244+
{
245+
$expectedArray = $this->getMultipleProjectsData();
246+
247+
$api = $this->getMultipleProjectsRequestMock('projects', $expectedArray, ['with_programming_language' => 'php']);
248+
249+
$this->assertEquals($expectedArray, $api->all(['with_programming_language' => 'php']));
250+
}
251+
139252
/**
140253
* @test
141254
*/

0 commit comments

Comments
 (0)