MDL-85563 phpunit: Clock API should always use Moodle system time
When using `clock::now()` the frozen cloxk and incrementing clock will now always return a `DateTimeImmutable` that uses the configured Moodle system time. In unit tests this will be Australia/Perth. Before this change, it would sometimes be UCT.
This commit is contained in:
@@ -781,6 +781,7 @@ final class advanced_test extends \advanced_testcase {
|
||||
$this->assertEquals(0, $mockedclock->now()->getTimestamp());
|
||||
$this->assertEquals(1, $newclock->now()->getTimestamp());
|
||||
$this->assertEquals(2, $mockedclock->now()->getTimestamp());
|
||||
$this->assertEquals('Australia/Perth', $newclock->now()->getTimezone()->getName());
|
||||
|
||||
// Specify a specific start time.
|
||||
$newclock = $this->mock_clock_with_incrementing(12345);
|
||||
@@ -792,6 +793,7 @@ final class advanced_test extends \advanced_testcase {
|
||||
$this->assertEquals(12347, $mockedclock->now()->getTimestamp());
|
||||
|
||||
$this->assertEquals($newclock->time, $mockedclock->now()->getTimestamp());
|
||||
$this->assertEquals('Australia/Perth', $newclock->now()->getTimezone()->getName());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -814,6 +816,7 @@ final class advanced_test extends \advanced_testcase {
|
||||
$initialtime = $mockedclock->now()->getTimestamp();
|
||||
$this->assertEquals($initialtime, $newclock->now()->getTimestamp());
|
||||
$this->assertEquals($initialtime, $mockedclock->now()->getTimestamp());
|
||||
$this->assertEquals('Australia/Perth', $newclock->now()->getTimezone()->getName());
|
||||
|
||||
// Specify a specific start time.
|
||||
$newclock = $this->mock_clock_with_frozen(12345);
|
||||
@@ -824,5 +827,6 @@ final class advanced_test extends \advanced_testcase {
|
||||
$this->assertEquals($initialtime, $mockedclock->now());
|
||||
$this->assertEquals($initialtime, $newclock->now());
|
||||
$this->assertEquals($initialtime, $mockedclock->now());
|
||||
$this->assertEquals('Australia/Perth', $newclock->now()->getTimezone()->getName());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ class frozen_clock implements \core\clock {
|
||||
$this->time = (new \DateTimeImmutable("@{$time}"))
|
||||
->setTimezone(\core_date::get_server_timezone_object());
|
||||
} else {
|
||||
$this->time = new \DateTimeImmutable();
|
||||
$this->time = (new \DateTimeImmutable())->setTimezone(\core_date::get_server_timezone_object());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -26,6 +26,9 @@ class incrementing_clock implements \core\clock {
|
||||
/** @var int The next time of the clock */
|
||||
public int $time;
|
||||
|
||||
/** @var DateTimeZone The system timezone. */
|
||||
protected DateTimeZone $timezone;
|
||||
|
||||
/**
|
||||
* Create a new instance of the incrementing clock.
|
||||
*
|
||||
@@ -35,10 +38,11 @@ class incrementing_clock implements \core\clock {
|
||||
?int $starttime = null,
|
||||
) {
|
||||
$this->time = $starttime ?? time();
|
||||
$this->timezone = \core_date::get_server_timezone_object();
|
||||
}
|
||||
|
||||
public function now(): \DateTimeImmutable {
|
||||
return new \DateTimeImmutable('@' . $this->time++);
|
||||
return (new \DateTimeImmutable('@' . $this->time++))->setTimezone($this->timezone);
|
||||
}
|
||||
|
||||
public function time(): int {
|
||||
|
||||
Reference in New Issue
Block a user