Skip to content

Commit cc2f5ce

Browse files
Add a test for timestamps
1 parent c7aaa56 commit cc2f5ce

2 files changed

Lines changed: 33 additions & 11 deletions

File tree

tests/Monolog/BreadcrumbHandlerTest.php

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ public function testHandle($record, Breadcrumb $expectedBreadcrumb): void
2121
$hub = $this->createMock(HubInterface::class);
2222
$hub->expects($this->once())
2323
->method('addBreadcrumb')
24-
->with($this->callback(function (Breadcrumb $breadcrumb) use ($expectedBreadcrumb, $record): bool {
24+
->with($this->callback(function (Breadcrumb $breadcrumb) use ($expectedBreadcrumb): bool {
2525
$this->assertSame($expectedBreadcrumb->getMessage(), $breadcrumb->getMessage());
2626
$this->assertSame($expectedBreadcrumb->getLevel(), $breadcrumb->getLevel());
2727
$this->assertSame($expectedBreadcrumb->getType(), $breadcrumb->getType());
28-
$this->assertEquals((float) $record['datetime']->format('U.u'), $breadcrumb->getTimestamp());
28+
$this->assertEquals($expectedBreadcrumb->getTimestamp(), $breadcrumb->getTimestamp());
2929
$this->assertSame($expectedBreadcrumb->getCategory(), $breadcrumb->getCategory());
3030
$this->assertEquals($expectedBreadcrumb->getMetadata(), $breadcrumb->getMetadata());
3131

@@ -41,12 +41,15 @@ public function testHandle($record, Breadcrumb $expectedBreadcrumb): void
4141
*/
4242
public static function handleDataProvider(): iterable
4343
{
44+
$now = new \DateTimeImmutable();
45+
4446
$defaultBreadcrumb = new Breadcrumb(
4547
Breadcrumb::LEVEL_DEBUG,
4648
Breadcrumb::TYPE_DEFAULT,
4749
'channel.foo',
4850
'foo bar',
49-
[]
51+
[],
52+
(float) $now->format('U.u')
5053
);
5154

5255
$levelsToBeTested = [
@@ -58,31 +61,46 @@ public static function handleDataProvider(): iterable
5861

5962
foreach ($levelsToBeTested as $loggerLevel => $breadcrumbLevel) {
6063
yield 'with level ' . Logger::getLevelName($loggerLevel) => [
61-
RecordFactory::create('foo bar', $loggerLevel, 'channel.foo', [], []),
64+
RecordFactory::create('foo bar', $loggerLevel, 'channel.foo', [], [], $now),
6265
$defaultBreadcrumb->withLevel($breadcrumbLevel),
6366
];
6467
}
6568

6669
yield 'with level ERROR' => [
67-
RecordFactory::create('foo bar', Logger::ERROR, 'channel.foo', [], []),
70+
RecordFactory::create('foo bar', Logger::ERROR, 'channel.foo', [], [], $now),
6871
$defaultBreadcrumb->withLevel(Breadcrumb::LEVEL_ERROR)
6972
->withType(Breadcrumb::TYPE_ERROR),
7073
];
7174

7275
yield 'with level ALERT' => [
73-
RecordFactory::create('foo bar', Logger::ALERT, 'channel.foo', [], []),
76+
RecordFactory::create('foo bar', Logger::ALERT, 'channel.foo', [], [], $now),
7477
$defaultBreadcrumb->withLevel(Breadcrumb::LEVEL_FATAL)
7578
->withType(Breadcrumb::TYPE_ERROR),
7679
];
7780

7881
yield 'with context' => [
79-
RecordFactory::create('foo bar', Logger::DEBUG, 'channel.foo', ['context' => ['foo' => 'bar']], []),
82+
RecordFactory::create('foo bar', Logger::DEBUG, 'channel.foo', ['context' => ['foo' => 'bar']], [], $now),
8083
$defaultBreadcrumb->withMetadata('context', ['foo' => 'bar']),
8184
];
8285

8386
yield 'with extra' => [
84-
RecordFactory::create('foo bar', Logger::DEBUG, 'channel.foo', [], ['extra' => ['foo' => 'bar']]),
87+
RecordFactory::create('foo bar', Logger::DEBUG, 'channel.foo', [], ['extra' => ['foo' => 'bar']], $now),
8588
$defaultBreadcrumb->withMetadata('extra', ['foo' => 'bar']),
8689
];
90+
91+
yield 'with timestamp' => [
92+
RecordFactory::create('foo bar', Logger::DEBUG, 'channel.foo', [], [], new \DateTimeImmutable('1970-01-01 00:00:42.1337 UTC')),
93+
$defaultBreadcrumb->withTimestamp(42.1337),
94+
];
95+
96+
yield 'with zero timestamp' => [
97+
RecordFactory::create('foo bar', Logger::DEBUG, 'channel.foo', [], [], new \DateTimeImmutable('1970-01-01 00:00:00.000 UTC')),
98+
$defaultBreadcrumb->withTimestamp(0.0),
99+
];
100+
101+
yield 'with negative timestamp' => [
102+
RecordFactory::create('foo bar', Logger::DEBUG, 'channel.foo', [], [], new \DateTimeImmutable('1969-12-31 23:59:56.859 UTC')),
103+
$defaultBreadcrumb->withTimestamp(-3.141),
104+
];
87105
}
88106
}

tests/Monolog/RecordFactory.php

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,15 @@ final class RecordFactory
1919
*
2020
* @return array<string, mixed>|LogRecord
2121
*/
22-
public static function create(string $message, int $level, string $channel, array $context = [], array $extra = [])
22+
public static function create(string $message, int $level, string $channel, array $context = [], array $extra = [], ?\DateTimeImmutable $datetime = null)
2323
{
24+
if ($datetime === null) {
25+
$datetime = new \DateTimeImmutable();
26+
}
27+
2428
if (Logger::API >= 3) {
2529
return new LogRecord(
26-
new \DateTimeImmutable(),
30+
$datetime,
2731
$channel,
2832
Logger::toMonologLevel($level),
2933
$message,
@@ -39,7 +43,7 @@ public static function create(string $message, int $level, string $channel, arra
3943
'level_name' => Logger::getLevelName($level),
4044
'channel' => $channel,
4145
'extra' => $extra,
42-
'datetime' => new \DateTimeImmutable(),
46+
'datetime' => $datetime,
4347
];
4448
}
4549
}

0 commit comments

Comments
 (0)