RequestTest.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?php
  2. declare(strict_types=1);
  3. namespace Sabre\HTTP;
  4. class RequestTest extends \PHPUnit\Framework\TestCase
  5. {
  6. public function testConstruct()
  7. {
  8. $request = new Request('GET', '/foo', [
  9. 'User-Agent' => 'Evert',
  10. ]);
  11. $this->assertEquals('GET', $request->getMethod());
  12. $this->assertEquals('/foo', $request->getUrl());
  13. $this->assertEquals([
  14. 'User-Agent' => ['Evert'],
  15. ], $request->getHeaders());
  16. }
  17. public function testGetQueryParameters()
  18. {
  19. $request = new Request('GET', '/foo?a=b&c&d=e');
  20. $this->assertEquals([
  21. 'a' => 'b',
  22. 'c' => null,
  23. 'd' => 'e',
  24. ], $request->getQueryParameters());
  25. }
  26. public function testGetQueryParametersNoData()
  27. {
  28. $request = new Request('GET', '/foo');
  29. $this->assertEquals([], $request->getQueryParameters());
  30. }
  31. /**
  32. * @backupGlobals
  33. */
  34. public function testCreateFromPHPRequest()
  35. {
  36. $_SERVER['REQUEST_URI'] = '/';
  37. $_SERVER['REQUEST_METHOD'] = 'PUT';
  38. $request = Sapi::getRequest();
  39. $this->assertEquals('PUT', $request->getMethod());
  40. }
  41. public function testGetAbsoluteUrl()
  42. {
  43. $r = new Request('GET', '/foo', [
  44. 'Host' => 'sabredav.org',
  45. ]);
  46. $this->assertEquals('http://sabredav.org/foo', $r->getAbsoluteUrl());
  47. $s = [
  48. 'HTTP_HOST' => 'sabredav.org',
  49. 'REQUEST_URI' => '/foo',
  50. 'REQUEST_METHOD' => 'GET',
  51. 'HTTPS' => 'on',
  52. ];
  53. $r = Sapi::createFromServerArray($s);
  54. $this->assertEquals('https://sabredav.org/foo', $r->getAbsoluteUrl());
  55. }
  56. public function testGetPostData()
  57. {
  58. $post = [
  59. 'bla' => 'foo',
  60. ];
  61. $r = new Request('POST', '/');
  62. $r->setPostData($post);
  63. $this->assertEquals($post, $r->getPostData());
  64. }
  65. public function testGetPath()
  66. {
  67. $request = new Request('GET', '/foo/bar/');
  68. $request->setBaseUrl('/foo');
  69. $request->setUrl('/foo/bar/');
  70. $this->assertEquals('bar', $request->getPath());
  71. }
  72. public function testGetPathStrippedQuery()
  73. {
  74. $request = new Request('GET', '/foo/bar?a=B');
  75. $request->setBaseUrl('/foo');
  76. $this->assertEquals('bar', $request->getPath());
  77. }
  78. public function testGetPathMissingSlash()
  79. {
  80. $request = new Request('GET', '/foo');
  81. $request->setBaseUrl('/foo/');
  82. $this->assertEquals('', $request->getPath());
  83. }
  84. public function testGetPathOutsideBaseUrl()
  85. {
  86. $this->expectException('LogicException');
  87. $request = new Request('GET', '/bar/');
  88. $request->setBaseUrl('/foo/');
  89. $request->getPath();
  90. }
  91. public function testToString()
  92. {
  93. $request = new Request('PUT', '/foo/bar', ['Content-Type' => 'text/xml']);
  94. $request->setBody('foo');
  95. $expected = "PUT /foo/bar HTTP/1.1\r\n"
  96. ."Content-Type: text/xml\r\n"
  97. ."\r\n"
  98. .'foo';
  99. $this->assertEquals($expected, (string) $request);
  100. }
  101. public function testToStringAuthorization()
  102. {
  103. $request = new Request('PUT', '/foo/bar', ['Content-Type' => 'text/xml', 'Authorization' => 'Basic foobar']);
  104. $request->setBody('foo');
  105. $expected = "PUT /foo/bar HTTP/1.1\r\n"
  106. ."Content-Type: text/xml\r\n"
  107. ."Authorization: Basic REDACTED\r\n"
  108. ."\r\n"
  109. .'foo';
  110. $this->assertEquals($expected, (string) $request);
  111. }
  112. }