From 6271be94bfcc3d74dd0a7e039a13375cb4e04eb1 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Tue, 21 Apr 2020 08:45:37 +0200 Subject: [PATCH 1/3] [#35368] add missing changelog entry --- UPGRADE-6.0.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/UPGRADE-6.0.md b/UPGRADE-6.0.md index b79d74ee25097..c92e3a6312e4e 100644 --- a/UPGRADE-6.0.md +++ b/UPGRADE-6.0.md @@ -98,3 +98,8 @@ Security * Removed `ROLE_PREVIOUS_ADMIN` role in favor of `IS_IMPERSONATOR` attribute * Removed `LogoutSuccessHandlerInterface` and `LogoutHandlerInterface`, register a listener on the `LogoutEvent` event instead. * Removed `DefaultLogoutSuccessHandler` in favor of `DefaultLogoutListener`. + +Yaml +---- + + * Removed support for using the `!php/object` and `!php/const` tags without a value. From 0ef17be67071187bcc9b723175bd62527b26077e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20del=20Olmo=20Garc=C3=ADa?= Date: Tue, 21 Apr 2020 11:39:04 +0200 Subject: [PATCH 2/3] Add an AvailableAtStamp to delay messages until a fixed date and time is reached --- .../Middleware/AvailableAtStampMiddleware.php | 38 ++++++++++++ .../Messenger/Stamp/AvailableAtStamp.php | 38 ++++++++++++ .../AvailableAtStampMiddlewareTest.php | 58 +++++++++++++++++++ .../Tests/Stamp/AvailableAtStampTest.php | 28 +++++++++ 4 files changed, 162 insertions(+) create mode 100644 src/Symfony/Component/Messenger/Middleware/AvailableAtStampMiddleware.php create mode 100644 src/Symfony/Component/Messenger/Stamp/AvailableAtStamp.php create mode 100644 src/Symfony/Component/Messenger/Tests/Middleware/AvailableAtStampMiddlewareTest.php create mode 100644 src/Symfony/Component/Messenger/Tests/Stamp/AvailableAtStampTest.php diff --git a/src/Symfony/Component/Messenger/Middleware/AvailableAtStampMiddleware.php b/src/Symfony/Component/Messenger/Middleware/AvailableAtStampMiddleware.php new file mode 100644 index 0000000000000..fc6f004f0fb52 --- /dev/null +++ b/src/Symfony/Component/Messenger/Middleware/AvailableAtStampMiddleware.php @@ -0,0 +1,38 @@ + + */ +class AvailableAtStampMiddleware implements MiddlewareInterface +{ + /** + * {@inheritdoc} + */ + public function handle(Envelope $envelope, StackInterface $stack): Envelope + { + $availableAtStamp = $envelope->last(AvailableAtStamp::class); + + if (null !== $availableAtStamp) { + $availableAt = $availableAtStamp->getAvailableAt(); + $now = new DateTime(); + + $delay = $availableAt->getTimestamp() - $now->getTimestamp(); + + $envelope = $envelope->with( + new DelayStamp($delay * 1000) + ); + } + + return $stack->next()->handle($envelope, $stack); + } +} diff --git a/src/Symfony/Component/Messenger/Stamp/AvailableAtStamp.php b/src/Symfony/Component/Messenger/Stamp/AvailableAtStamp.php new file mode 100644 index 0000000000000..a96e9d2eac32a --- /dev/null +++ b/src/Symfony/Component/Messenger/Stamp/AvailableAtStamp.php @@ -0,0 +1,38 @@ + + */ +class AvailableAtStamp implements StampInterface +{ + /** + * @var \DateTime + */ + protected $availableAt; + + /** + * + * @param \DateTime $availableAt + */ + public function __construct(DateTime $availableAt) + { + $this->availableAt = $availableAt; + } + + /** + * The date and time on which the message will be available + * + * @return \DateTime + */ + public function getAvailableAt(): DateTime + { + return $this->availableAt; + } +} diff --git a/src/Symfony/Component/Messenger/Tests/Middleware/AvailableAtStampMiddlewareTest.php b/src/Symfony/Component/Messenger/Tests/Middleware/AvailableAtStampMiddlewareTest.php new file mode 100644 index 0000000000000..f05c777b147e7 --- /dev/null +++ b/src/Symfony/Component/Messenger/Tests/Middleware/AvailableAtStampMiddlewareTest.php @@ -0,0 +1,58 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Messenger\Tests\Middleware; + +use DateTime; +use Symfony\Component\Messenger\Envelope; +use Symfony\Component\Messenger\Middleware\AvailableAtStampMiddleware; +use Symfony\Component\Messenger\Stamp\AvailableAtStamp; +use Symfony\Component\Messenger\Stamp\DelayStamp; +use Symfony\Component\Messenger\Test\Middleware\MiddlewareTestCase; +use Symfony\Component\Messenger\Tests\Fixtures\DummyMessage; + +/** + * @author Antonio del Olmo García + */ +class AvailableAtStampMiddlewareTest extends MiddlewareTestCase +{ + public function testAvailableAtAndDelayStampAreAdded() + { + $now = new DateTime(); + $availableAt = (clone $now)->modify('+1000 seconds'); + $availableAtStamp = new AvailableAtStamp($availableAt); + + $middleware = new AvailableAtStampMiddleware(); + + $envelope = new Envelope( + new DummyMessage('the message'), + [ + $availableAtStamp + ] + ); + + $finalEnvelope = $middleware->handle($envelope, $this->getStackMock()); + + /** @var AvailableAtStamp $availableAtStamp */ + $availableAtStamp = $finalEnvelope->last(AvailableAtStamp::class); + $this->assertNotNull($availableAtStamp); + $this->assertSame($availableAt, $availableAtStamp->getAvailableAt()); + + /** @var DelayStamp $delayStamp */ + $delayStamp = $finalEnvelope->last(DelayStamp::class); + $this->assertNotNull($delayStamp); + $this->assertSame(1000 * 1000, $delayStamp->getDelay()); + + // the stamp should not be added over and over again + $finalEnvelope = $middleware->handle($finalEnvelope, $this->getStackMock()); + $this->assertCount(1, $finalEnvelope->all(AvailableAtStamp::class)); + } +} diff --git a/src/Symfony/Component/Messenger/Tests/Stamp/AvailableAtStampTest.php b/src/Symfony/Component/Messenger/Tests/Stamp/AvailableAtStampTest.php new file mode 100644 index 0000000000000..666261a248de8 --- /dev/null +++ b/src/Symfony/Component/Messenger/Tests/Stamp/AvailableAtStampTest.php @@ -0,0 +1,28 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Messenger\Tests\Stamp; + +use DateTime; +use PHPUnit\Framework\TestCase; +use Symfony\Component\Messenger\Stamp\AvailableAtStamp; + +/** + * @author Antonio del Olmo García + */ +class AvailableAtStampTest extends TestCase +{ + public function testStamp() + { + $stamp = new AvailableAtStamp($availableAt = new DateTime()); + $this->assertSame($availableAt, $stamp->getAvailableAt()); + } +} From 308bac95656d72909551c667755c425cd08a38a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20del=20Olmo=20Garc=C3=ADa?= Date: Tue, 21 Apr 2020 12:50:27 +0200 Subject: [PATCH 3/3] Add license headers and fix coding standard --- .../Middleware/AvailableAtStampMiddleware.php | 82 ++++++++++--------- .../Messenger/Stamp/AvailableAtStamp.php | 78 +++++++++--------- .../AvailableAtStampMiddlewareTest.php | 2 +- 3 files changed, 85 insertions(+), 77 deletions(-) diff --git a/src/Symfony/Component/Messenger/Middleware/AvailableAtStampMiddleware.php b/src/Symfony/Component/Messenger/Middleware/AvailableAtStampMiddleware.php index fc6f004f0fb52..69741288ed509 100644 --- a/src/Symfony/Component/Messenger/Middleware/AvailableAtStampMiddleware.php +++ b/src/Symfony/Component/Messenger/Middleware/AvailableAtStampMiddleware.php @@ -1,38 +1,44 @@ - - */ -class AvailableAtStampMiddleware implements MiddlewareInterface -{ - /** - * {@inheritdoc} - */ - public function handle(Envelope $envelope, StackInterface $stack): Envelope - { - $availableAtStamp = $envelope->last(AvailableAtStamp::class); - - if (null !== $availableAtStamp) { - $availableAt = $availableAtStamp->getAvailableAt(); - $now = new DateTime(); - - $delay = $availableAt->getTimestamp() - $now->getTimestamp(); - - $envelope = $envelope->with( - new DelayStamp($delay * 1000) - ); - } - - return $stack->next()->handle($envelope, $stack); - } -} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Messenger\Middleware; + +use DateTime; +use Symfony\Component\Messenger\Envelope; +use Symfony\Component\Messenger\Stamp\AvailableAtStamp; +use Symfony\Component\Messenger\Stamp\DelayStamp; + +/** + * @author Antonio del Olmo García + */ +class AvailableAtStampMiddleware implements MiddlewareInterface +{ + /** + * {@inheritdoc} + */ + public function handle(Envelope $envelope, StackInterface $stack): Envelope + { + $availableAtStamp = $envelope->last(AvailableAtStamp::class); + + if (null !== $availableAtStamp) { + $availableAt = $availableAtStamp->getAvailableAt(); + $now = new DateTime(); + + $delay = $availableAt->getTimestamp() - $now->getTimestamp(); + + $envelope = $envelope->with( + new DelayStamp($delay * 1000) + ); + } + + return $stack->next()->handle($envelope, $stack); + } +} diff --git a/src/Symfony/Component/Messenger/Stamp/AvailableAtStamp.php b/src/Symfony/Component/Messenger/Stamp/AvailableAtStamp.php index a96e9d2eac32a..5123a7f4e61cf 100644 --- a/src/Symfony/Component/Messenger/Stamp/AvailableAtStamp.php +++ b/src/Symfony/Component/Messenger/Stamp/AvailableAtStamp.php @@ -1,38 +1,40 @@ - - */ -class AvailableAtStamp implements StampInterface -{ - /** - * @var \DateTime - */ - protected $availableAt; - - /** - * - * @param \DateTime $availableAt - */ - public function __construct(DateTime $availableAt) - { - $this->availableAt = $availableAt; - } - - /** - * The date and time on which the message will be available - * - * @return \DateTime - */ - public function getAvailableAt(): DateTime - { - return $this->availableAt; - } -} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Messenger\Stamp; + +use DateTime; + +/** + * Stamp used to identify when a message should become available. + * + * @author Antonio del Olmo García + */ +class AvailableAtStamp implements StampInterface +{ + /** + * @var \DateTime + */ + protected $availableAt; + + public function __construct(DateTime $availableAt) + { + $this->availableAt = $availableAt; + } + + /** + * The date and time on which the message will be available. + */ + public function getAvailableAt(): DateTime + { + return $this->availableAt; + } +} diff --git a/src/Symfony/Component/Messenger/Tests/Middleware/AvailableAtStampMiddlewareTest.php b/src/Symfony/Component/Messenger/Tests/Middleware/AvailableAtStampMiddlewareTest.php index f05c777b147e7..b2368907238b7 100644 --- a/src/Symfony/Component/Messenger/Tests/Middleware/AvailableAtStampMiddlewareTest.php +++ b/src/Symfony/Component/Messenger/Tests/Middleware/AvailableAtStampMiddlewareTest.php @@ -35,7 +35,7 @@ public function testAvailableAtAndDelayStampAreAdded() $envelope = new Envelope( new DummyMessage('the message'), [ - $availableAtStamp + $availableAtStamp, ] );