fix sunday being first day of week (#2483)
This commit is contained in:
@@ -21,13 +21,13 @@ class DateTimeFactoryTest extends TestCase
|
||||
{
|
||||
public const TEST_TIMEZONE = 'Europe/London';
|
||||
|
||||
protected function createDateTimeFactory(?string $timezone = null): DateTimeFactory
|
||||
protected function createDateTimeFactory(?string $timezone = null, bool $sunday = false): DateTimeFactory
|
||||
{
|
||||
if (null === $timezone) {
|
||||
return new DateTimeFactory();
|
||||
return new DateTimeFactory(null, $sunday);
|
||||
}
|
||||
|
||||
return new DateTimeFactory(new DateTimeZone($timezone));
|
||||
return new DateTimeFactory(new DateTimeZone($timezone), $sunday);
|
||||
}
|
||||
|
||||
public function testGetTimezone()
|
||||
@@ -72,19 +72,28 @@ class DateTimeFactoryTest extends TestCase
|
||||
$this->assertEquals(self::TEST_TIMEZONE, $dateTime->getTimezone()->getName());
|
||||
}
|
||||
|
||||
public function testGetStartOfWeek()
|
||||
public function getStartOfWeekData()
|
||||
{
|
||||
yield [$this->createDateTimeFactory(self::TEST_TIMEZONE), 'Monday', 23, 1];
|
||||
yield [$this->createDateTimeFactory(self::TEST_TIMEZONE, false), 'Monday', 23, 1];
|
||||
yield [$this->createDateTimeFactory(self::TEST_TIMEZONE, true), 'Sunday', 22, 7];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getStartOfWeekData
|
||||
*/
|
||||
public function testGetStartOfWeek(DateTimeFactory $sut, string $dayName, int $dayNum, int $day)
|
||||
{
|
||||
$expected = new DateTime('2018-07-26 16:47:31', new DateTimeZone(self::TEST_TIMEZONE));
|
||||
|
||||
$sut = $this->createDateTimeFactory(self::TEST_TIMEZONE);
|
||||
$dateTime = $sut->getStartOfWeek($expected);
|
||||
|
||||
$this->assertEquals(0, $dateTime->format('H'));
|
||||
$this->assertEquals(0, $dateTime->format('i'));
|
||||
$this->assertEquals(0, $dateTime->format('s'));
|
||||
$this->assertEquals(23, $dateTime->format('d'));
|
||||
$this->assertEquals(1, $dateTime->format('N'));
|
||||
$this->assertEquals('Monday', $dateTime->format('l'));
|
||||
$this->assertEquals($dayNum, $dateTime->format('d'));
|
||||
$this->assertEquals($day, $dateTime->format('N'));
|
||||
$this->assertEquals($dayName, $dateTime->format('l'));
|
||||
$this->assertEquals($expected->format('m'), $dateTime->format('m'));
|
||||
$this->assertEquals($expected->format('Y'), $dateTime->format('Y'));
|
||||
$this->assertEquals(self::TEST_TIMEZONE, $dateTime->getTimezone()->getName());
|
||||
@@ -94,25 +103,34 @@ class DateTimeFactoryTest extends TestCase
|
||||
$this->assertEquals(0, $dateTime->format('H'));
|
||||
$this->assertEquals(0, $dateTime->format('i'));
|
||||
$this->assertEquals(0, $dateTime->format('s'));
|
||||
$this->assertEquals(1, $dateTime->format('N'));
|
||||
$this->assertEquals('Monday', $dateTime->format('l'));
|
||||
$this->assertEquals($day, $dateTime->format('N'));
|
||||
$this->assertEquals($dayName, $dateTime->format('l'));
|
||||
// month and year can be different when the week started at the end of the month
|
||||
$this->assertEquals(self::TEST_TIMEZONE, $dateTime->getTimezone()->getName());
|
||||
}
|
||||
|
||||
public function testGetEndOfWeek()
|
||||
public function getEndOfWeekData()
|
||||
{
|
||||
yield [$this->createDateTimeFactory(self::TEST_TIMEZONE), 'Sunday', 29, 7];
|
||||
yield [$this->createDateTimeFactory(self::TEST_TIMEZONE, false), 'Sunday', 29, 7];
|
||||
yield [$this->createDateTimeFactory(self::TEST_TIMEZONE, true), 'Saturday', 28, 6];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getEndOfWeekData
|
||||
*/
|
||||
public function testGetEndOfWeek(DateTimeFactory $sut, string $dayName, int $dayNum, int $day)
|
||||
{
|
||||
$expected = new DateTime('2018-07-26 16:47:31', new DateTimeZone(self::TEST_TIMEZONE));
|
||||
|
||||
$sut = $this->createDateTimeFactory(self::TEST_TIMEZONE);
|
||||
$dateTime = $sut->getEndOfWeek($expected);
|
||||
|
||||
$this->assertEquals(23, $dateTime->format('H'));
|
||||
$this->assertEquals(59, $dateTime->format('i'));
|
||||
$this->assertEquals(59, $dateTime->format('s'));
|
||||
$this->assertEquals(29, $dateTime->format('d'));
|
||||
$this->assertEquals(7, $dateTime->format('N'));
|
||||
$this->assertEquals('Sunday', $dateTime->format('l'));
|
||||
$this->assertEquals($dayNum, $dateTime->format('d'));
|
||||
$this->assertEquals($day, $dateTime->format('N'));
|
||||
$this->assertEquals($dayName, $dateTime->format('l'));
|
||||
$this->assertEquals('07', $dateTime->format('m'));
|
||||
$this->assertEquals('2018', $dateTime->format('Y'));
|
||||
$this->assertEquals(self::TEST_TIMEZONE, $dateTime->getTimezone()->getName());
|
||||
@@ -122,8 +140,8 @@ class DateTimeFactoryTest extends TestCase
|
||||
$this->assertEquals(23, $dateTime->format('H'));
|
||||
$this->assertEquals(59, $dateTime->format('i'));
|
||||
$this->assertEquals(59, $dateTime->format('s'));
|
||||
$this->assertEquals(7, $dateTime->format('N'));
|
||||
$this->assertEquals('Sunday', $dateTime->format('l'));
|
||||
$this->assertEquals($day, $dateTime->format('N'));
|
||||
$this->assertEquals($dayName, $dateTime->format('l'));
|
||||
// month and year can be different when the week started at the end of the month
|
||||
$this->assertEquals(self::TEST_TIMEZONE, $dateTime->getTimezone()->getName());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user