diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/unit/lib/FunctionsTest.php | 14 | ||||
| -rw-r--r-- | tests/unit/lib/classes/RequestMethodTest.php | 66 | ||||
| -rw-r--r-- | tests/unit/lib/classes/RequestParametersTest.php | 197 | ||||
| -rw-r--r-- | tests/unit/lib/classes/RequestTest.php | 309 |
4 files changed, 368 insertions, 218 deletions
diff --git a/tests/unit/lib/FunctionsTest.php b/tests/unit/lib/FunctionsTest.php index b7d2498..9a92f1a 100644 --- a/tests/unit/lib/FunctionsTest.php +++ b/tests/unit/lib/FunctionsTest.php @@ -73,4 +73,18 @@ class FunctionsTest extends \Codeception\Test\Unit $output = 'https://m%C3%A4uschen-h%C3%BCpft.de/%C3%B6ffnungszeiten?menu=Spa%C3%9F&page=23'; $this->assertEquals($output, encodeURI($input)); } + + /** + * @covers Trails_Controller::extract_action_and_args() + */ + public function testTrailsControllerExtractActionAndArgs() + { + $controller = new Trails_Controller(null); + list($action, $args, $format) = $controller->extract_action_and_args('foo/bar//42.html'); + + $this->assertEquals('foo', $action); + $this->assertEquals(['bar', '', '42'], $args); + $this->assertEquals('html', $format); + + } } diff --git a/tests/unit/lib/classes/RequestMethodTest.php b/tests/unit/lib/classes/RequestMethodTest.php new file mode 100644 index 0000000..6467015 --- /dev/null +++ b/tests/unit/lib/classes/RequestMethodTest.php @@ -0,0 +1,66 @@ +<?php +/** + * @backupGlobals enabled + */ +class RequestMethodTest extends \Codeception\Test\Unit +{ + public function setUp(): void + { + unset($_SERVER['REQUEST_METHOD']); + unset($_SERVER['HTTP_X_REQUESTED_WITH']); + } + + protected function setRequestMethod($method) + { + $_SERVER['REQUEST_METHOD'] = (string)$method; + } + + public function testMethod() + { + $this->setRequestMethod('GET'); + $this->assertEquals('GET', Request::method()); + } + + public function testMethodUppercases() + { + $this->setRequestMethod('gEt'); + $this->assertEquals('GET', Request::method()); + } + + public function testRequestMethodGet() + { + $this->setRequestMethod('GET'); + $this->assertTrue(Request::isGet()); + } + + public function testRequestMethodPost() + { + $this->setRequestMethod('POST'); + $this->assertTrue(Request::isPost()); + } + + public function testRequestMethodPut() + { + $this->setRequestMethod('PUT'); + $this->assertTrue(Request::isPut()); + } + + public function testRequestMethodDelete() + { + $this->setRequestMethod('DELETE'); + $this->assertTrue(Request::isDelete()); + } + + public function testIsNotXhr() + { + $this->assertFalse(Request::isXhr()); + $this->assertFalse(Request::isAjax()); + } + + public function testIsXhr() + { + $_SERVER['HTTP_X_REQUESTED_WITH'] = 'XmlHttpRequest'; + $this->assertTrue(Request::isAjax()); + $this->assertTrue(Request::isXhr()); + } +} diff --git a/tests/unit/lib/classes/RequestParametersTest.php b/tests/unit/lib/classes/RequestParametersTest.php new file mode 100644 index 0000000..85194c4 --- /dev/null +++ b/tests/unit/lib/classes/RequestParametersTest.php @@ -0,0 +1,197 @@ +<?php +/* + * RequestParametersTest.php - unit tests for the Request class handling of + * parameters. + * + * Copyright (c) 2009 Elmar Ludwig + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + */ + +/** + * @backupGlobals enabled + */ +class RequestParametersTest 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 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 () + { + $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']); + } + + public function testOptionArrayParam () + { + $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']); + } + + public function testIntArrayParam () + { + $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]); + } + + public function testFloatArrayParam () + { + $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]); + } + + public function testBoolArrayParam () + { + $this->assertSame(Request::boolArray('null'), []); + $this->assertSame(Request::boolArray('c'), []); + $this->assertSame(Request::boolArray('v4'), [false, true, false, true]); + } + + 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']); + } + + public function testSubmitted () + { + $this->assertFalse(Request::submitted('null')); + $this->assertTrue(Request::submitted('s')); + $this->assertTrue(Request::submitted('v1')); + } + + public function testSubmittedSome () + { + $this->assertFalse(Request::submittedSome('null', 'null')); + $this->assertTrue(Request::submittedSome('null', 's', 'v')); + } + + public function tearDown(): void + { + Config::set(null); + } +} 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'], + ]; } } |
