Skip to content

Commit 1ce5f47

Browse files
Create QueryStringBuilderTest.php
1 parent f49e9ce commit 1ce5f47

File tree

1 file changed

+101
-0
lines changed

1 file changed

+101
-0
lines changed
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
<?php
2+
3+
namespace Gitlab\Tests\HttpClient\Util;
4+
5+
use Gitlab\HttpClient\Util\QueryStringBuilder;
6+
use PHPUnit\Framework\TestCase;
7+
8+
class QueryStringBuilderTest extends TestCase
9+
{
10+
/**
11+
* @dataProvider queryStringProvider
12+
*
13+
* @param mixed $query
14+
* @param string $expected
15+
*/
16+
public function testBuild($query, string $expected)
17+
{
18+
$this->assertSame($expected, QueryStringBuilder::build($query));
19+
}
20+
21+
public function queryStringProvider()
22+
{
23+
//Scalar value.
24+
yield [
25+
'a project',
26+
'a%20project',
27+
];
28+
29+
//Indexed array.
30+
yield [
31+
['iids' => [88, 86]],
32+
//iids[]=88&iids[]=86
33+
'iids%5B%5D=88&iids%5B%5D=86',
34+
];
35+
36+
//Non indexed array with only numeric keys.
37+
yield [
38+
['iids' => [0 => 88, 2 => 86]],
39+
//iids[0]=88&iids[2]=86
40+
'iids%5B0%5D=88&iids%5B2%5D=86',
41+
];
42+
43+
yield [
44+
[
45+
'source_branch' => 'test_source',
46+
'target_branch' => 'test_master',
47+
'title' => 'test',
48+
],
49+
'source_branch=test_source&target_branch=test_master&title=test',
50+
];
51+
52+
//Boolean encoding
53+
yield [
54+
['push_events' => false, 'merge_requests_events' => 1],
55+
'push_events=0&merge_requests_events=1',
56+
];
57+
58+
//A deeply nested array.
59+
yield [
60+
[
61+
'search' => 'a project',
62+
'owned' => 'true',
63+
'iids' => [88, 86],
64+
'assoc' => [
65+
'a' => 'b',
66+
'c' => [
67+
'd' => 'e',
68+
'f' => 'g',
69+
],
70+
],
71+
'nested' => [
72+
'a' => [
73+
[
74+
'b' => 'c',
75+
],
76+
[
77+
'd' => 'e',
78+
'f' => [
79+
'g' => 'h',
80+
'i' => 'j',
81+
'k' => [87, 89],
82+
],
83+
],
84+
],
85+
],
86+
],
87+
//search=a project
88+
//&owned=true
89+
//&iids[]=88&iids[]=86
90+
//&assoc[a]=b&assoc[c][d]=e&assoc[c][f]=g
91+
//&nested[a][][b]=c&nested[a][][d]=e
92+
//&nested[a][][f][g]=h&nested[a][][f][i]=j
93+
//&nested[a][][f][k][]=87&nested[a][][f][k][]=89
94+
'search=a%20project&owned=true&iids%5B%5D=88&iids%5B%5D=86'.
95+
'&assoc%5Ba%5D=b&assoc%5Bc%5D%5Bd%5D=e&assoc%5Bc%5D%5Bf%5D=g'.
96+
'&nested%5Ba%5D%5B%5D%5Bb%5D=c&nested%5Ba%5D%5B%5D%5Bd%5D=e'.
97+
'&nested%5Ba%5D%5B%5D%5Bf%5D%5Bg%5D=h&nested%5Ba%5D%5B%5D%5Bf%5D%5Bi%5D=j'.
98+
'&nested%5Ba%5D%5B%5D%5Bf%5D%5Bk%5D%5B%5D=87&nested%5Ba%5D%5B%5D%5Bf%5D%5Bk%5D%5B%5D=89',
99+
];
100+
}
101+
}

0 commit comments

Comments
 (0)