RedirectControllerTest.php 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Symfony\Bundle\FrameworkBundle\Tests\Controller;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\HttpFoundation\ParameterBag;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Bundle\FrameworkBundle\Controller\RedirectController;
  15. use Symfony\Bundle\FrameworkBundle\Tests\TestCase;
  16. /**
  17. * @author Marcin Sikon<marcin.sikon@gmail.com>
  18. */
  19. class RedirectControllerTest extends TestCase
  20. {
  21. public function testEmptyRoute()
  22. {
  23. $container = $this->getMock('Symfony\Component\DependencyInjection\ContainerInterface');
  24. $controller = new RedirectController();
  25. $controller->setContainer($container);
  26. $returnResponse = $controller->redirectAction('');
  27. $this->assertInstanceOf('\Symfony\Component\HttpFoundation\Response', $returnResponse);
  28. $this->assertEquals(410, $returnResponse->getStatusCode());
  29. }
  30. /**
  31. * @dataProvider provider
  32. */
  33. public function testRoute($permanent, $expectedCode)
  34. {
  35. $request = new Request();
  36. $route = 'new-route';
  37. $url = '/redirect-url';
  38. $params = array('additional-parameter' => 'value');
  39. $request->attributes = new ParameterBag(array('route' => $route, '_route' => 'current-route', 'permanent' => $permanent) + $params);
  40. $router = $this->getMock('Symfony\Component\Routing\RouterInterface');
  41. $router
  42. ->expects($this->once())
  43. ->method('generate')
  44. ->with($this->equalTo($route), $this->equalTo($params))
  45. ->will($this->returnValue($url));
  46. $container = $this->getMock('Symfony\Component\DependencyInjection\ContainerInterface');
  47. $container
  48. ->expects($this->at(0))
  49. ->method('get')
  50. ->with($this->equalTo('request'))
  51. ->will($this->returnValue($request));
  52. $container
  53. ->expects($this->at(1))
  54. ->method('get')
  55. ->with($this->equalTo('router'))
  56. ->will($this->returnValue($router));
  57. $controller = new RedirectController();
  58. $controller->setContainer($container);
  59. $returnResponse = $controller->redirectAction($route, $permanent);
  60. $this->assertInstanceOf('\Symfony\Component\HttpFoundation\Response', $returnResponse);
  61. $this->assertTrue($returnResponse->isRedirect($url));
  62. $this->assertEquals($expectedCode, $returnResponse->getStatusCode());
  63. }
  64. public function provider()
  65. {
  66. return array(
  67. array(true, 301),
  68. array(false, 302),
  69. );
  70. }
  71. public function testEmptyPath()
  72. {
  73. $controller = new RedirectController();
  74. $returnResponse = $controller->urlRedirectAction('');
  75. $this->assertInstanceOf('\Symfony\Component\HttpFoundation\Response', $returnResponse);
  76. $this->assertEquals(410, $returnResponse->getStatusCode());
  77. }
  78. public function testFullURL()
  79. {
  80. $controller = new RedirectController();
  81. $returnResponse = $controller->urlRedirectAction('http://foo.bar/');
  82. $this->assertInstanceOf('\Symfony\Component\HttpFoundation\Response', $returnResponse);
  83. $this->assertEquals('http://foo.bar/', $returnResponse->headers->get('Location'));
  84. $this->assertEquals(302, $returnResponse->getStatusCode());
  85. }
  86. }