diff --git a/PHPCI/Controller/BuildStatusController.php b/PHPCI/Controller/BuildStatusController.php index 20625dc0..d7ccac2f 100644 --- a/PHPCI/Controller/BuildStatusController.php +++ b/PHPCI/Controller/BuildStatusController.php @@ -13,8 +13,10 @@ use b8; use b8\Exception\HttpException\NotFoundException; use b8\Exception\HttpException\NotAuthorizedException; use b8\Store; +use b8\HttpClient; use b8\Http\Request; use b8\Http\Response; +use Exception; use PHPCI\Config; use PHPCI\BuildFactory; use PHPCI\Helper\Lang; @@ -47,19 +49,25 @@ class BuildStatusController extends \PHPCI\Controller Request $request, Response $response, BuildStore $buildStore, - ProjectStore $projectStore + ProjectStore $projectStore, + HttpClient $shieldsClient ) { parent::__construct($config, $request, $response); $this->buildStore = $buildStore; $this->projectStore = $projectStore; + $this->shieldsClient = $shieldsClient; } /** * Returns status of the last build - * @param $projectId + * + * @param int $projectId + * * @return string + * + * @throws Exception */ protected function getStatus($projectId) { @@ -79,7 +87,7 @@ class BuildStatusController extends \PHPCI\Controller $status = 'failed'; } } - } catch (\Exception $e) { + } catch (Exception $e) { $status = 'error'; } @@ -89,10 +97,12 @@ class BuildStatusController extends \PHPCI\Controller /** * Displays projects information in ccmenu format * - * @param $projectId - * @return bool - * @throws \Exception - * @throws b8\Exception\HttpException + * @param int $projectId + * + * @return Response + * + * @throws Exception + * @throws HttpException */ public function ccxml($projectId) { @@ -132,8 +142,11 @@ class BuildStatusController extends \PHPCI\Controller } /** + * Render the XML object + * * @param \SimpleXMLElement $xml - * @return bool + * + * @return Response */ protected function renderXml(\SimpleXMLElement $xml = null) { @@ -146,6 +159,10 @@ class BuildStatusController extends \PHPCI\Controller /** * Returns the appropriate build status image in SVG format for a given project. + * + * @param int $projectId + * + * @return Response */ public function image($projectId) { @@ -161,17 +178,14 @@ class BuildStatusController extends \PHPCI\Controller } $color = ($status == 'passing') ? 'green' : 'red'; - $image = file_get_contents(sprintf( - 'http://img.shields.io/badge/%s-%s-%s.svg?style=%s', - $label, - $status, - $color, - $style - )); + $image = $this->shieldsClient->get( + sprintf('/badge/%s-%s-%s.svg', $label, $status, $color), + array('style' => $style) + ); $this->response->disableLayout(); $this->response->setHeader('Content-Type', 'image/svg+xml'); - $this->response->setContent($image); + $this->response->setContent($image['body']); return $this->response; } @@ -187,11 +201,11 @@ class BuildStatusController extends \PHPCI\Controller $project = $this->projectStore->getById($projectId); if (empty($project)) { - throw new NotFoundException('Project with id: ' . $projectId . ' not found'); + throw new NotFoundException(Lang::get('project_x_not_found', $projectId)); } if (!$project->getAllowPublicStatus()) { - throw new NotFoundException('Project with id: ' . $projectId . ' not found'); + throw new NotAuthorizedException(); } $builds = $this->getLatestBuilds($projectId); diff --git a/Tests/PHPCI/Controller/BuildStatusControllerTest.php b/Tests/PHPCI/Controller/BuildStatusControllerTest.php index 36c4fce9..a8332e8e 100644 --- a/Tests/PHPCI/Controller/BuildStatusControllerTest.php +++ b/Tests/PHPCI/Controller/BuildStatusControllerTest.php @@ -35,7 +35,8 @@ class BuildStatusControllerTest extends \PHPUnit_Framework_TestCase $this->prophesize('b8\Http\Request')->reveal(), new \b8\Http\Response(), $buildStore->reveal(), - $projectStore->reveal() + $projectStore->reveal(), + $this->prophesize('b8\HttpClient')->reveal() ); $result = $webController->handleAction('ccxml', [1]); @@ -57,7 +58,8 @@ class BuildStatusControllerTest extends \PHPUnit_Framework_TestCase $this->prophesize('b8\Http\Request')->reveal(), new \b8\Http\Response(), $buildStore->reveal(), - $projectStore->reveal() + $projectStore->reveal(), + $this->prophesize('b8\HttpClient')->reveal() ); $result = $webController->handleAction('ccxml', [1]); diff --git a/services.yml b/services.yml index f955034a..3ac11f28 100644 --- a/services.yml +++ b/services.yml @@ -35,6 +35,10 @@ services: class: b8\HttpClient arguments: - https://api.github.com + http_client.shields: + class: b8\HttpClient + arguments: + - http://img.shields.io config: class: PHPCI\Config arguments: [%config_file%] @@ -81,6 +85,7 @@ services: - @http.response - @storage.build - @storage.project + - @http_client.shields application.controller.user: class: PHPCI\Controller\UserController arguments: