Skip to content

Commit 232b931

Browse files
committed
Added more options for deployments endpoint
1 parent 1bf5326 commit 232b931

File tree

4 files changed

+71
-10
lines changed

4 files changed

+71
-10
lines changed

src/Api/Deployments.php

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,14 @@
1414

1515
namespace Gitlab\Api;
1616

17+
use Symfony\Component\OptionsResolver\Options;
18+
1719
class Deployments extends AbstractApi
1820
{
1921
/**
2022
* @param array $parameters {
2123
*
22-
* @var string $order_by Return deployments ordered by id, iid, created_at, updated_at,
24+
* @var string $order_by Return deployments ordered by id, iid, created_at, updated_at, finished_at,
2325
* or ref fields (default is id)
2426
* @var string $sort Return deployments sorted in asc or desc order (default is desc)
2527
* @var string $status Return deployments filtered by status of deployment allowed
@@ -31,17 +33,51 @@ class Deployments extends AbstractApi
3133
public function all(int|string $project_id, array $parameters = []): mixed
3234
{
3335
$resolver = $this->createOptionsResolver();
36+
37+
$datetimeNormalizer = function (Options $resolver, \DateTimeInterface $value): string {
38+
$utc = (new \DateTimeImmutable($value->format(\DateTimeImmutable::RFC3339_EXTENDED)))->setTimezone(new \DateTimeZone('UTC'));
39+
40+
return $utc->format('Y-m-d\TH:i:s.v\Z');
41+
};
42+
3443
$resolver->setDefined('order_by')
3544
->setAllowedTypes('order_by', 'string')
36-
->setAllowedValues('order_by', ['id', 'iid', 'created_at', 'updated_at', 'ref']);
45+
->setAllowedValues('order_by', ['id', 'iid', 'created_at', 'updated_at', 'finished_at', 'ref'])
46+
;
47+
3748
$resolver->setDefined('sort')
3849
->setAllowedTypes('sort', 'string')
39-
->setAllowedValues('sort', ['desc', 'asc']);
50+
->setAllowedValues('sort', ['asc', 'desc'])
51+
;
52+
53+
$resolver->setDefined('updated_after')
54+
->setAllowedTypes('updated_after', \DateTimeInterface::class)
55+
->setNormalizer('updated_after', $datetimeNormalizer)
56+
;
57+
58+
$resolver->setDefined('updated_before')
59+
->setAllowedTypes('updated_before', \DateTimeInterface::class)
60+
->setNormalizer('updated_before', $datetimeNormalizer)
61+
;
62+
63+
$resolver->setDefined('finished_after')
64+
->setAllowedTypes('finished_after', \DateTimeInterface::class)
65+
->setNormalizer('finished_after', $datetimeNormalizer)
66+
;
67+
68+
$resolver->setDefined('finished_before')
69+
->setAllowedTypes('finished_before', \DateTimeInterface::class)
70+
->setNormalizer('finished_before', $datetimeNormalizer)
71+
;
72+
73+
$resolver->setDefined('environment')
74+
->setAllowedTypes('environment', 'string')
75+
;
76+
4077
$resolver->setDefined('status')
4178
->setAllowedTypes('status', 'string')
42-
->setAllowedValues('status', ['created', 'running', 'success', 'failed', 'canceled', 'blocked']);
43-
$resolver->setDefined('environment')
44-
->setAllowedTypes('environment', 'string');
79+
->setAllowedValues('status', ['created', 'running', 'success', 'failed', 'canceled', 'blocked'])
80+
;
4581

4682
return $this->get($this->getProjectPath($project_id, 'deployments'), $resolver->resolve($parameters));
4783
}

src/Api/Projects.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -968,7 +968,9 @@ public function deployments(int|string $project_id, array $parameters = []): mix
968968
$resolver = $this->createOptionsResolver();
969969

970970
$datetimeNormalizer = function (Options $resolver, \DateTimeInterface $value): string {
971-
return $value->format('c');
971+
$utc = (new \DateTimeImmutable($value->format(\DateTimeImmutable::RFC3339_EXTENDED)))->setTimezone(new \DateTimeZone('UTC'));
972+
973+
return $utc->format('Y-m-d\TH:i:s.v\Z');
972974
};
973975

974976
$resolver->setDefined('order_by')

tests/Api/DeploymentsTest.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,4 +323,25 @@ public function shouldAllowEmptyArrayIfAllExcludedByFilter(): void
323323
$this->assertEquals([], $api->all(1, ['environment' => 'test'])
324324
);
325325
}
326+
327+
#[Test]
328+
public function shouldAllowFilterByUpdateAfter(): void
329+
{
330+
$expectedArray = $this->getMultipleDeploymentsData();
331+
332+
$dateTime = new \DateTime();
333+
$utc = (new \DateTimeImmutable($dateTime->format(\DateTimeImmutable::RFC3339_EXTENDED)))
334+
->setTimezone(new \DateTimeZone('UTC'));
335+
336+
$api = $this->getMultipleDeploymentsRequestMock(
337+
'projects/1/deployments',
338+
$expectedArray,
339+
['updated_after' => $utc->format('Y-m-d\TH:i:s.v\Z')]
340+
);
341+
342+
$this->assertEquals(
343+
$expectedArray,
344+
$api->all(1, ['updated_after' => $dateTime])
345+
);
346+
}
326347
}

tests/Api/ProjectsTest.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2225,17 +2225,19 @@ public function shouldGetDeploymentsFiltered(): void
22252225
['id' => 3, 'sha' => '0000003'],
22262226
];
22272227

2228-
$time = new DateTime('now');
2228+
$dateTime = new DateTime();
2229+
$utc = (new \DateTimeImmutable($dateTime->format(\DateTimeImmutable::RFC3339_EXTENDED)))
2230+
->setTimezone(new \DateTimeZone('UTC'));
22292231

22302232
$api = $this->getApiMock();
22312233
$api->expects($this->once())
22322234
->method('get')
22332235
->with('projects/1/deployments', [
2234-
'updated_after' => $time->format('c'),
2236+
'updated_after' => $utc->format('Y-m-d\TH:i:s.v\Z')
22352237
])
22362238
->willReturn($expectedArray);
22372239

2238-
$this->assertEquals($expectedArray, $api->deployments(1, ['updated_after' => $time]));
2240+
$this->assertEquals($expectedArray, $api->deployments(1, ['updated_after' => $dateTime]));
22392241
}
22402242

22412243
protected function getMultipleProjectsData(): array

0 commit comments

Comments
 (0)