3 namespace Friendica\Test\src\App;
6 use PHPUnit\Framework\TestCase;
8 class ArgumentsTest extends TestCase
10 private function assertArguments(array $assert, App\Arguments $arguments)
12 $this->assertEquals($assert['queryString'], $arguments->getQueryString());
13 $this->assertEquals($assert['command'], $arguments->getCommand());
14 $this->assertEquals($assert['argv'], $arguments->getArgv());
15 $this->assertEquals($assert['argc'], $arguments->getArgc());
16 $this->assertCount($assert['argc'], $arguments->getArgv());
20 * Test the default argument without any determinations
22 public function testDefault()
24 $arguments = new App\Arguments();
26 $this->assertArguments([
35 public function dataArguments()
40 'queryString' => 'profile/test/it?arg1=value1&arg2=value2',
41 'command' => 'profile/test/it',
42 'argv' => ['profile', 'test', 'it'],
46 'QUERY_STRING' => 'pagename=profile/test/it?arg1=value1&arg2=value2',
49 'pagename' => 'profile/test/it',
54 'queryString' => 'profile/test/it?arg1=value1&arg2=value2',
55 'command' => 'profile/test/it',
56 'argv' => ['profile', 'test', 'it'],
60 'QUERY_STRING' => 'q=profile/test/it?arg1=value1&arg2=value2',
63 'q' => 'profile/test/it',
66 'withWrongDelimiter' => [
68 'queryString' => 'profile/test/it?arg1=value1&arg2=value2',
69 'command' => 'profile/test/it',
70 'argv' => ['profile', 'test', 'it'],
74 'QUERY_STRING' => 'pagename=profile/test/it&arg1=value1&arg2=value2',
77 'pagename' => 'profile/test/it',
80 'withUnixHomeDir' => [
82 'queryString' => '~test/it?arg1=value1&arg2=value2',
83 'command' => 'profile/test/it',
84 'argv' => ['profile', 'test', 'it'],
88 'QUERY_STRING' => 'pagename=~test/it?arg1=value1&arg2=value2',
91 'pagename' => '~test/it',
94 'withDiasporaHomeDir' => [
96 'queryString' => 'u/test/it?arg1=value1&arg2=value2',
97 'command' => 'profile/test/it',
98 'argv' => ['profile', 'test', 'it'],
102 'QUERY_STRING' => 'pagename=u/test/it?arg1=value1&arg2=value2',
105 'pagename' => 'u/test/it',
108 'withTrailingSlash' => [
110 'queryString' => 'profile/test/it?arg1=value1&arg2=value2/',
111 'command' => 'profile/test/it',
112 'argv' => ['profile', 'test', 'it'],
116 'QUERY_STRING' => 'pagename=profile/test/it?arg1=value1&arg2=value2/',
119 'pagename' => 'profile/test/it',
122 'withWrongQueryString' => [
124 // empty query string?!
126 'command' => 'profile/test/it',
127 'argv' => ['profile', 'test', 'it'],
131 'QUERY_STRING' => 'wrong=profile/test/it?arg1=value1&arg2=value2/',
134 'pagename' => 'profile/test/it',
137 'withMissingPageName' => [
139 'queryString' => 'notvalid/it?arg1=value1&arg2=value2/',
140 'command' => App\Module::DEFAULT,
141 'argv' => [App\Module::DEFAULT],
145 'QUERY_STRING' => 'pagename=notvalid/it?arg1=value1&arg2=value2/',
154 * Test all variants of argument determination
156 * @dataProvider dataArguments
158 public function testDetermine(array $assert, array $server, array $get)
160 $arguments = (new App\Arguments())
161 ->determine($server, $get);
163 $this->assertArguments($assert, $arguments);
167 * Test if the get/has methods are working for the determined arguments
169 * @dataProvider dataArguments
171 public function testGetHas(array $assert, array $server, array $get)
173 $arguments = (new App\Arguments())
174 ->determine($server, $get);
176 for ($i = 0; $i < $arguments->getArgc(); $i++) {
177 $this->assertTrue($arguments->has($i));
178 $this->assertEquals($assert['argv'][$i], $arguments->get($i));
181 $this->assertFalse($arguments->has($arguments->getArgc()));
182 $this->assertEmpty($arguments->get($arguments->getArgc()));
183 $this->assertEquals('default', $arguments->get($arguments->getArgc(), 'default'));
186 public function dataStripped()
189 'strippedZRLFirst' => [
190 'assert' => '?arg1=value1',
191 'input' => '?zrl=nope&arg1=value1',
193 'strippedZRLLast' => [
194 'assert' => '?arg1=value1',
195 'input' => '?arg1=value1&zrl=nope',
197 'strippedZTLMiddle' => [
198 'assert' => '?arg1=value1&arg2=value2',
199 'input' => '?arg1=value1&zrl=nope&arg2=value2',
201 'strippedOWTFirst' => [
202 'assert' => '?arg1=value1',
203 'input' => '?owt=test&arg1=value1',
205 'strippedOWTLast' => [
206 'assert' => '?arg1=value1',
207 'input' => '?arg1=value1&owt=test',
209 'strippedOWTMiddle' => [
210 'assert' => '?arg1=value1&arg2=value2',
211 'input' => '?arg1=value1&owt=test&arg2=value2',
217 * Test the ZRL and OWT stripping
219 * @dataProvider dataStripped
221 public function testStrippedQueries(string $assert, string $input)
223 $command = 'test/it';
225 $arguments = (new App\Arguments())
226 ->determine(['QUERY_STRING' => 'q=' . $command . $input,], ['pagename' => $command]);
228 $this->assertEquals($command . $assert, $arguments->getQueryString());
232 * Test that arguments are immutable
234 public function testImmutable()
236 $argument = new App\Arguments();
238 $argNew = $argument->determine([], []);
240 $this->assertNotSame($argument, $argNew);