Skip to content

Commit

Permalink
Add controllerMiddleware method
Browse files Browse the repository at this point in the history
  • Loading branch information
lorisleiva committed May 22, 2020
1 parent 9fa5ac4 commit c3456cd
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 3 deletions.
4 changes: 3 additions & 1 deletion src/Concerns/RunsAsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,9 @@ public function getMiddleware()
{
$middleware = [];

if (method_exists($this, 'middleware')) {
if (method_exists($this, 'controllerMiddleware')) {
$middleware = $this->controllerMiddleware();
} elseif (method_exists($this, 'middleware')) {
$middleware = $this->middleware();
}

Expand Down
2 changes: 1 addition & 1 deletion tests/Actions/SimpleCalculator.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public function middleware()
return [
function ($request, $next) {
if ($request->operation === 'middleware') {
abort(400, 'Intercepted by a middleware');
abort(400, 'Intercepted in the middleware() method.');
}
return $next($request);
}
Expand Down
33 changes: 32 additions & 1 deletion tests/RunsAsControllersTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,38 @@ public function it_can_be_intercepted_by_middleware()
$response = $this->post('/calculator/middleware');

$this->assertEquals(400, $response->exception->getStatusCode());
$this->assertEquals('Intercepted by a middleware', $response->exception->getMessage());
$this->assertEquals('Intercepted in the middleware() method.', $response->exception->getMessage());
}

/** @test */
public function it_uses_the_middleware_method_by_default()
{
$action = new class extends Action {
public function middleware() {
return ['middleware'];
}
};

$result = $action->getMiddleware();
$this->assertCount(1, $result);
$this->assertEquals('middleware', $result[0]['middleware']);
}

/** @test */
public function it_prioritise_the_controller_middleware_method()
{
$action = new class extends Action {
public function controllerMiddleware() {
return ['controller-middleware'];
}
public function middleware() {
return ['middleware'];
}
};

$result = $action->getMiddleware();
$this->assertCount(1, $result);
$this->assertEquals('controller-middleware', $result[0]['middleware']);
}

/** @test */
Expand Down

0 comments on commit c3456cd

Please sign in to comment.