RequestContextTest.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  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\Component\Routing\Tests;
  11. use PHPUnit\Framework\TestCase;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\Routing\RequestContext;
  14. class RequestContextTest extends TestCase
  15. {
  16. public function testConstruct()
  17. {
  18. $requestContext = new RequestContext(
  19. 'foo',
  20. 'post',
  21. 'foo.bar',
  22. 'HTTPS',
  23. 8080,
  24. 444,
  25. '/baz',
  26. 'bar=foobar'
  27. );
  28. $this->assertEquals('foo', $requestContext->getBaseUrl());
  29. $this->assertEquals('POST', $requestContext->getMethod());
  30. $this->assertEquals('foo.bar', $requestContext->getHost());
  31. $this->assertEquals('https', $requestContext->getScheme());
  32. $this->assertSame(8080, $requestContext->getHttpPort());
  33. $this->assertSame(444, $requestContext->getHttpsPort());
  34. $this->assertEquals('/baz', $requestContext->getPathInfo());
  35. $this->assertEquals('bar=foobar', $requestContext->getQueryString());
  36. }
  37. public function testFromUriWithBaseUrl()
  38. {
  39. $requestContext = RequestContext::fromUri('https://test.com:444/index.php');
  40. $this->assertSame('GET', $requestContext->getMethod());
  41. $this->assertSame('https', $requestContext->getScheme());
  42. $this->assertSame('test.com', $requestContext->getHost());
  43. $this->assertSame('/index.php', $requestContext->getBaseUrl());
  44. $this->assertSame('/', $requestContext->getPathInfo());
  45. $this->assertSame(80, $requestContext->getHttpPort());
  46. $this->assertSame(444, $requestContext->getHttpsPort());
  47. }
  48. public function testFromUriWithTrailingSlash()
  49. {
  50. $requestContext = RequestContext::fromUri('http://test.com:8080/');
  51. $this->assertSame('http', $requestContext->getScheme());
  52. $this->assertSame('test.com', $requestContext->getHost());
  53. $this->assertSame(8080, $requestContext->getHttpPort());
  54. $this->assertSame(443, $requestContext->getHttpsPort());
  55. $this->assertSame('', $requestContext->getBaseUrl());
  56. $this->assertSame('/', $requestContext->getPathInfo());
  57. }
  58. public function testFromUriWithoutTrailingSlash()
  59. {
  60. $requestContext = RequestContext::fromUri('https://test.com');
  61. $this->assertSame('https', $requestContext->getScheme());
  62. $this->assertSame('test.com', $requestContext->getHost());
  63. $this->assertSame('', $requestContext->getBaseUrl());
  64. $this->assertSame('/', $requestContext->getPathInfo());
  65. }
  66. public function testFromUriBeingEmpty()
  67. {
  68. $requestContext = RequestContext::fromUri('');
  69. $this->assertSame('http', $requestContext->getScheme());
  70. $this->assertSame('localhost', $requestContext->getHost());
  71. $this->assertSame('', $requestContext->getBaseUrl());
  72. $this->assertSame('/', $requestContext->getPathInfo());
  73. }
  74. public function testFromRequest()
  75. {
  76. $request = Request::create('https://test.com:444/foo?bar=baz');
  77. $requestContext = new RequestContext();
  78. $requestContext->setHttpPort(123);
  79. $requestContext->fromRequest($request);
  80. $this->assertEquals('', $requestContext->getBaseUrl());
  81. $this->assertEquals('GET', $requestContext->getMethod());
  82. $this->assertEquals('test.com', $requestContext->getHost());
  83. $this->assertEquals('https', $requestContext->getScheme());
  84. $this->assertEquals('/foo', $requestContext->getPathInfo());
  85. $this->assertEquals('bar=baz', $requestContext->getQueryString());
  86. $this->assertSame(123, $requestContext->getHttpPort());
  87. $this->assertSame(444, $requestContext->getHttpsPort());
  88. $request = Request::create('http://test.com:8080/foo?bar=baz');
  89. $requestContext = new RequestContext();
  90. $requestContext->setHttpsPort(567);
  91. $requestContext->fromRequest($request);
  92. $this->assertSame(8080, $requestContext->getHttpPort());
  93. $this->assertSame(567, $requestContext->getHttpsPort());
  94. }
  95. public function testGetParameters()
  96. {
  97. $requestContext = new RequestContext();
  98. $this->assertEquals([], $requestContext->getParameters());
  99. $requestContext->setParameters(['foo' => 'bar']);
  100. $this->assertEquals(['foo' => 'bar'], $requestContext->getParameters());
  101. }
  102. public function testHasParameter()
  103. {
  104. $requestContext = new RequestContext();
  105. $requestContext->setParameters(['foo' => 'bar']);
  106. $this->assertTrue($requestContext->hasParameter('foo'));
  107. $this->assertFalse($requestContext->hasParameter('baz'));
  108. }
  109. public function testGetParameter()
  110. {
  111. $requestContext = new RequestContext();
  112. $requestContext->setParameters(['foo' => 'bar']);
  113. $this->assertEquals('bar', $requestContext->getParameter('foo'));
  114. $this->assertNull($requestContext->getParameter('baz'));
  115. }
  116. public function testSetParameter()
  117. {
  118. $requestContext = new RequestContext();
  119. $requestContext->setParameter('foo', 'bar');
  120. $this->assertEquals('bar', $requestContext->getParameter('foo'));
  121. }
  122. public function testMethod()
  123. {
  124. $requestContext = new RequestContext();
  125. $requestContext->setMethod('post');
  126. $this->assertSame('POST', $requestContext->getMethod());
  127. }
  128. public function testScheme()
  129. {
  130. $requestContext = new RequestContext();
  131. $requestContext->setScheme('HTTPS');
  132. $this->assertSame('https', $requestContext->getScheme());
  133. }
  134. public function testHost()
  135. {
  136. $requestContext = new RequestContext();
  137. $requestContext->setHost('eXampLe.com');
  138. $this->assertSame('example.com', $requestContext->getHost());
  139. }
  140. public function testQueryString()
  141. {
  142. $requestContext = new RequestContext();
  143. $requestContext->setQueryString(null);
  144. $this->assertSame('', $requestContext->getQueryString());
  145. }
  146. public function testPort()
  147. {
  148. $requestContext = new RequestContext();
  149. $requestContext->setHttpPort('123');
  150. $requestContext->setHttpsPort('456');
  151. $this->assertSame(123, $requestContext->getHttpPort());
  152. $this->assertSame(456, $requestContext->getHttpsPort());
  153. }
  154. public function testFluentInterface()
  155. {
  156. $requestContext = new RequestContext();
  157. $this->assertSame($requestContext, $requestContext->setBaseUrl('/app.php'));
  158. $this->assertSame($requestContext, $requestContext->setPathInfo('/index'));
  159. $this->assertSame($requestContext, $requestContext->setMethod('POST'));
  160. $this->assertSame($requestContext, $requestContext->setScheme('https'));
  161. $this->assertSame($requestContext, $requestContext->setHost('example.com'));
  162. $this->assertSame($requestContext, $requestContext->setQueryString('foo=bar'));
  163. $this->assertSame($requestContext, $requestContext->setHttpPort(80));
  164. $this->assertSame($requestContext, $requestContext->setHttpsPort(443));
  165. $this->assertSame($requestContext, $requestContext->setParameters([]));
  166. $this->assertSame($requestContext, $requestContext->setParameter('foo', 'bar'));
  167. }
  168. }