diff --git a/PHPCI/Controller/BuildStatusController.php b/PHPCI/Controller/BuildStatusController.php index 62cb9ba7..e5b0c989 100644 --- a/PHPCI/Controller/BuildStatusController.php +++ b/PHPCI/Controller/BuildStatusController.php @@ -50,21 +50,21 @@ class BuildStatusController extends \PHPCI\Controller $branch = $this->getParam('branch', 'master'); try { $project = $this->projectStore->getById($projectId); - $status = 'passing'; + $status = Build::STATUS_NEW; if (!$project->getAllowPublicStatus()) { return null; } if (isset($project) && $project instanceof Project) { - $build = $project->getLatestBuild($branch, array(2,3)); + $build = $project->getLatestBuild($branch); - if (isset($build) && $build instanceof Build && $build->getStatus() != 2) { - $status = 'failed'; + if (isset($build) && $build instanceof Build) { + return $build->getStatus(); } } } catch (\Exception $e) { - $status = 'error'; + $status = Build::STATUS_FAILED; } return $status; @@ -141,11 +141,12 @@ class BuildStatusController extends \PHPCI\Controller return $response; } - $color = ($status == 'passing') ? 'green' : 'red'; + list($text, $color) = $this->getImageTextAndColorFromStatus($status); + $image = file_get_contents(sprintf( 'http://img.shields.io/badge/%s-%s-%s.svg?style=%s', $label, - $status, + $text, $color, $style )); @@ -201,4 +202,25 @@ class BuildStatusController extends \PHPCI\Controller return $builds['items']; } + + /** + * Return the image text and color based on the build + * status. + * + * @param $status + * @return array + */ + protected function getImageTextAndColorFromStatus($status) + { + switch ($status) { + case Build::STATUS_NEW: + return array('pending', 'blue'); + case Build::STATUS_RUNNING: + return array('running', 'yellow'); + case Build::STATUS_SUCCESS: + return array('success', 'green'); + case Build::STATUS_FAILED: + return array('failed', 'red'); + } + } } diff --git a/Tests/PHPCI/Controller/BuildStatusControllerTest.php b/Tests/PHPCI/Controller/BuildStatusControllerTest.php new file mode 100644 index 00000000..b1d2d25c --- /dev/null +++ b/Tests/PHPCI/Controller/BuildStatusControllerTest.php @@ -0,0 +1,60 @@ +getMockBuilder('PHPCI\Controller\BuildStatusController') + ->disableOriginalConstructor() + ->setMethods(null) + ->getMock(); + + $buildStatusControllerReflection = + new \ReflectionClass('PHPCI\Controller\BuildStatusController'); + + $getImageColorFromStatusReflection = + $buildStatusControllerReflection->getMethod('getImageTextAndColorFromStatus'); + $getImageColorFromStatusReflection->setAccessible(true); + + list($text, $color) = $getImageColorFromStatusReflection->invoke($buildStatusControllerMock, $status); + + $this->assertEquals($expectedText, $text); + $this->assertEquals($expectedColor, $color); + } + + /** + * @return array + */ + public function getImageTextAndColorFromStatusDataProvider() + { + return array( + array(Build::STATUS_NEW, 'pending', 'blue'), + array(Build::STATUS_RUNNING, 'running', 'yellow'), + array(Build::STATUS_SUCCESS, 'success', 'green'), + array(Build::STATUS_FAILED, 'failed', 'red'), + ); + } +}