Skip to content

Commit 8548aac

Browse files
adrianrudniknicolas-grekas
authored andcommitted
[Scheduler] Throw error on duplicate schedule provider service registration on the schedule name
1 parent 29da4f5 commit 8548aac

File tree

3 files changed

+40
-0
lines changed

3 files changed

+40
-0
lines changed

src/Symfony/Component/Scheduler/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ CHANGELOG
55
---
66

77
* Add `TriggerNormalizer`
8+
* Throw exception when multiple schedule provider services are registered under the same scheduler name
89

910
7.2
1011
---

src/Symfony/Component/Scheduler/DependencyInjection/AddScheduleMessengerPass.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ public function process(ContainerBuilder $container): void
4646
$scheduleProviderIds = [];
4747
foreach ($container->findTaggedServiceIds('scheduler.schedule_provider') as $serviceId => $tags) {
4848
$name = $tags[0]['name'];
49+
50+
if (isset($scheduleProviderIds[$name])) {
51+
throw new InvalidArgumentException(\sprintf('Schedule provider service "%s" can not replace already registered service "%s" for schedule "%s". Make sure to register only one provider per schedule name.', $serviceId, $scheduleProviderIds[$name], $name), 1);
52+
}
53+
4954
$scheduleProviderIds[$name] = $serviceId;
5055
}
5156

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Scheduler\Tests\DependencyInjection;
13+
14+
use PHPUnit\Framework\TestCase;
15+
use Symfony\Component\DependencyInjection\ContainerBuilder;
16+
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
17+
use Symfony\Component\Scheduler\DependencyInjection\AddScheduleMessengerPass;
18+
use Symfony\Component\Scheduler\Tests\Fixtures\SomeScheduleProvider;
19+
20+
class RegisterProviderTest extends TestCase
21+
{
22+
public function testErrorOnMultipleProvidersForTheSameSchedule()
23+
{
24+
$this->expectException(InvalidArgumentException::class);
25+
$this->expectExceptionCode(1);
26+
27+
$container = new ContainerBuilder();
28+
29+
$container->register('provider_a', SomeScheduleProvider::class)->addTag('scheduler.schedule_provider', ['name' => 'default']);
30+
$container->register('provider_b', SomeScheduleProvider::class)->addTag('scheduler.schedule_provider', ['name' => 'default']);
31+
32+
(new AddScheduleMessengerPass())->process($container);
33+
}
34+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy