PageRenderTime 38ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/TestCase/Routing/Filter/RoutingFilterTest.php

http://github.com/cakephp/cakephp
PHP | 132 lines | 74 code | 17 blank | 41 comment | 0 complexity | 00271f46bf9d0f24339255bee994a589 MD5 | raw file
Possible License(s): JSON
  1. <?php
  2. /**
  3. * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
  4. * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
  5. *
  6. * Licensed under The MIT License
  7. * For full copyright and license information, please see the LICENSE.txt
  8. * Redistributions of files must retain the above copyright notice.
  9. *
  10. * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
  11. * @link http://cakephp.org CakePHP(tm) Project
  12. * @since 3.0.0
  13. * @license http://www.opensource.org/licenses/mit-license.php MIT License
  14. */
  15. namespace Cake\Test\TestCase\Routing\Filter;
  16. use Cake\Event\Event;
  17. use Cake\Network\Request;
  18. use Cake\Network\Response;
  19. use Cake\Routing\Filter\RoutingFilter;
  20. use Cake\Routing\Router;
  21. use Cake\TestSuite\TestCase;
  22. /**
  23. * Routing filter test.
  24. */
  25. class RoutingFilterTest extends TestCase
  26. {
  27. /**
  28. * test setting parameters in beforeDispatch method
  29. *
  30. * @return void
  31. * @triggers __CLASS__ $this, compact(request)
  32. */
  33. public function testBeforeDispatchSkipWhenControllerSet()
  34. {
  35. $filter = new RoutingFilter();
  36. $request = new Request("/testcontroller/testaction/params1/params2/params3");
  37. $request->addParams(['controller' => 'articles']);
  38. $event = new Event(__CLASS__, $this, compact('request'));
  39. $filter->beforeDispatch($event);
  40. $this->assertSame($request->params['controller'], 'articles');
  41. $this->assertEmpty($request->params['action']);
  42. }
  43. /**
  44. * test setting parameters in beforeDispatch method
  45. *
  46. * @return void
  47. * @triggers __CLASS__ $this, compact(request)
  48. */
  49. public function testBeforeDispatchSetsParameters()
  50. {
  51. Router::connect('/:controller/:action/*');
  52. $filter = new RoutingFilter();
  53. $request = new Request("/testcontroller/testaction/params1/params2/params3");
  54. $event = new Event(__CLASS__, $this, compact('request'));
  55. $filter->beforeDispatch($event);
  56. $this->assertSame($request->params['controller'], 'testcontroller');
  57. $this->assertSame($request->params['action'], 'testaction');
  58. $this->assertSame($request->params['pass'][0], 'params1');
  59. $this->assertSame($request->params['pass'][1], 'params2');
  60. $this->assertSame($request->params['pass'][2], 'params3');
  61. $this->assertFalse(!empty($request['form']));
  62. }
  63. /**
  64. * test setting parameters in beforeDispatch method
  65. *
  66. * @return void
  67. * @triggers __CLASS__ $this, compact(request)
  68. */
  69. public function testBeforeDispatchRedirectRoute()
  70. {
  71. Router::scope('/', function ($routes) {
  72. $routes->redirect('/home', ['controller' => 'articles']);
  73. $routes->connect('/:controller/:action/*');
  74. });
  75. $filter = new RoutingFilter();
  76. $request = new Request("/home");
  77. $response = new Response();
  78. $event = new Event(__CLASS__, $this, compact('request', 'response'));
  79. $response = $filter->beforeDispatch($event);
  80. $this->assertInstanceOf('Cake\Network\Response', $response);
  81. $this->assertSame('http://localhost/articles', $response->header()['Location']);
  82. $this->assertSame(301, $response->statusCode());
  83. }
  84. /**
  85. * test setting parameters in beforeDispatch method
  86. *
  87. * @return void
  88. * @triggers __CLASS__ $this, compact(request)
  89. * @triggers __CLASS__ $this, compact(request)
  90. */
  91. public function testQueryStringOnRoot()
  92. {
  93. Router::reload();
  94. Router::connect('/', ['controller' => 'pages', 'action' => 'display', 'home']);
  95. Router::connect('/pages/*', ['controller' => 'pages', 'action' => 'display']);
  96. Router::connect('/:controller/:action/*');
  97. $_GET = ['coffee' => 'life', 'sleep' => 'sissies'];
  98. $filter = new RoutingFilter();
  99. $request = new Request('posts/home/?coffee=life&sleep=sissies');
  100. $event = new Event(__CLASS__, $this, compact('request'));
  101. $filter->beforeDispatch($event);
  102. $this->assertRegExp('/posts/', $request['controller']);
  103. $this->assertRegExp('/home/', $request['action']);
  104. $this->assertTrue(isset($request['url']['sleep']));
  105. $this->assertTrue(isset($request['url']['coffee']));
  106. $request = new Request('/?coffee=life&sleep=sissy');
  107. $event = new Event(__CLASS__, $this, compact('request'));
  108. $filter->beforeDispatch($event);
  109. $this->assertRegExp('/pages/', $request['controller']);
  110. $this->assertRegExp('/display/', $request['action']);
  111. $this->assertTrue(isset($request['url']['sleep']));
  112. $this->assertTrue(isset($request['url']['coffee']));
  113. $this->assertEquals('life', $request['url']['coffee']);
  114. }
  115. }