diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index cc9e60b8e..df30b79eb 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -15,6 +15,7 @@ use Barryvdh\Cors\HandleCors; use CachetHQ\Cachet\Http\Middleware\Admin; use CachetHQ\Cachet\Http\Middleware\ApiAuthentication; use CachetHQ\Cachet\Http\Middleware\Authenticate; +use CachetHQ\Cachet\Http\Middleware\CacheControl; use CachetHQ\Cachet\Http\Middleware\Localize; use CachetHQ\Cachet\Http\Middleware\ReadyForUse; use CachetHQ\Cachet\Http\Middleware\RedirectIfAuthenticated; @@ -47,6 +48,7 @@ class Kernel extends HttpKernel 'admin' => Admin::class, 'can' => Authorize::class, 'cors' => HandleCors::class, + 'cache' => CacheControl::class, 'auth' => Authenticate::class, 'auth.api' => ApiAuthentication::class, 'guest' => RedirectIfAuthenticated::class, diff --git a/app/Http/Middleware/CacheControl.php b/app/Http/Middleware/CacheControl.php new file mode 100644 index 000000000..fa54dfe09 --- /dev/null +++ b/app/Http/Middleware/CacheControl.php @@ -0,0 +1,37 @@ +header('Cache-Control', 'public,max-age='.$maxAge); + + return $response; + } +} diff --git a/app/Http/Routes/ApiSystemRoutes.php b/app/Http/Routes/ApiSystemRoutes.php index 80899f71b..92a7aa2e3 100644 --- a/app/Http/Routes/ApiSystemRoutes.php +++ b/app/Http/Routes/ApiSystemRoutes.php @@ -43,7 +43,7 @@ class ApiSystemRoutes $router->group(['middleware' => ['auth.api']], function (Registrar $router) { $router->get('ping', 'GeneralController@ping'); $router->get('version', 'GeneralController@version'); - $router->get('status', 'GeneralController@status'); + $router->get('status', ['uses' => 'GeneralController@status', 'middleware' => ['cache']]); }); }); } diff --git a/tests/Api/GeneralTest.php b/tests/Api/GeneralTest.php index ef1538844..6d0d77cf3 100644 --- a/tests/Api/GeneralTest.php +++ b/tests/Api/GeneralTest.php @@ -11,6 +11,8 @@ namespace CachetHQ\Tests\Cachet\Api; +use CachetHQ\Cachet\Models\Component; + /** * This is the general test class. * @@ -42,4 +44,36 @@ class GeneralTest extends AbstractApiTestCase $response->assertStatus(406); } + + public function test_can_get_system_status() + { + $response = $this->json('GET', '/api/v1/status'); + + $response->assertStatus(200) + ->assertHeader('Cache-Control') + ->assertJsonFragment([ + 'data' => [ + 'status' => 'success', + 'message' => 'System operational', + ], + ]); + } + + public function test_can_get_system_status_not_success() + { + factory(Component::class)->create([ + 'status' => 3, + ]); + + $response = $this->json('GET', '/api/v1/status'); + + $response->assertStatus(200) + ->assertHeader('Cache-Control') + ->assertJsonFragment([ + 'data' => [ + 'status' => 'info', + 'message' => 'The system is experiencing issues', + ], + ]); + } }