SigningStringTest.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. namespace Tests\Unit\HttpSignatures;
  3. use GuzzleHttp\Psr7\Request;
  4. use App\Util\HttpSignatures\HeaderList;
  5. use Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory;
  6. use App\Util\HttpSignatures\SigningString;
  7. use Symfony\Component\HttpFoundation\Request as SymfonyRequest;
  8. class SigningStringTest extends \PHPUnit\Framework\TestCase
  9. {
  10. public function testWithoutQueryString()
  11. {
  12. $headerList = new HeaderList(['(request-target)']);
  13. $ss = new SigningString($headerList, $this->message('/path'));
  14. $this->assertEquals(
  15. '(request-target): get /path',
  16. $ss->string()
  17. );
  18. }
  19. public function testSigningStringWithOrderedQueryParameters()
  20. {
  21. $headerList = new HeaderList(['(request-target)', 'date']);
  22. $ss = new SigningString($headerList, $this->message('/path?a=antelope&z=zebra'));
  23. $this->assertEquals(
  24. "(request-target): get /path?a=antelope&z=zebra\ndate: Mon, 28 Jul 2014 15:39:13 -0700",
  25. $ss->string()
  26. );
  27. }
  28. public function testSigningStringWithUnorderedQueryParameters()
  29. {
  30. $headerList = new HeaderList(['(request-target)', 'date']);
  31. $ss = new SigningString($headerList, $this->message('/path?z=zebra&a=antelope'));
  32. $this->assertEquals(
  33. "(request-target): get /path?z=zebra&a=antelope\ndate: Mon, 28 Jul 2014 15:39:13 -0700",
  34. $ss->string()
  35. );
  36. }
  37. public function testSigningStringWithOrderedQueryParametersSymfonyRequest()
  38. {
  39. $headerList = new HeaderList(['(request-target)', 'date']);
  40. $ss = new SigningString($headerList, $this->symfonyMessage('/path?a=antelope&z=zebra'));
  41. $this->assertEquals(
  42. "(request-target): get /path?a=antelope&z=zebra\ndate: Mon, 28 Jul 2014 15:39:13 -0700",
  43. $ss->string()
  44. );
  45. }
  46. public function testSigningStringWithUnorderedQueryParametersSymfonyRequest()
  47. {
  48. $headerList = new HeaderList(['(request-target)', 'date']);
  49. $ss = new SigningString($headerList, $this->symfonyMessage('/path?z=zebra&a=antelope'));
  50. $this->assertEquals(
  51. "(request-target): get /path?z=zebra&a=antelope\ndate: Mon, 28 Jul 2014 15:39:13 -0700",
  52. $ss->string()
  53. );
  54. }
  55. /**
  56. * @expectedException App\Util\HttpSignatures\Exception
  57. */
  58. public function testSigningStringErrorForMissingHeader()
  59. {
  60. $headerList = new HeaderList(['nope']);
  61. $ss = new SigningString($headerList, $this->message('/'));
  62. $ss->string();
  63. }
  64. private function message($path)
  65. {
  66. return new Request('GET', $path, ['date' => 'Mon, 28 Jul 2014 15:39:13 -0700']);
  67. }
  68. private function symfonyMessage($path)
  69. {
  70. $symfonyRequest = SymfonyRequest::create($path, 'GET');
  71. $symfonyRequest->headers->replace(['date' => 'Mon, 28 Jul 2014 15:39:13 -0700']);
  72. $psr7Factory = new DiactorosFactory();
  73. $psrRequest = $psr7Factory->createRequest($symfonyRequest)->withRequestTarget($symfonyRequest->getRequestUri());
  74. return $psrRequest;
  75. }
  76. }