UrlBuilderTest.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <?php
  2. /** @noinspection HttpUrlsUsage */
  3. namespace App\Tests\Unit\Service\Utils;
  4. use App\Service\Utils\UrlBuilder;
  5. use PHPUnit\Framework\MockObject\MockObject;
  6. use PHPUnit\Framework\TestCase;
  7. class UrlBuilderTest extends TestCase
  8. {
  9. private function getMockFor(string $methodName): UrlBuilder|MockObject
  10. {
  11. return $this
  12. ->getMockBuilder(UrlBuilder::class)
  13. ->setConstructorArgs(['https://mydomain.net'])
  14. ->setMethodsExcept([$methodName])
  15. ->getMock();
  16. }
  17. /**
  18. * @see UrlBuilder::concatPath()
  19. */
  20. public function testConcatPath(): void
  21. {
  22. $this->assertEquals(
  23. 'https://domain.org/abc/def',
  24. UrlBuilder::concatPath('https://domain.org', ['abc/def'])
  25. );
  26. $this->assertEquals(
  27. 'https://domain.org/abc/def',
  28. UrlBuilder::concatPath('https://domain.org/', ['/abc/def'])
  29. );
  30. $this->assertEquals(
  31. 'https://domain.org/abc/def/ghi/jkl/',
  32. UrlBuilder::concatPath('https://domain.org/', ['/abc/def', 'ghi', '//jkl/'])
  33. );
  34. $this->assertEquals(
  35. '/abc/def',
  36. UrlBuilder::concatPath('/abc/', ['/def'])
  37. );
  38. $this->assertEquals(
  39. 'https://domain.org/',
  40. UrlBuilder::concatPath('https://domain.org', [''])
  41. );
  42. }
  43. /**
  44. * @see UrlBuilder::concatParameters()
  45. */
  46. public function testConcatParameters(): void
  47. {
  48. $this->assertEquals(
  49. 'https://domain.org/abc',
  50. UrlBuilder::concatParameters('https://domain.org/abc', [])
  51. );
  52. $this->assertEquals(
  53. 'https://domain.org/abc?a=1&b&c=d%3De',
  54. UrlBuilder::concatParameters('https://domain.org/abc', ['a' => 1, 'b' => '', 'c' => 'd=e'])
  55. );
  56. $this->assertEquals(
  57. 'https://domain.org/abc?a=1&b=2',
  58. UrlBuilder::concatParameters('https://domain.org/abc?a=1', ['b' => 2])
  59. );
  60. }
  61. /**
  62. * @see UrlBuilder::prependHttps()
  63. */
  64. public function testPrependHttps(): void
  65. {
  66. $this->assertEquals(
  67. 'https://domain.org/abc',
  68. UrlBuilder::prependHttps('https://domain.org/abc')
  69. );
  70. $this->assertEquals(
  71. 'http://domain.org/abc',
  72. UrlBuilder::prependHttps('http://domain.org/abc')
  73. );
  74. $this->assertEquals(
  75. 'https://domain.org/abc',
  76. UrlBuilder::prependHttps('domain.org/abc')
  77. );
  78. }
  79. /**
  80. * @see UrlBuilder::concat()
  81. */
  82. public function testConcat(): void
  83. {
  84. $this->assertEquals(
  85. 'https://domain.org/abc?a=1',
  86. UrlBuilder::concat('domain.org', ['abc'], ['a' => 1], true)
  87. );
  88. }
  89. public function testGetRelativeUrl(): void
  90. {
  91. $urlBuilder = $this->getMockFor('getRelativeUrl');
  92. $this->assertEquals(
  93. '/abc?q=1',
  94. $urlBuilder->getRelativeUrl('https://mydomain.net/abc?q=1')
  95. );
  96. $this->assertEquals(
  97. '/abc?q=1',
  98. $urlBuilder->getRelativeUrl('/abc?q=1')
  99. );
  100. }
  101. public function testGetAbsoluteUrl(): void
  102. {
  103. $urlBuilder = $this->getMockFor('getAbsoluteUrl');
  104. $this->assertEquals(
  105. 'https://mydomain.net/abc?q=1',
  106. $urlBuilder->getAbsoluteUrl('/abc?q=1')
  107. );
  108. }
  109. }