From 563780acc1e891da25f3ea8270ac95d5bbcf8453 Mon Sep 17 00:00:00 2001 From: HypeMC Date: Tue, 6 Feb 2024 20:07:29 +0100 Subject: [PATCH] [Scheduler] Fix messenger receiver with no alias --- .../Messenger/DummyTaskWithCustomReceiver.php | 22 +++++++++++++++++++ .../Tests/Functional/SchedulerTest.php | 9 ++++++++ .../Tests/Functional/app/Scheduler/config.yml | 15 +++++++++++++ .../Bundle/FrameworkBundle/composer.json | 4 ++-- .../AddScheduleMessengerPass.php | 7 ++++-- 5 files changed, 53 insertions(+), 4 deletions(-) create mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Messenger/DummyTaskWithCustomReceiver.php diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Messenger/DummyTaskWithCustomReceiver.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Messenger/DummyTaskWithCustomReceiver.php new file mode 100644 index 0000000000000..10c3f37cffde8 --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Messenger/DummyTaskWithCustomReceiver.php @@ -0,0 +1,22 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger; + +use Symfony\Component\Scheduler\Attribute\AsPeriodicTask; + +#[AsPeriodicTask(frequency: 5, schedule: 'custom_receiver')] +class DummyTaskWithCustomReceiver +{ + public function __invoke() + { + } +} diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/SchedulerTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/SchedulerTest.php index 7f737a4c4e7b2..99776e8223e9d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/SchedulerTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/SchedulerTest.php @@ -88,6 +88,15 @@ public function testAutoconfiguredScheduler() $this->assertSame([['5', 6], ['7', 8]], $calls['attributesOnMethod']); } + public function testSchedulerWithCustomTransport() + { + $container = self::getContainer(); + $container->set('clock', new MockClock('2023-10-26T08:59:59Z')); + + $this->assertTrue($container->get('receivers')->has('scheduler_custom_receiver')); + $this->assertSame($container->get('scheduler_custom_receiver'), $container->get('receivers')->get('scheduler_custom_receiver')); + } + protected static function createKernel(array $options = []): KernelInterface { return parent::createKernel(['test_case' => 'Scheduler'] + $options); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Scheduler/config.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Scheduler/config.yml index 90016381be1c1..bd1cb6516b260 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Scheduler/config.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Scheduler/config.yml @@ -13,9 +13,24 @@ services: Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\DummyTask: autoconfigure: true + Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\DummyTaskWithCustomReceiver: + autoconfigure: true + clock: synthetic: true receivers: public: true alias: 'messenger.receiver_locator' + + scheduler_custom_receiver: + public: true + class: Symfony\Component\Messenger\Transport\TransportInterface + factory: [ '@messenger.transport_factory', 'createTransport' ] + arguments: + - 'schedule://custom_receiver' + - { transport_name: 'scheduler_custom_receiver' } + - !service + class: Symfony\Component\Messenger\Transport\Serialization\Serializer + tags: + - { name: 'messenger.receiver' } diff --git a/src/Symfony/Bundle/FrameworkBundle/composer.json b/src/Symfony/Bundle/FrameworkBundle/composer.json index afb7c20691353..624167783067a 100644 --- a/src/Symfony/Bundle/FrameworkBundle/composer.json +++ b/src/Symfony/Bundle/FrameworkBundle/composer.json @@ -57,7 +57,7 @@ "symfony/notifier": "^5.4|^6.0|^7.0", "symfony/process": "^5.4|^6.0|^7.0", "symfony/rate-limiter": "^5.4|^6.0|^7.0", - "symfony/scheduler": "^6.4.3|^7.0.3", + "symfony/scheduler": "^6.4.4|^7.0.4", "symfony/security-bundle": "^5.4|^6.0|^7.0", "symfony/semaphore": "^5.4|^6.0|^7.0", "symfony/serializer": "^6.4|^7.0", @@ -93,7 +93,7 @@ "symfony/mime": "<6.4", "symfony/property-info": "<5.4", "symfony/property-access": "<5.4", - "symfony/scheduler": "<6.4.3|>=7.0.0,<7.0.3", + "symfony/scheduler": "<6.4.4|>=7.0.0,<7.0.4", "symfony/serializer": "<6.4", "symfony/security-csrf": "<5.4", "symfony/security-core": "<5.4", diff --git a/src/Symfony/Component/Scheduler/DependencyInjection/AddScheduleMessengerPass.php b/src/Symfony/Component/Scheduler/DependencyInjection/AddScheduleMessengerPass.php index 1fa0d81e1be67..c0b804993b5f1 100644 --- a/src/Symfony/Component/Scheduler/DependencyInjection/AddScheduleMessengerPass.php +++ b/src/Symfony/Component/Scheduler/DependencyInjection/AddScheduleMessengerPass.php @@ -35,8 +35,11 @@ public function process(ContainerBuilder $container): void } $receivers = []; - foreach ($container->findTaggedServiceIds('messenger.receiver') as $tags) { - $receivers[$tags[0]['alias']] = true; + foreach ($container->findTaggedServiceIds('messenger.receiver') as $serviceId => $tags) { + $receivers[$serviceId] = true; + if (isset($tags[0]['alias'])) { + $receivers[$tags[0]['alias']] = true; + } } $scheduleProviderIds = [];