Skip to content

Commit

Permalink
Simulate requests in AuthorizesResourcesTest to verify that the middl…
Browse files Browse the repository at this point in the history
…eware was applied properly
  • Loading branch information
misenhower committed Aug 3, 2016
1 parent 8b55fbd commit 2b92896
Showing 1 changed file with 62 additions and 30 deletions.
92 changes: 62 additions & 30 deletions tests/Auth/AuthorizesResourcesTest.php
Original file line number Diff line number Diff line change
@@ -1,101 +1,133 @@
<?php

use Illuminate\Http\Request;
use Illuminate\Routing\Route;
use Illuminate\Routing\Router;
use Illuminate\Routing\Controller;
use Illuminate\Foundation\Auth\Access\AuthorizesResources;

class AuthorizesResourcesTest extends PHPUnit_Framework_TestCase
{
public function testIndexMethod()
{
$controller = new AuthorizesResourcesController($this->request('index'));
$controller = new AuthorizesResourcesController();

$this->assertHasMiddleware($controller, 'index', 'can:view,App\User');
}

public function testCreateMethod()
{
$controller = new AuthorizesResourcesController($this->request('create'));
$controller = new AuthorizesResourcesController();

$this->assertHasMiddleware($controller, 'create', 'can:create,App\User');
}

public function testStoreMethod()
{
$controller = new AuthorizesResourcesController($this->request('store'));
$controller = new AuthorizesResourcesController();

$this->assertHasMiddleware($controller, 'store', 'can:create,App\User');
}

public function testShowMethod()
{
$controller = new AuthorizesResourcesController($this->request('show'));
$controller = new AuthorizesResourcesController();

$this->assertHasMiddleware($controller, 'show', 'can:view,user');
}

public function testEditMethod()
{
$controller = new AuthorizesResourcesController($this->request('edit'));
$controller = new AuthorizesResourcesController();

$this->assertHasMiddleware($controller, 'edit', 'can:update,user');
}

public function testUpdateMethod()
{
$controller = new AuthorizesResourcesController($this->request('update'));
$controller = new AuthorizesResourcesController();

$this->assertHasMiddleware($controller, 'update', 'can:update,user');
}

public function testDestroyMethod()
{
$controller = new AuthorizesResourcesController($this->request('destroy'));
$controller = new AuthorizesResourcesController();

$this->assertHasMiddleware($controller, 'destroy', 'can:delete,user');
}

/**
* Assert that the given middleware has been registered on the given controller.
* Assert that the given middleware has been registered on the given controller for the given method.
*
* @param \Illuminate\Routing\Controller $controller
* @param string $method
* @param string $middleware
* @return void
*/
protected function assertHasMiddleware($controller, $method, $middleware)
{
$this->assertTrue(
in_array($middleware, array_keys($controller->getMiddleware()))
&& in_array($method, $controller->getMiddleware()[$middleware]['only']),
"The [{$middleware}] middleware was not registered"
$router = new Router(new Illuminate\Events\Dispatcher);

$router->middleware('can', 'AuthorizesResourcesMiddleware');
$router->get($method)->uses('AuthorizesResourcesController@'.$method);

$this->assertEquals(
'caught '.$middleware,
$router->dispatch(Request::create($method, 'GET'))->getContent(),
"The [{$middleware}] middleware was not registered for method [{$method}]"
);
}
}

/**
* Get a request object, with the route pointing to the given method on the controller.
*
* @param string $method
* @return \Illuminate\Http\Request
*/
protected function request($method)
class AuthorizesResourcesController extends Controller
{
use AuthorizesResources;

public function __construct()
{
$this->authorizeResource('App\User', 'user');
}

public function index()
{
//
}

public function create()
{
return Request::create('foo', 'GET')->setRouteResolver(function () use ($method) {
$action = ['uses' => 'AuthorizesResourcesController@'.$method];
//
}

$action['controller'] = $action['uses'];
public function store()
{
//
}

return new Route('GET', 'foo', $action);
});
public function show()
{
//
}

public function edit()
{
//
}

public function update()
{
//
}

public function destroy()
{
//
}
}

class AuthorizesResourcesController extends Controller
class AuthorizesResourcesMiddleware
{
use AuthorizesResources;

public function __construct(Request $request)
public function handle($request, Closure $next, $method, $parameter)
{
$this->authorizeResource('App\User', 'user', [], $request);
return "caught can:{$method},{$parameter}";
}
}

0 comments on commit 2b92896

Please sign in to comment.