Skip to content
Snippets Groups Projects
Commit cd51a9d0 authored by Jan-Hendrik Willms's avatar Jan-Hendrik Willms
Browse files

fixes #3895

Closes #3895

Merge request studip/studip!2750
parent cca50cff
Branches
No related tags found
No related merge requests found
...@@ -363,7 +363,7 @@ class Request implements ArrayAccess, IteratorAggregate ...@@ -363,7 +363,7 @@ class Request implements ArrayAccess, IteratorAggregate
//The second format and value is only added //The second format and value is only added
//when $second_param and $second_format are set //when $second_param and $second_format are set
//and a second value could be retrieved. //and a second value could be retrieved.
if ($second_param and $second_format) { if ($second_param && $second_format) {
$second_value = Request::get($second_param); $second_value = Request::get($second_param);
if ($second_value) { if ($second_value) {
$combined_format .= ' ' . $second_format; $combined_format .= ' ' . $second_format;
...@@ -379,11 +379,22 @@ class Request implements ArrayAccess, IteratorAggregate ...@@ -379,11 +379,22 @@ class Request implements ArrayAccess, IteratorAggregate
//Now we return a DateTime object created from the //Now we return a DateTime object created from the
//specified date value(s): //specified date value(s):
return DateTime::createFromFormat( $result = DateTime::createFromFormat(
$combined_format, $combined_format,
$combined_value, $combined_value,
$time_zone $time_zone
); );
if (
$result
&& !$second_param
&& !$second_format
&& !preg_match('/[aAghGHisvu]/', $format) // Ensure no time in format
) {
$result->setTime(0, 0);
}
return $result;
} }
......
...@@ -33,12 +33,20 @@ class RequestParametersTest extends Codeception\Test\Unit ...@@ -33,12 +33,20 @@ class RequestParametersTest extends Codeception\Test\Unit
$_GET['v3'] = ['root@studip', 'hotte.testfreund', 42, '!"$%&/()']; $_GET['v3'] = ['root@studip', 'hotte.testfreund', 42, '!"$%&/()'];
$_POST['v4'] = ['0', '1', '', 'foo']; $_POST['v4'] = ['0', '1', '', 'foo'];
$_GET['date'] = '2025-03-25';
$_GET['time'] = '17:39:04';
$_GET['datetime'] = '2025-03-25 17:39:04';
$_GET['invalid_date'] = 'foobar';
$testconfig = new Config([ $testconfig = new Config([
'USERNAME_REGULAR_EXPRESSION' => '/^([a-zA-Z0-9_@.-]{4,})$/', 'USERNAME_REGULAR_EXPRESSION' => '/^([a-zA-Z0-9_@.-]{4,})$/',
]); ]);
Config::set($testconfig); Config::set($testconfig);
} }
/**
* @covers Request::offsetGet
*/
public function testArrayAccess () public function testArrayAccess ()
{ {
$request = Request::getInstance(); $request = Request::getInstance();
...@@ -49,6 +57,9 @@ class RequestParametersTest extends Codeception\Test\Unit ...@@ -49,6 +57,9 @@ class RequestParametersTest extends Codeception\Test\Unit
$this->assertSame($request['c'], '-23'); $this->assertSame($request['c'], '-23');
} }
/**
* @covers Request::set
*/
public function testSetParam () public function testSetParam ()
{ {
Request::set('yyy', 'xyzzy'); Request::set('yyy', 'xyzzy');
...@@ -58,6 +69,10 @@ class RequestParametersTest extends Codeception\Test\Unit ...@@ -58,6 +69,10 @@ class RequestParametersTest extends Codeception\Test\Unit
$this->assertSame(Request::getArray('zzz'), [1, 2]); $this->assertSame(Request::getArray('zzz'), [1, 2]);
} }
/**
* @covers Request::get
* @covers Request::quoted
*/
public function testStringParam () public function testStringParam ()
{ {
$this->assertNull(Request::get('null')); $this->assertNull(Request::get('null'));
...@@ -74,6 +89,9 @@ class RequestParametersTest extends Codeception\Test\Unit ...@@ -74,6 +89,9 @@ class RequestParametersTest extends Codeception\Test\Unit
$this->assertNull(Request::quoted('v2')); $this->assertNull(Request::quoted('v2'));
} }
/**
* @covers Request::option
*/
public function testOptionParam () public function testOptionParam ()
{ {
$this->assertNull(Request::option('null')); $this->assertNull(Request::option('null'));
...@@ -82,6 +100,9 @@ class RequestParametersTest extends Codeception\Test\Unit ...@@ -82,6 +100,9 @@ class RequestParametersTest extends Codeception\Test\Unit
$this->assertNull(Request::option('v1')); $this->assertNull(Request::option('v1'));
} }
/**
* @covers Request::int
*/
public function testIntParam () public function testIntParam ()
{ {
$this->assertNull(Request::int('null')); $this->assertNull(Request::int('null'));
...@@ -92,6 +113,9 @@ class RequestParametersTest extends Codeception\Test\Unit ...@@ -92,6 +113,9 @@ class RequestParametersTest extends Codeception\Test\Unit
$this->assertNull(Request::int('v1')); $this->assertNull(Request::int('v1'));
} }
/**
* @covers Request::float
*/
public function testFloatParam () public function testFloatParam ()
{ {
$this->assertNull(Request::float('null')); $this->assertNull(Request::float('null'));
...@@ -102,6 +126,9 @@ class RequestParametersTest extends Codeception\Test\Unit ...@@ -102,6 +126,9 @@ class RequestParametersTest extends Codeception\Test\Unit
$this->assertNull(Request::float('v1')); $this->assertNull(Request::float('v1'));
} }
/**
* @covers Request::bool
*/
public function testBoolParam () public function testBoolParam ()
{ {
$this->assertNull(Request::bool('null')); $this->assertNull(Request::bool('null'));
...@@ -115,6 +142,9 @@ class RequestParametersTest extends Codeception\Test\Unit ...@@ -115,6 +142,9 @@ class RequestParametersTest extends Codeception\Test\Unit
$this->assertNull(Request::bool('v1')); $this->assertNull(Request::bool('v1'));
} }
/**
* @covers Request::username
*/
public function testUsernameParam () public function testUsernameParam ()
{ {
$this->assertNull(Request::username('null')); $this->assertNull(Request::username('null'));
...@@ -124,6 +154,10 @@ class RequestParametersTest extends Codeception\Test\Unit ...@@ -124,6 +154,10 @@ class RequestParametersTest extends Codeception\Test\Unit
$this->assertNull(Request::username('v1')); $this->assertNull(Request::username('v1'));
} }
/**
* @covers Request::getArray
* @covers Request::quotedArray
*/
public function testStringArrayParam () public function testStringArrayParam ()
{ {
$this->assertSame(Request::getArray('null'), []); $this->assertSame(Request::getArray('null'), []);
...@@ -137,6 +171,9 @@ class RequestParametersTest extends Codeception\Test\Unit ...@@ -137,6 +171,9 @@ class RequestParametersTest extends Codeception\Test\Unit
$this->assertSame(Request::quotedArray('v2'), ['on\\\'e', 'two', 'thr33']); $this->assertSame(Request::quotedArray('v2'), ['on\\\'e', 'two', 'thr33']);
} }
/**
* @covers Request::optionArray
*/
public function testOptionArrayParam () public function testOptionArrayParam ()
{ {
$this->assertSame(Request::optionArray('null'), []); $this->assertSame(Request::optionArray('null'), []);
...@@ -145,6 +182,9 @@ class RequestParametersTest extends Codeception\Test\Unit ...@@ -145,6 +182,9 @@ class RequestParametersTest extends Codeception\Test\Unit
$this->assertSame(Request::optionArray('v2'), [1 => 'two', 2 => 'thr33']); $this->assertSame(Request::optionArray('v2'), [1 => 'two', 2 => 'thr33']);
} }
/**
* @covers Request::intArray
*/
public function testIntArrayParam () public function testIntArrayParam ()
{ {
$this->assertSame(Request::intArray('null'), []); $this->assertSame(Request::intArray('null'), []);
...@@ -153,6 +193,9 @@ class RequestParametersTest extends Codeception\Test\Unit ...@@ -153,6 +193,9 @@ class RequestParametersTest extends Codeception\Test\Unit
$this->assertSame(Request::intArray('v2'), [0, 0, 0]); $this->assertSame(Request::intArray('v2'), [0, 0, 0]);
} }
/**
* @covers Request::floatArray
*/
public function testFloatArrayParam () public function testFloatArrayParam ()
{ {
$this->assertSame(Request::floatArray('null'), []); $this->assertSame(Request::floatArray('null'), []);
...@@ -161,6 +204,9 @@ class RequestParametersTest extends Codeception\Test\Unit ...@@ -161,6 +204,9 @@ class RequestParametersTest extends Codeception\Test\Unit
$this->assertSame(Request::floatArray('v2'), [0.0, 0.0, 0.0]); $this->assertSame(Request::floatArray('v2'), [0.0, 0.0, 0.0]);
} }
/**
* @covers Request::boolArray
*/
public function testBoolArrayParam () public function testBoolArrayParam ()
{ {
$this->assertSame(Request::boolArray('null'), []); $this->assertSame(Request::boolArray('null'), []);
...@@ -168,6 +214,9 @@ class RequestParametersTest extends Codeception\Test\Unit ...@@ -168,6 +214,9 @@ class RequestParametersTest extends Codeception\Test\Unit
$this->assertSame(Request::boolArray('v4'), [false, true, false, true]); $this->assertSame(Request::boolArray('v4'), [false, true, false, true]);
} }
/**
* @covers Request::usernameArray
*/
public function testUsernameArrayParam () public function testUsernameArrayParam ()
{ {
$this->assertSame(Request::usernameArray('null'), []); $this->assertSame(Request::usernameArray('null'), []);
...@@ -177,6 +226,9 @@ class RequestParametersTest extends Codeception\Test\Unit ...@@ -177,6 +226,9 @@ class RequestParametersTest extends Codeception\Test\Unit
$this->assertSame(Request::usernameArray('v3'), ['root@studip', 'hotte.testfreund']); $this->assertSame(Request::usernameArray('v3'), ['root@studip', 'hotte.testfreund']);
} }
/**
* @covers Request::submitted
*/
public function testSubmitted () public function testSubmitted ()
{ {
$this->assertFalse(Request::submitted('null')); $this->assertFalse(Request::submitted('null'));
...@@ -184,12 +236,54 @@ class RequestParametersTest extends Codeception\Test\Unit ...@@ -184,12 +236,54 @@ class RequestParametersTest extends Codeception\Test\Unit
$this->assertTrue(Request::submitted('v1')); $this->assertTrue(Request::submitted('v1'));
} }
/**
* @covers Request::submittedSome
*/
public function testSubmittedSome () public function testSubmittedSome ()
{ {
$this->assertFalse(Request::submittedSome('null', 'null')); $this->assertFalse(Request::submittedSome('null', 'null'));
$this->assertTrue(Request::submittedSome('null', 's', 'v')); $this->assertTrue(Request::submittedSome('null', 's', 'v'));
} }
/**
* @covers Request::getDateTime
*/
public function testGetDatetimeWithDate()
{
$date = Request::getDateTime();
$this->assertNotFalse($date);
$this->assertEquals('2025-03-25 00:00:00', $date->format('Y-m-d H:i:s'));
}
/**
* @covers Request::getDateTime
*/
public function testGetDatetimeWithDateAndTime()
{
$datetime = Request::getDateTime('datetime', 'Y-m-d H:i:s');
$this->assertNotFalse($datetime);
$this->assertEquals('2025-03-25 17:39:04', $datetime->format('Y-m-d H:i:s'));
}
/**
* @covers Request::getDateTime
*/
public function testGetDatetimeWithDateAndTimeInTwoParameters()
{
$date = Request::getDateTime('date', 'Y-m-d', 'time', 'H:i:s');
$this->assertNotFalse($date);
$this->assertEquals('2025-03-25 17:39:04', $date->format('Y-m-d H:i:s'));
}
/**
* @covers Request::getDateTime
*/
public function testGetDatetimeWithInvalidDate()
{
$invalid_date = Request::getDateTime('invalid_date');
$this->assertFalse($invalid_date);
}
public function tearDown(): void public function tearDown(): void
{ {
Config::set(null); Config::set(null);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment