‪TYPO3CMS  ‪main
HttpUtilityTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use PHPUnit\Framework\Attributes\DataProvider;
21 use PHPUnit\Framework\Attributes\Test;
23 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
24 
28 final class ‪HttpUtilityTest extends UnitTestCase
29 {
30  #[DataProvider('isUrlBuiltCorrectlyDataProvider')]
31  #[Test]
32  public function ‪isUrlBuiltCorrectly(array $urlParts, string $expected): void
33  {
34  ‪$url = ‪HttpUtility::buildUrl($urlParts);
35  self::assertEquals($expected, ‪$url);
36  }
37 
38  public static function ‪isUrlBuiltCorrectlyDataProvider(): array
39  {
40  return [
41  'rebuild url without scheme' => [
42  parse_url('typo3.org/path/index.php'),
43  'typo3.org/path/index.php',
44  ],
45  'rebuild url with scheme' => [
46  parse_url('http://typo3.org/path/index.php'),
47  'http://typo3.org/path/index.php',
48  ],
49  'rebuild url with all properties' => [
50  parse_url('http://editor:secret@typo3.org:8080/path/index.php?query=data#fragment'),
51  'http://editor:secret@typo3.org:8080/path/index.php?query=data#fragment',
52  ],
53  'url without username, but password' => [
54  [
55  'scheme' => 'http',
56  'pass' => 'secrept',
57  'host' => 'typo3.org',
58  ],
59  'http://typo3.org',
60  ],
61  ];
62  }
63 
67  public static function ‪queryStringDataProvider(): array
68  {
69  $valueArray = ['one' => '√', 'two' => 2];
70 
71  return [
72  'Empty input' => ['foo', [], ''],
73  'String parameters' => ['foo', $valueArray, 'foo%5Bone%5D=%E2%88%9A&foo%5Btwo%5D=2'],
74  'Nested array parameters' => ['foo', [$valueArray], 'foo%5B0%5D%5Bone%5D=%E2%88%9A&foo%5B0%5D%5Btwo%5D=2'],
75  'Keep blank parameters' => ['foo', ['one' => '√', ''], 'foo%5Bone%5D=%E2%88%9A&foo%5B0%5D='],
76  ];
77  }
78 
79  #[DataProvider('queryStringDataProvider')]
80  #[Test]
81  public function ‪buildQueryStringBuildsValidParameterString(string $name, array $input, string $expected): void
82  {
83  if ($name === '') {
84  self::assertSame($expected, ‪HttpUtility::buildQueryString($input));
85  } else {
86  self::assertSame($expected, ‪HttpUtility::buildQueryString([$name => $input]));
87  }
88  }
89 
90  #[Test]
92  {
93  $input = ['one' => '√', ''];
94  $expected = 'foo%5Bone%5D=%E2%88%9A';
95  self::assertSame($expected, ‪HttpUtility::buildQueryString(['foo' => $input], '', true));
96  }
97 
98  #[Test]
100  {
101  $input = ['one' => '√', ''];
102  $expected = 'foo%5Bone%5D=%E2%88%9A&foo%5B0%5D=';
103  self::assertSame($expected, ‪HttpUtility::buildQueryString(['foo' => $input]));
104  }
105 
106  #[Test]
108  {
109  $input = ['one' => ['two' => ['three' => '√']], ''];
110  $expected = 'foo%5Bone%5D%5Btwo%5D%5Bthree%5D=%E2%88%9A&foo%5B0%5D=';
111  self::assertSame($expected, ‪HttpUtility::buildQueryString(['foo' => $input]));
112  }
113 
114  #[Test]
116  {
117  $input = [];
118  $expected = '';
119  self::assertSame($expected, ‪HttpUtility::buildQueryString($input, '?', true));
120  }
121 
122  #[Test]
124  {
125  $input = ['one' => ''];
126  $expected = '';
127  self::assertSame($expected, ‪HttpUtility::buildQueryString(['foo' => $input], '?', true));
128  }
129 }
‪TYPO3\CMS\Core\Utility\HttpUtility\buildUrl
‪static buildUrl(array $urlParts)
Definition: HttpUtility.php:102
‪TYPO3\CMS\Core\Tests\Unit\Utility\HttpUtilityTest
Definition: HttpUtilityTest.php:29
‪TYPO3\CMS\Core\Tests\Unit\Utility\HttpUtilityTest\isUrlBuiltCorrectly
‪isUrlBuiltCorrectly(array $urlParts, string $expected)
Definition: HttpUtilityTest.php:32
‪TYPO3\CMS\Core\Tests\Unit\Utility\HttpUtilityTest\buildQueryStringCanUrlEncodeKeyNames
‪buildQueryStringCanUrlEncodeKeyNames()
Definition: HttpUtilityTest.php:99
‪TYPO3\CMS\Core\Tests\Unit\Utility\HttpUtilityTest\isUrlBuiltCorrectlyDataProvider
‪static isUrlBuiltCorrectlyDataProvider()
Definition: HttpUtilityTest.php:38
‪TYPO3\CMS\Core\Tests\Unit\Utility
‪TYPO3\CMS\Core\Tests\Unit\Utility\HttpUtilityTest\buildQueryStringCanUrlEncodeKeyNamesMultidimensional
‪buildQueryStringCanUrlEncodeKeyNamesMultidimensional()
Definition: HttpUtilityTest.php:107
‪TYPO3\CMS\Core\Utility\HttpUtility\buildQueryString
‪static string buildQueryString(array $parameters, string $prependCharacter='', bool $skipEmptyParameters=false)
Definition: HttpUtility.php:124
‪TYPO3\CMS\Core\Tests\Unit\Utility\HttpUtilityTest\buildQueryStringCanSkipEmptyParameters
‪buildQueryStringCanSkipEmptyParameters()
Definition: HttpUtilityTest.php:91
‪TYPO3\CMS\Webhooks\Message\$url
‪identifier readonly UriInterface $url
Definition: LoginErrorOccurredMessage.php:36
‪TYPO3\CMS\Core\Tests\Unit\Utility\HttpUtilityTest\queryStringDataProvider
‪static queryStringDataProvider()
Definition: HttpUtilityTest.php:67
‪TYPO3\CMS\Core\Tests\Unit\Utility\HttpUtilityTest\buildQueryStringBuildsValidParameterString
‪buildQueryStringBuildsValidParameterString(string $name, array $input, string $expected)
Definition: HttpUtilityTest.php:81
‪TYPO3\CMS\Core\Utility\HttpUtility
Definition: HttpUtility.php:24
‪TYPO3\CMS\Core\Tests\Unit\Utility\HttpUtilityTest\buildQueryStringSkipsLeadingCharacterOnEmptyParameters
‪buildQueryStringSkipsLeadingCharacterOnEmptyParameters()
Definition: HttpUtilityTest.php:115
‪TYPO3\CMS\Core\Tests\Unit\Utility\HttpUtilityTest\buildQueryStringSkipsLeadingCharacterOnCleanedEmptyParameters
‪buildQueryStringSkipsLeadingCharacterOnCleanedEmptyParameters()
Definition: HttpUtilityTest.php:123