aboutsummaryrefslogtreecommitdiff
path: root/tests/unit/lib/classes/RequestTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit/lib/classes/RequestTest.php')
-rw-r--r--tests/unit/lib/classes/RequestTest.php309
1 files changed, 91 insertions, 218 deletions
diff --git a/tests/unit/lib/classes/RequestTest.php b/tests/unit/lib/classes/RequestTest.php
index f3afd7c..0035196 100644
--- a/tests/unit/lib/classes/RequestTest.php
+++ b/tests/unit/lib/classes/RequestTest.php
@@ -10,264 +10,137 @@
* the License, or (at your option) any later version.
*/
+/**
+ * @backupGlobals enabled
+ */
class RequestTest extends \Codeception\Test\Unit
{
- public function setUp (): void
- {
- $_GET['a'] = 'test';
- $_POST['b'] = '\\h1"';
- $_GET['c'] = '-23';
- $_POST['d'] = '12.7';
- $_GET['e'] = '3,14';
- $_POST['s_x'] = '0';
- $_GET['f'] = 'root@studip';
- $_POST['g'] = '1';
- $_GET['h'] = '';
-
- $_GET['v1'] = ['1', '2.4', '3,7'];
- $_POST['v2'] = ['on\'e', 'two', 'thr33'];
- $_GET['v3'] = ['root@studip', 'hotte.testfreund', 42, '!"$%&/()'];
- $_POST['v4'] = ['0', '1', '', 'foo'];
-
- $testconfig = new Config([
- 'USERNAME_REGULAR_EXPRESSION' => '/^([a-zA-Z0-9_@.-]{4,})$/',
- ]);
- Config::set($testconfig);
- }
-
- public function testURL ()
- {
- $_SERVER['HTTPS'] = 'on';
- $_SERVER['SERVER_NAME'] = 'www.example.com';
- $_SERVER['SERVER_PORT'] = '443';
- $_SERVER['REQUEST_URI'] = '/do/it?now=1';
-
- $this->assertEquals('https://www.example.com/do/it?now=1', Request::url());
-
- $_SERVER['HTTPS'] = '';
- $_SERVER['SERVER_NAME'] = 'www.example.com';
- $_SERVER['SERVER_PORT'] = '8080';
- $_SERVER['REQUEST_URI'] = '/index.php';
-
- $this->assertEquals('http://www.example.com:8080/index.php', Request::url());
- }
-
- public function testArrayAccess ()
- {
- $request = Request::getInstance();
-
- $this->assertNull($request['null']);
- $this->assertSame($request['a'], 'test');
- $this->assertSame($request['b'], '\\h1"');
- $this->assertSame($request['c'], '-23');
- }
-
- public function testSetParam ()
- {
- Request::set('yyy', 'xyzzy');
- Request::set('zzz', [1, 2]);
-
- $this->assertSame(Request::get('yyy'), 'xyzzy');
- $this->assertSame(Request::getArray('zzz'), [1, 2]);
- }
-
- public function testStringParam ()
- {
- $this->assertNull(Request::get('null'));
- $this->assertSame(Request::get('null', 'foo'), 'foo');
- $this->assertSame(Request::get('a'), 'test');
- $this->assertSame(Request::get('b'), '\\h1"');
- $this->assertSame(Request::get('c'), '-23');
- $this->assertSame(Request::get('d'), '12.7');
- $this->assertNull(Request::get('v2'));
-
- $this->assertNull(Request::quoted('null'));
- $this->assertSame(Request::quoted('null', 'foo'), 'foo');
- $this->assertSame(Request::quoted('b'), '\\\\h1\\"');
- $this->assertNull(Request::quoted('v2'));
- }
-
- public function testOptionParam ()
- {
- $this->assertNull(Request::option('null'));
- $this->assertSame(Request::option('a'), 'test');
- $this->assertNull(Request::option('b'));
- $this->assertNull(Request::option('v1'));
- }
-
- public function testIntParam ()
- {
- $this->assertNull(Request::int('null'));
- $this->assertSame(Request::int('a'), 0);
- $this->assertSame(Request::int('c'), -23);
- $this->assertSame(Request::int('d'), 12);
- $this->assertSame(Request::int('e'), 3);
- $this->assertNull(Request::int('v1'));
- }
-
- public function testFloatParam ()
- {
- $this->assertNull(Request::float('null'));
- $this->assertSame(Request::float('a'), 0.0);
- $this->assertSame(Request::float('c'), -23.0);
- $this->assertSame(Request::float('d'), 12.7);
- $this->assertSame(Request::float('e'), 3.14);
- $this->assertNull(Request::float('v1'));
- }
-
- public function testBoolParam ()
- {
- $this->assertNull(Request::bool('null'));
- $this->assertTrue(Request::bool('a'));
- $this->assertTrue(Request::bool('c'));
- $this->assertTrue(Request::bool('d'));
- $this->assertTrue(Request::bool('e'));
- $this->assertTrue(Request::bool('g'));
- $this->assertFalse(Request::bool('h'));
- $this->assertFalse(Request::bool('s_x'));
- $this->assertNull(Request::bool('v1'));
- }
-
- public function testUsernameParam ()
- {
- $this->assertNull(Request::username('null'));
- $this->assertSame(Request::username('a'), 'test');
- $this->assertSame(Request::username('f'), 'root@studip');
- $this->assertNull(Request::username('b'));
- $this->assertNull(Request::username('v1'));
- }
-
- public function testStringArrayParam ()
+ public function setUp(): void
{
- $this->assertSame(Request::getArray('null'), []);
- $this->assertSame(Request::getArray('b'), []);
- $this->assertSame(Request::getArray('v1'), ['1', '2.4', '3,7']);
- $this->assertSame(Request::getArray('v2'), ['on\'e', 'two', 'thr33']);
-
- $this->assertSame(Request::quotedArray('null'), []);
- $this->assertSame(Request::quotedArray('b'), []);
- $this->assertSame(Request::quotedArray('v1'), ['1', '2.4', '3,7']);
- $this->assertSame(Request::quotedArray('v2'), ['on\\\'e', 'two', 'thr33']);
+ unset($_SERVER['HTTPS']);
+ unset($_SERVER['HTTP_X_FORWARDED_PROTO']);
+ unset($_SERVER['REQUEST_URI']);
+ unset($_SERVER['SCRIPT_NAME']);
+ unset($_SERVER['SERVER_NAME']);
+ unset($_SERVER['SERVER_PORT']);
}
- public function testOptionArrayParam ()
+ protected function setScriptName(string $script_name): void
{
- $this->assertSame(Request::optionArray('null'), []);
- $this->assertSame(Request::optionArray('a'), []);
- $this->assertSame(Request::optionArray('v1'), ['1']);
- $this->assertSame(Request::optionArray('v2'), [1 => 'two', 2 => 'thr33']);
+ $_SERVER['SCRIPT_NAME'] = $script_name;
}
- public function testIntArrayParam ()
+ protected function setRequestUri(string $request_uri): void
{
- $this->assertSame(Request::intArray('null'), []);
- $this->assertSame(Request::intArray('c'), []);
- $this->assertSame(Request::intArray('v1'), [1, 2, 3]);
- $this->assertSame(Request::intArray('v2'), [0, 0, 0]);
+ $_SERVER['REQUEST_URI'] = $request_uri;
}
- public function testFloatArrayParam ()
+ protected function setServerNameAndPort(string $name, int $port, bool $ssl = false): void
{
- $this->assertSame(Request::floatArray('null'), []);
- $this->assertSame(Request::floatArray('c'), []);
- $this->assertSame(Request::floatArray('v1'), [1.0, 2.4, 3.7]);
- $this->assertSame(Request::floatArray('v2'), [0.0, 0.0, 0.0]);
+ $_SERVER['SERVER_NAME'] = $name;
+ $_SERVER['SERVER_PORT'] = $port;
+ $_SERVER['HTTPS'] = $ssl ? 'on' : 'off';
}
- public function testBoolArrayParam ()
+ /**
+ * @covers Request::protocol
+ */
+ public function testProtocol(): void
{
- $this->assertSame(Request::boolArray('null'), []);
- $this->assertSame(Request::boolArray('c'), []);
- $this->assertSame(Request::boolArray('v4'), [false, true, false, true]);
- }
+ $this->assertEquals('http', Request::protocol());
- public function testUsernameArrayParam ()
- {
- $this->assertSame(Request::usernameArray('null'), []);
- $this->assertSame(Request::usernameArray('a'), []);
- $this->assertSame(Request::usernameArray('v1'), []);
- $this->assertSame(Request::usernameArray('v2'), [2 => 'thr33']);
- $this->assertSame(Request::usernameArray('v3'), ['root@studip', 'hotte.testfreund']);
- }
+ $_SERVER['HTTPS'] = 'on';
+ $this->assertEquals('https', Request::protocol());
- public function testSubmitted ()
- {
- $this->assertFalse(Request::submitted('null'));
- $this->assertTrue(Request::submitted('s'));
- $this->assertTrue(Request::submitted('v1'));
+ $_SERVER['HTTP_X_FORWARDED_PROTO'] = 'foo';
+ $this->assertEquals('foo', Request::protocol());
}
- public function testSubmittedSome ()
+ /**
+ * @covers Request::server
+ */
+ public function testServer(): void
{
- $this->assertFalse(Request::submittedSome('null', 'null'));
- $this->assertTrue(Request::submittedSome('null', 's', 'v'));
- }
+ // Usual ports for http and https
+ $this->setServerNameAndPort('www.studip.de', 80);
+ $this->assertEquals('www.studip.de', Request::server());
- public function tearDown(): void
- {
- Config::set(null);
- }
-}
+ $this->setServerNameAndPort('www.studip.de', 443, true);
+ $this->assertEquals('www.studip.de', Request::server());
-class RequestMethodTest extends \Codeception\Test\Unit
-{
- public function setUp (): void
- {
- unset($_SERVER['REQUEST_METHOD']);
- unset($_SERVER['HTTP_X_REQUESTED_WITH']);
- }
+ // Unusual ports for http and https
+ $this->setServerNameAndPort('www.studip.de', 80, true);
+ $this->assertEquals('www.studip.de:80', Request::server());
- protected function setRequestMethod($method)
- {
- $_SERVER['REQUEST_METHOD'] = (string) $method;
- }
+ $this->setServerNameAndPort('www.studip.de', 443, false);
+ $this->assertEquals('www.studip.de:443', Request::server());
- public function testMethod()
- {
- $this->setRequestMethod('GET');
- $this->assertEquals('GET', Request::method());
- }
+ // Other tests
+ $this->setServerNameAndPort('www.studip.de', 8088);
+ $this->assertEquals('www.studip.de:8088', Request::server());
- public function testMethodUppercases()
- {
- $this->setRequestMethod('gEt');
- $this->assertEquals('GET', Request::method());
+ $this->setServerNameAndPort('www.studip.de', 8088, true);
+ $this->assertEquals('www.studip.de:8088', Request::server());
}
- public function testRequestMethodGet()
+ /**
+ * @covers Request::path()
+ */
+ public function testPath(): void
{
- $this->setRequestMethod('GET');
- $this->assertTrue(Request::isGet());
+ $this->setRequestUri('/foo');
+ $this->assertEquals('/foo', Request::path());
}
- public function testRequestMethodPost()
+ /**
+ * @depends testProtocol
+ * @depends testServer
+ * @depends testPath
+ * @covers Request::url
+ */
+ public function testURL(): void
{
- $this->setRequestMethod('POST');
- $this->assertTrue(Request::isPost());
- }
+ $this->setServerNameAndPort('www.example.com', 443, true);
+ $this->setRequestUri('/do/it?now=1');
+ $this->assertEquals('https://www.example.com/do/it?now=1', Request::url());
- public function testRequestMethodPut()
- {
- $this->setRequestMethod('PUT');
- $this->assertTrue(Request::isPut());
+ $this->setServerNameAndPort('www.example.com', 8080);
+ $this->setRequestUri('/index.php');
+ $this->assertEquals('http://www.example.com:8080/index.php', Request::url());
}
- public function testRequestMethodDelete()
+ public function testScriptName(): void
{
- $this->setRequestMethod('DELETE');
- $this->assertTrue(Request::isDelete());
+ $this->setScriptName('/index.php');
+ $this->assertEquals('/index.php', Request::script_name());
}
- public function testIsNotXhr()
+ /**
+ * @depends testPath
+ * @depends testScriptName
+ * @covers Request::path_info
+ * @dataProvider PathProvider
+ */
+ public function testPathInfo(string $request_uri, string $script_name, string $expected): void
{
- $this->assertFalse(Request::isXhr());
- $this->assertFalse(Request::isAjax());
+ $this->setScriptName($script_name);
+ $this->setRequestUri($request_uri);
+ $this->assertEquals($expected, Request::path_info());
}
- public function testIsXhr()
+ /**
+ * Data provider for testGetCompletePathInfo
+ *
+ * @return array[]
+ * @see RequestTest::testPathInfo
+ */
+ public function PathProvider(): array
{
- $_SERVER['HTTP_X_REQUESTED_WITH'] = 'XmlHttpRequest';
- $this->assertTrue(Request::isAjax());
- $this->assertTrue(Request::isXhr());
+ return [
+ 'Regular' => ['/studip/dispatch.php/start', '/studip/dispatch.php', '/start'],
+ 'With duplicate slash' => ['/plugins.php/foo/bar//42', '/plugins.php', '/foo/bar//42'],
+ 'With duplicate slashes' => ['/bogus.php/1/2//4///7///', '/bogus.php', '/1/2//4///7///'],
+ 'Encoded' => ['/dispatch.php/%62lu%62%62er', '/dispatch.php', '/blubber'],
+ ];
}
}