Skip to content

Commit

Permalink
Merge pull request #6334 from pamil/resource/redirect-handler-perform…
Browse files Browse the repository at this point in the history
…ance

[Resource] Make RedirectHandler use *cached* router methods
  • Loading branch information
Paweł Jędrzejewski committed Oct 6, 2016
2 parents 617493b + 1f19d1e commit e50e9a3
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 37 deletions.
26 changes: 14 additions & 12 deletions src/Sylius/Bundle/ResourceBundle/Controller/RedirectHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,13 @@
use Sylius\Component\Resource\ResourceActions;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Exception\RouteNotFoundException;
use Symfony\Component\Routing\RouterInterface;

/**
* @author Paweł Jędrzejewski <pawel@sylius.org>
*/
class RedirectHandler implements RedirectHandlerInterface
final class RedirectHandler implements RedirectHandlerInterface
{
/**
* @var RouterInterface
Expand All @@ -40,18 +41,19 @@ public function __construct(RouterInterface $router)
*/
public function redirectToResource(RequestConfiguration $configuration, ResourceInterface $resource)
{
$routes = $this->router->getRouteCollection();
$redirectRouteName = $configuration->getRedirectRoute(ResourceActions::SHOW);

if (null === $routes->get($redirectRouteName)) {
$redirectRouteName = $configuration->getRedirectRoute(ResourceActions::INDEX);
try {
return $this->redirectToRoute(
$configuration,
$configuration->getRedirectRoute(ResourceActions::SHOW),
$configuration->getRedirectParameters($resource)
);
} catch (RouteNotFoundException $exception) {
return $this->redirectToRoute(
$configuration,
$configuration->getRedirectRoute(ResourceActions::INDEX),
$configuration->getRedirectParameters($resource)
);
}

return $this->redirectToRoute(
$configuration,
$redirectRouteName,
$configuration->getRedirectParameters($resource)
);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Route;
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Exception\RouteNotFoundException;
use Symfony\Component\Routing\RouterInterface;

/**
Expand All @@ -31,16 +30,14 @@
*/
final class RedirectHandlerSpec extends ObjectBehavior
{
function let(RouterInterface $router, RouteCollection $routes)
function let(RouterInterface $router)
{
$router->getRouteCollection()->willReturn($routes);

$this->beConstructedWith($router);
}

function it_is_initializable()
{
$this->shouldHaveType('Sylius\Bundle\ResourceBundle\Controller\RedirectHandler');
$this->shouldHaveType(RedirectHandler::class);
}

function it_implements_redirect_handler_interface()
Expand All @@ -49,17 +46,13 @@ function it_implements_redirect_handler_interface()
}

function it_redirects_to_resource(
RequestConfiguration $configuration,
ResourceInterface $resource,
RouterInterface $router,
RouteCollection $routes,
Route $route
RequestConfiguration $configuration,
ResourceInterface $resource
) {
$configuration->getRedirectParameters($resource)->willReturn([]);
$configuration->getRedirectRoute('show')->willReturn('my_route');

$routes->get('my_route')->willReturn($route);

$router->generate('my_route', [])->shouldBeCalled()->willReturn('http://test.com');

$configuration->getRedirectHash()->willReturn(null);
Expand All @@ -69,18 +62,16 @@ function it_redirects_to_resource(
}

function it_fallbacks_to_index_route_if_show_does_not_exist(
RequestConfiguration $configuration,
ResourceInterface $resource,
RouterInterface $router,
RouteCollection $routes
RequestConfiguration $configuration,
ResourceInterface $resource
) {
$configuration->getRedirectParameters($resource)->willReturn([]);
$configuration->getRedirectRoute('show')->willReturn('app_product_show');
$configuration->getRedirectRoute('index')->willReturn('app_product_index');
$configuration->getRedirectRoute('show')->willReturn('app_resource_show');
$configuration->getRedirectRoute('index')->willReturn('app_resource_index');

$routes->get('app_product_show')->willReturn(null);

$router->generate('app_product_index', [])->shouldBeCalled()->willReturn('http://test.com');
$router->generate('app_resource_show', [])->shouldBeCalled()->willThrow(RouteNotFoundException::class);
$router->generate('app_resource_index', [])->shouldBeCalled()->willReturn('http://test.com');

$configuration->getRedirectHash()->willReturn(null);
$configuration->isHeaderRedirection()->willReturn(false);
Expand All @@ -89,9 +80,9 @@ function it_fallbacks_to_index_route_if_show_does_not_exist(
}

function it_redirects_to_index(
RouterInterface $router,
RequestConfiguration $configuration,
ResourceInterface $resource,
RouterInterface $router
ResourceInterface $resource
) {
$configuration->getRedirectRoute('index')->willReturn('my_route');
$configuration->getRedirectParameters($resource)->willReturn([]);
Expand All @@ -104,7 +95,7 @@ function it_redirects_to_index(
$this->redirectToIndex($configuration, $resource)->shouldHaveType(RedirectResponse::class);
}

function it_redirects_to_route(RequestConfiguration $configuration, $router)
function it_redirects_to_route(RouterInterface $router, RequestConfiguration $configuration)
{
$router->generate('route', ['parameter' => 'value'])->willReturn('http://myurl.com');

Expand All @@ -128,9 +119,9 @@ function it_redirect_to_referer(RequestConfiguration $configuration, Request $re

$bag->get('referer')->willReturn('http://myurl.com');

$configuration->getRequest()->willreturn($request);
$configuration->getRequest()->willReturn($request);
$configuration->getRedirectHash()->willReturn(null);
$configuration->getRedirectReferer()->willreturn('http://myurl.com');
$configuration->getRedirectReferer()->willReturn('http://myurl.com');
$configuration->isHeaderRedirection()->willReturn(false);

$this->redirectToReferer($configuration)->shouldHaveType(RedirectResponse::class);
Expand Down

0 comments on commit e50e9a3

Please sign in to comment.