UrlComponentTest.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <?php
  2. namespace Tools\Test\TestCase\Controller\Component;
  3. use App\Controller\UrlComponentTestController;
  4. use Cake\Core\Configure;
  5. use Cake\Event\Event;
  6. use Cake\Http\ServerRequest;
  7. use Cake\Routing\RouteBuilder;
  8. use Cake\Routing\Router;
  9. use Tools\TestSuite\TestCase;
  10. /**
  11. */
  12. class UrlComponentTest extends TestCase {
  13. /**
  14. * @var \Cake\Event\Event
  15. */
  16. public $event;
  17. /**
  18. * @var \App\Controller\UrlComponentTestController
  19. */
  20. public $Controller;
  21. /**
  22. * @return void
  23. */
  24. public function setUp(): void {
  25. parent::setUp();
  26. $this->event = new Event('Controller.beforeFilter');
  27. $this->Controller = new UrlComponentTestController(new ServerRequest());
  28. Router::reload();
  29. Router::connect('/:controller', ['action' => 'index']);
  30. Router::connect('/:controller/:action/*');
  31. Configure::write('App.fullBaseUrl', 'http://localhost');
  32. }
  33. /**
  34. * @return void
  35. */
  36. public function tearDown(): void {
  37. parent::tearDown();
  38. unset($this->Controller);
  39. }
  40. /**
  41. * @return void
  42. */
  43. public function testDefaults() {
  44. $is = $this->Controller->Url->defaults();
  45. $expected = [
  46. 'prefix' => false,
  47. 'plugin' => false
  48. ];
  49. $this->assertSame($expected, $is);
  50. }
  51. /**
  52. * @return void
  53. */
  54. public function testBuild() {
  55. $is = $this->Controller->Url->build(['action' => 'x']);
  56. $expected = '/x';
  57. $this->assertSame($expected, $is);
  58. $is = $this->Controller->Url->build(['action' => 'x'], ['fullBase' => true]);
  59. $expected = 'http://localhost/x';
  60. $this->assertSame($expected, $is);
  61. }
  62. /**
  63. * @return void
  64. */
  65. public function testResetArray() {
  66. $result = $this->Controller->Url->resetArray(['controller' => 'foobar', 'action' => 'test']);
  67. $expected = [
  68. 'controller' => 'foobar',
  69. 'action' => 'test',
  70. 'prefix' => false,
  71. 'plugin' => false,
  72. ];
  73. $this->assertSame($expected, $result);
  74. }
  75. /**
  76. * @return void
  77. */
  78. public function testCompleteArray() {
  79. $this->Controller->setRequest($this->Controller->getRequest()->withQueryParams(['x' => 'y']));
  80. $result = $this->Controller->Url->completeArray(['controller' => 'foobar', 'action' => 'test']);
  81. $expected = [
  82. 'controller' => 'foobar',
  83. 'action' => 'test',
  84. '?' => ['x' => 'y']
  85. ];
  86. $this->assertSame($expected, $result);
  87. }
  88. /**
  89. * @return void
  90. */
  91. public function testBuildReset() {
  92. Router::connect('/:controller/:action/*');
  93. $result = $this->Controller->Url->buildReset(['controller' => 'foobar', 'action' => 'test']);
  94. $expected = '/foobar/test';
  95. $this->assertSame($expected, $result);
  96. $request = $this->Controller->getRequest();
  97. $request = $request->withAttribute('here', '/admin/foo/bar/baz/test')
  98. ->withParam('prefix', 'admin')
  99. ->withParam('plugin', 'Foo');
  100. $this->Controller->setRequest($request);
  101. Router::reload();
  102. Router::connect('/:controller/:action/*');
  103. Router::plugin('Foo', function (RouteBuilder $routes) {
  104. $routes->fallbacks();
  105. });
  106. Router::prefix('admin', function (RouteBuilder $routes) {
  107. $routes->plugin('Foo', function (RouteBuilder $routes) {
  108. $routes->fallbacks();
  109. });
  110. });
  111. Router::pushRequest($this->Controller->getRequest());
  112. $result = $this->Controller->Url->build(['controller' => 'bar', 'action' => 'baz', 'x']);
  113. $expected = '/admin/foo/bar/baz/x';
  114. $this->assertSame($expected, $result);
  115. $result = $this->Controller->Url->buildReset(['controller' => 'bar', 'action' => 'baz', 'x']);
  116. $expected = '/bar/baz/x';
  117. $this->assertSame($expected, $result);
  118. }
  119. /**
  120. * @return void
  121. */
  122. public function testBuildComplete() {
  123. $this->Controller->setRequest($this->Controller->getRequest()->withQueryParams(['x' => 'y']));
  124. $result = $this->Controller->Url->buildComplete(['action' => 'test']);
  125. $expected = '/test?x=y';
  126. $this->assertSame($expected, $result);
  127. $result = $this->Controller->Url->buildComplete(['action' => 'test', '?' => ['a' => 'b']]);
  128. $expected = '/test?a=b&x=y';
  129. $this->assertSame($expected, $result);
  130. $expected = '/test?a=b&amp;x=y';
  131. $this->assertSame($expected, h($result));
  132. }
  133. }