diff --git a/src/Api/Deployments.php b/src/Api/Deployments.php index f0fcbcc6..9af41697 100644 --- a/src/Api/Deployments.php +++ b/src/Api/Deployments.php @@ -23,6 +23,10 @@ class Deployments extends AbstractApi * @var string $order_by Return deployments ordered by id, iid, created_at, updated_at, * or ref fields (default is id) * @var string $sort Return deployments sorted in asc or desc order (default is desc) + * @var string $status Return deployments filtered by status of deployment allowed + * values of status are 'created', 'running', 'success', 'failed', + * 'canceled', 'blocked' + * @var string $environment Return deployments filtered to a particular environment * } * * @return mixed @@ -36,6 +40,11 @@ public function all($project_id, array $parameters = []) $resolver->setDefined('sort') ->setAllowedTypes('sort', 'string') ->setAllowedValues('sort', ['desc', 'asc']); + $resolver->setDefined('status') + ->setAllowedTypes('status', 'string') + ->setAllowedValues('status', ['created', 'running', 'success', 'failed', 'canceled', 'blocked']); + $resolver->setDefined('environment') + ->setAllowedTypes('environment', 'string'); return $this->get($this->getProjectPath($project_id, 'deployments'), $resolver->resolve($parameters)); } diff --git a/tests/Api/DeploymentsTest.php b/tests/Api/DeploymentsTest.php index 0f84792a..6629a592 100644 --- a/tests/Api/DeploymentsTest.php +++ b/tests/Api/DeploymentsTest.php @@ -278,4 +278,59 @@ protected function getApiClass() { return Deployments::class; } + + /** + * @test + */ + public function shouldAllowDeploymentFilterByStatus(): void + { + $expectedArray = $this->getMultipleDeploymentsData(); + + $api = $this->getMultipleDeploymentsRequestMock( + 'projects/1/deployments', + $expectedArray, + ['status' => 'success'] + ); + + $this->assertEquals( + $expectedArray, + $api->all(1, ['status' => 'success']) + ); + } + + /** + * @test + */ + public function shouldAllowFilterByEnvironment(): void + { + $expectedArray = $this->getMultipleDeploymentsData(); + + $api = $this->getMultipleDeploymentsRequestMock( + 'projects/1/deployments', + $expectedArray, + ['environment' => 'production'] + ); + + $this->assertEquals( + $expectedArray, + $api->all(1, ['environment' => 'production']) + ); + } + + /** + * @test + */ + public function shouldAllowEmptyArrayIfAllExcludedByFilter(): void + { + $expectedArray = $this->getMultipleDeploymentsData(); + + $api = $this->getMultipleDeploymentsRequestMock( + 'projects/1/deployments', + [], + ['environment' => 'test'] + ); + + $this->assertEquals([], $api->all(1, ['environment' => 'test']) + ); + } }