Skip to content

Commit 2565ed7

Browse files
committed
FIX broker properties default timezone
1 parent 005fbc0 commit 2565ed7

4 files changed

Lines changed: 61 additions & 11 deletions

File tree

CHANGELOG.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
66

77
## [Unreleased]
88

9+
## [1.1.1] - 2022-02-15
10+
### Fixed
11+
- **AzureBrokerPropertiesStamp** **DateTime** properties timezones are now set to the current default timezone.
12+
913
## [1.1.0] - 2022-02-14
1014
### Added
1115
- **AzureMessageStamp** stamp for sent/received messages with *queue*/*topic* name, message, subscription name and delete location
@@ -17,7 +21,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1721
### Added
1822
- **Symfony Messenger** transport for **Azure Service Bus** *queues* and *topics*
1923

20-
[Unreleased]: https://github.com/AymDev/MessengerAzureBundle/compare/v1.1.0...HEAD
24+
[Unreleased]: https://github.com/AymDev/MessengerAzureBundle/compare/v1.1.1...HEAD
25+
[1.1.1]: https://github.com/AymDev/MessengerAzureBundle/releases/tag/v1.1.1
2126
[1.1.0]: https://github.com/AymDev/MessengerAzureBundle/releases/tag/v1.1.0
2227
[1.0.0]: https://github.com/AymDev/MessengerAzureBundle/releases/tag/v1.0.0
2328

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ framework:
5959
6060
## Stamps
6161
62-
This transport provides 2 stamps:
62+
This transport provides a few stamps:
6363
6464
### AzureMessageStamp
6565

src/Messenger/Stamp/AzureBrokerPropertiesStamp.php

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -129,28 +129,41 @@ public static function createFromResponse(ResponseInterface $response): self
129129
* } $properties
130130
*/
131131
$properties = json_decode($header, true);
132+
$defaultTimeZone = new \DateTimeZone(date_default_timezone_get());
133+
134+
$lockedUntilUtc = null;
135+
if (isset($properties['LockedUntilUtc'])) {
136+
$lockedUntilUtc = new \DateTimeImmutable($properties['LockedUntilUtc']);
137+
$lockedUntilUtc = $lockedUntilUtc->setTimezone($defaultTimeZone);
138+
}
139+
140+
$enqueuedTimeUtc = null;
141+
if (isset($properties['EnqueuedTimeUtc'])) {
142+
$enqueuedTimeUtc = new \DateTimeImmutable($properties['EnqueuedTimeUtc']);
143+
$enqueuedTimeUtc = $enqueuedTimeUtc->setTimezone($defaultTimeZone);
144+
}
145+
146+
$scheduledEnqueueTimeUtc = null;
147+
if (isset($properties['ScheduledEnqueueTimeUtc'])) {
148+
$scheduledEnqueueTimeUtc = new \DateTimeImmutable($properties['ScheduledEnqueueTimeUtc']);
149+
$scheduledEnqueueTimeUtc = $scheduledEnqueueTimeUtc->setTimezone($defaultTimeZone);
150+
}
132151

133152
return new self(
134153
$properties['ContentType'] ?? null,
135154
$properties['CorrelationId'] ?? null,
136155
$properties['SessionID'] ?? null,
137156
$properties['DeliveryCount'] ?? null,
138-
isset($properties['LockedUntilUtc'])
139-
? new \DateTimeImmutable($properties['LockedUntilUtc'])
140-
: null,
157+
$lockedUntilUtc,
141158
$properties['LockToken'] ?? null,
142159
$properties['MessageId'] ?? null,
143160
$properties['Label'] ?? null,
144161
$properties['ReplyTo'] ?? null,
145-
isset($properties['EnqueuedTimeUtc'])
146-
? new \DateTimeImmutable($properties['EnqueuedTimeUtc'])
147-
: null,
162+
$enqueuedTimeUtc,
148163
$properties['SequenceNumber'] ?? null,
149164
$properties['TimeToLive'] ?? null,
150165
$properties['To'] ?? null,
151-
isset($properties['ScheduledEnqueueTimeUtc'])
152-
? new \DateTimeImmutable($properties['ScheduledEnqueueTimeUtc'])
153-
: null,
166+
$scheduledEnqueueTimeUtc,
154167
$properties['ReplyToSessionId'] ?? null,
155168
$properties['PartitionKey'] ?? null
156169
);

tests/Messenger/Stamp/AzureBrokerPropertiesStampTest.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,38 @@ public function testCreateFromResponse(): void
161161
self::assertSame($partitionKey, $stamp->getPartitionKey());
162162
}
163163

164+
/**
165+
* The date objects must be set to the current timezone when created from a response
166+
*/
167+
public function testDateTimePropertiesAreSetToCurrentTimeZone(): void
168+
{
169+
// Expects a GMT+1
170+
$sourceTime = 'Sun, 06 Nov 1994 08:49:37 GMT';
171+
$expectedTime = '1994-11-06 09:49:37';
172+
date_default_timezone_set('Europe/Paris');
173+
174+
$httpClient = new MockHttpClient([
175+
new MockResponse('', [
176+
'response_headers' => [
177+
'BrokerProperties' => json_encode([
178+
'LockedUntilUtc' => $sourceTime,
179+
'EnqueuedTimeUtc' => $sourceTime,
180+
'ScheduledEnqueueTimeUtc' => $sourceTime,
181+
]),
182+
],
183+
])
184+
]);
185+
186+
$response = $httpClient->request('TEST', '/');
187+
$stamp = AzureBrokerPropertiesStamp::createFromResponse($response);
188+
self::assertInstanceOf(\DateTimeInterface::class, $stamp->getLockedUntilUtc());
189+
self::assertSame($expectedTime, $stamp->getLockedUntilUtc()->format('Y-m-d H:i:s'));
190+
self::assertInstanceOf(\DateTimeInterface::class, $stamp->getEnqueuedTimeUtc());
191+
self::assertSame($expectedTime, $stamp->getEnqueuedTimeUtc()->format('Y-m-d H:i:s'));
192+
self::assertInstanceOf(\DateTimeInterface::class, $stamp->getScheduledEnqueueTimeUtc());
193+
self::assertSame($expectedTime, $stamp->getScheduledEnqueueTimeUtc()->format('Y-m-d H:i:s'));
194+
}
195+
164196
/**
165197
* The encoding of the BrokerProperties must encode in JSON, remove null values and format datetimes
166198
*/

0 commit comments

Comments
 (0)