Skip to content

Commit 0c15c4c

Browse files
authored
[11.11] Add support for additional parameters in Projects::deployment (#753)
1 parent 52ac68b commit 0c15c4c

File tree

2 files changed

+103
-0
lines changed

2 files changed

+103
-0
lines changed

src/Api/Projects.php

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1238,11 +1238,56 @@ public function uploadAvatar($project_id, string $file)
12381238
* @param array $parameters
12391239
*
12401240
* @return mixed
1241+
*
1242+
* @see https://docs.gitlab.com/ee/api/deployments.html#list-project-deployments
12411243
*/
12421244
public function deployments($project_id, array $parameters = [])
12431245
{
12441246
$resolver = $this->createOptionsResolver();
12451247

1248+
$datetimeNormalizer = function (Options $resolver, \DateTimeInterface $value): string {
1249+
return $value->format('c');
1250+
};
1251+
1252+
$resolver->setDefined('order_by')
1253+
->setAllowedTypes('order_by', 'string')
1254+
->setAllowedValues('order_by', ['id', 'iid', 'created_at', 'updated_at', 'finished_at', 'ref'])
1255+
;
1256+
1257+
$resolver->setDefined('sort')
1258+
->setAllowedTypes('sort', 'string')
1259+
->setAllowedValues('sort', ['asc', 'desc'])
1260+
;
1261+
1262+
$resolver->setDefined('updated_after')
1263+
->setAllowedTypes('updated_after', \DateTimeInterface::class)
1264+
->setNormalizer('updated_after', $datetimeNormalizer)
1265+
;
1266+
1267+
$resolver->setDefined('updated_before')
1268+
->setAllowedTypes('updated_before', \DateTimeInterface::class)
1269+
->setNormalizer('updated_before', $datetimeNormalizer)
1270+
;
1271+
1272+
$resolver->setDefined('finished_after')
1273+
->setAllowedTypes('finished_after', \DateTimeInterface::class)
1274+
->setNormalizer('finished_after', $datetimeNormalizer)
1275+
;
1276+
1277+
$resolver->setDefined('finished_before')
1278+
->setAllowedTypes('finished_before', \DateTimeInterface::class)
1279+
->setNormalizer('finished_before', $datetimeNormalizer)
1280+
;
1281+
1282+
$resolver->setDefined('environment')
1283+
->setAllowedTypes('environment', 'string')
1284+
;
1285+
1286+
$resolver->setDefined('status')
1287+
->setAllowedTypes('status', 'string')
1288+
->setAllowedValues('status', ['created', 'running', 'success', 'failed', 'canceled', 'blocked'])
1289+
;
1290+
12461291
return $this->get($this->getProjectPath($project_id, 'deployments'), $resolver->resolve($parameters));
12471292
}
12481293

tests/Api/ProjectsTest.php

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2355,6 +2355,64 @@ public function shouldGetDeploymentsWithPagination(): void
23552355
$this->assertEquals($expectedArray, $api->deployments(1, ['page' => 2, 'per_page' => 15]));
23562356
}
23572357

2358+
/**
2359+
* @test
2360+
*/
2361+
public function shouldGetDeploymentsSorted(): void
2362+
{
2363+
$expectedArray = [
2364+
['id' => 1, 'sha' => '0000001'],
2365+
['id' => 2, 'sha' => '0000002'],
2366+
['id' => 3, 'sha' => '0000003'],
2367+
];
2368+
2369+
$api = $this->getApiMock();
2370+
$api->expects($this->once())
2371+
->method('get')
2372+
->with('projects/1/deployments', [
2373+
'order_by' => 'id',
2374+
'sort' => 'asc',
2375+
])
2376+
->will($this->returnValue($expectedArray));
2377+
2378+
$this->assertEquals($expectedArray, $api->deployments(1, ['order_by' => 'id', 'sort' => 'asc']));
2379+
2380+
$api = $this->getApiMock();
2381+
$api->expects($this->once())
2382+
->method('get')
2383+
->with('projects/1/deployments', [
2384+
'order_by' => 'id',
2385+
'sort' => 'desc',
2386+
])
2387+
->will($this->returnValue(\array_reverse($expectedArray)));
2388+
2389+
$this->assertEquals(\array_reverse($expectedArray), $api->deployments(1, ['order_by' => 'id', 'sort' => 'desc']));
2390+
}
2391+
2392+
/**
2393+
* @test
2394+
*/
2395+
public function shouldGetDeploymentsFiltered(): void
2396+
{
2397+
$expectedArray = [
2398+
['id' => 1, 'sha' => '0000001'],
2399+
['id' => 2, 'sha' => '0000002'],
2400+
['id' => 3, 'sha' => '0000003'],
2401+
];
2402+
2403+
$time = new DateTime('now');
2404+
2405+
$api = $this->getApiMock();
2406+
$api->expects($this->once())
2407+
->method('get')
2408+
->with('projects/1/deployments', [
2409+
'updated_after' => $time->format('c'),
2410+
])
2411+
->will($this->returnValue($expectedArray));
2412+
2413+
$this->assertEquals($expectedArray, $api->deployments(1, ['updated_after' => $time]));
2414+
}
2415+
23582416
protected function getMultipleProjectsData()
23592417
{
23602418
return [

0 commit comments

Comments
 (0)