Skip to content

Commit 822f6e9

Browse files
Use DatePoint for mocking purposes
1 parent bb37ed5 commit 822f6e9

3 files changed

Lines changed: 18 additions & 21 deletions

File tree

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@
2727
"require": {
2828
"php": "^8.2",
2929
"ext-intl": "*",
30-
"thecodingmachine/safe": "^1.3|^2.0"
30+
"thecodingmachine/safe": "^1.3|^2.0",
31+
"symfony/clock": "^7.3"
3132
},
3233
"config": {
3334
"allow-plugins": {

src/AbsoluteDate.php

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44

55
namespace AssoConnect\PHPDate;
66

7-
use AssoConnect\PHPDate\Exception\ParsingException;
7+
use Symfony\Component\Clock\DatePoint;
88

99
class AbsoluteDate implements \Stringable
1010
{
1111
public const DEFAULT_DATE_FORMAT = 'Y-m-d';
1212

13-
private \DateTimeImmutable $datetime;
13+
private DatePoint $datetime;
1414

1515
/**
1616
* AbsoluteDate constructor from a date as string
@@ -93,7 +93,7 @@ public function endsAt(\DateTimeZone $timezone): \DateTimeImmutable
9393

9494
private function getDateTimeFromFormatAndTimezone(string $format, \DateTimeZone $timezone): \DateTimeImmutable
9595
{
96-
return new \DateTimeImmutable($this->format($format), $timezone);
96+
return new DatePoint($this->format($format), $timezone);
9797
}
9898

9999
/**
@@ -180,8 +180,8 @@ public function __toString(): string
180180
*/
181181
public static function createInTimezone(\DateTimeZone $timezone, \DateTimeInterface $datetime = null): self
182182
{
183-
$datetime = new \DateTime('@' . (null === $datetime ? time() : $datetime->getTimestamp()));
184-
$datetime->setTimezone($timezone);
183+
$datetime = new DatePoint('@' . (null === $datetime ? time() : $datetime->getTimestamp()));
184+
$datetime = $datetime->setTimezone($timezone);
185185

186186
return new self($datetime->format(self::DEFAULT_DATE_FORMAT));
187187
}
@@ -198,7 +198,7 @@ public static function createRelative(string $relative = 'now', \DateTimeZone $t
198198
$timezone = new \DateTimeZone('UTC');
199199
}
200200

201-
$datetime = new \DateTime($relative, $timezone);
201+
$datetime = new DatePoint($relative, $timezone);
202202

203203
return self::createInTimezone($timezone, $datetime);
204204
}
@@ -209,11 +209,7 @@ private function initDatetime(string $date, string $format): void
209209
$format .= 'H:i:s';
210210
$date .= '00:00:00';
211211

212-
$datetime = \DateTimeImmutable::createFromFormat($format, $date, $timezone);
213-
214-
if (false === $datetime) {
215-
throw new ParsingException(sprintf('Cannot parse %s with format %s', $date, $format));
216-
}
212+
$datetime = DatePoint::createFromFormat($format, $date, $timezone);
217213

218214
$this->datetime = $datetime;
219215
}

tests/AbsoluteDateTest.php

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@
55
namespace AssoConnect\PHPDate\Tests;
66

77
use AssoConnect\PHPDate\AbsoluteDate;
8-
use AssoConnect\PHPDate\Exception\ParsingException;
8+
use DateMalformedStringException;
99
use PHPUnit\Framework\TestCase;
10+
use Symfony\Component\Clock\DatePoint;
1011

1112
class AbsoluteDateTest extends TestCase
1213
{
1314
public function testParsingException(): void
1415
{
15-
$this->expectException(ParsingException::class);
16+
$this->expectException(DateMalformedStringException::class);
1617
new AbsoluteDate('abc', 'def');
1718
}
1819

@@ -79,12 +80,11 @@ public function testWithPointInTime(): void
7980
$date = new AbsoluteDate('2020-01-02');
8081
self::assertSame('2020-01-02', $date->format());
8182

82-
$datetime = \DateTime::createFromFormat(
83+
$datetime = DatePoint::createFromFormat(
8384
'Y-m-d H:i:s',
8485
'2019-12-27 23:00:00',
8586
new \DateTimeZone('UTC')
8687
);
87-
self::assertNotFalse($datetime);
8888

8989
$date = AbsoluteDate::createInTimezone(new \DateTimeZone('UTC'), $datetime);
9090
self::assertSame('2019-12-27', $date->format());
@@ -98,13 +98,13 @@ public function testWithPointInTime(): void
9898

9999
public function testStartsAt(): void
100100
{
101-
$date1 = \DateTime::createFromFormat(
101+
$date1 = DatePoint::createFromFormat(
102102
'Y-m-d H:i:s',
103103
'2019-12-27 00:00:00',
104104
new \DateTimeZone('Europe/Paris')
105105
);
106106

107-
$date2 = \DateTime::createFromFormat(
107+
$date2 = DatePoint::createFromFormat(
108108
'Y-m-d H:i:s',
109109
'2019-12-27 00:00:00',
110110
new \DateTimeZone('America/Los_Angeles')
@@ -118,13 +118,13 @@ public function testStartsAt(): void
118118

119119
public function testEndsAt(): void
120120
{
121-
$date1 = \DateTime::createFromFormat(
121+
$date1 = DatePoint::createFromFormat(
122122
'Y-m-d H:i:s',
123123
'2019-12-27 23:59:59',
124124
new \DateTimeZone('Europe/Paris')
125125
);
126126

127-
$date2 = \DateTime::createFromFormat(
127+
$date2 = DatePoint::createFromFormat(
128128
'Y-m-d H:i:s',
129129
'2019-12-27 23:59:59',
130130
new \DateTimeZone('America/Los_Angeles')
@@ -142,7 +142,7 @@ public function testEndsAt(): void
142142
public function testCreateRelative(): void
143143
{
144144
$date = AbsoluteDate::createRelative('yesterday', $timezone = new \DateTimeZone('America/Los_Angeles'));
145-
$now = new \DateTimeImmutable('yesterday', $timezone);
145+
$now = new DatePoint('yesterday', $timezone);
146146
self::assertSame($now->format(AbsoluteDate::DEFAULT_DATE_FORMAT), $date->format());
147147
}
148148

0 commit comments

Comments
 (0)