/
githubmirror
/
symfony
Обзор
Документация
Войти
/
githubmirror
/
symfony
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
8.2
src/Symfony/Component/Workflow/Tests/RegistryTest.php
117 строк
4 KB
Christian Flothmann
Merge branch '8.0' into 8.1
05 янв 2026, 14:50
05 янв 2026, 14:50
7297523
Код
Авторство
О чём код?
<?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Workflow\Tests; use PHPUnit\Framework\TestCase; use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\Workflow\Definition; use Symfony\Component\Workflow\Exception\InvalidArgumentException; use Symfony\Component\Workflow\MarkingStore\MarkingStoreInterface; use Symfony\Component\Workflow\Registry; use Symfony\Component\Workflow\SupportStrategy\WorkflowSupportStrategyInterface; use Symfony\Component\Workflow\Workflow; class RegistryTest extends TestCase { private Registry $registry; protected function setUp(): void { $this->registry = new Registry(); $this->registry->addWorkflow(new Workflow(new Definition([], []), $this->createStub(MarkingStoreInterface::class), new EventDispatcher(), 'workflow1'), $this->createWorkflowSupportStrategy(Subject1::class)); $this->registry->addWorkflow(new Workflow(new Definition([], []), $this->createStub(MarkingStoreInterface::class), new EventDispatcher(), 'workflow2'), $this->createWorkflowSupportStrategy(Subject2::class)); $this->registry->addWorkflow(new Workflow(new Definition([], []), $this->createStub(MarkingStoreInterface::class), new EventDispatcher(), 'workflow3'), $this->createWorkflowSupportStrategy(Subject2::class)); } public function testHasWithMatch() { $this->assertTrue($this->registry->has(new Subject1())); } public function testHasWithoutMatch() { $this->assertFalse($this->registry->has(new Subject1(), 'nope')); } public function testGetWithSuccess() { $workflow = $this->registry->get(new Subject1()); $this->assertInstanceOf(Workflow::class, $workflow); $this->assertSame('workflow1', $workflow->getName()); $workflow = $this->registry->get(new Subject1(), 'workflow1'); $this->assertInstanceOf(Workflow::class, $workflow); $this->assertSame('workflow1', $workflow->getName()); $workflow = $this->registry->get(new Subject2(), 'workflow2'); $this->assertInstanceOf(Workflow::class, $workflow); $this->assertSame('workflow2', $workflow->getName()); } public function testGetWithMultipleMatch() { $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage('Too many workflows (workflow2, workflow3) match this subject (Symfony\Component\Workflow\Tests\Subject2); set a different name on each and use the second (name) argument of this method.'); $this->registry->get(new Subject2()); } public function testGetWithNoMatch() { $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage('Unable to find a workflow for class "stdClass".'); $this->registry->get(new \stdClass()); } public function testAllWithOneMatchWithSuccess() { $workflows = $this->registry->all(new Subject1()); $this->assertIsArray($workflows); $this->assertCount(1, $workflows); $this->assertInstanceOf(Workflow::class, $workflows[0]); $this->assertSame('workflow1', $workflows[0]->getName()); } public function testAllWithMultipleMatchWithSuccess() { $workflows = $this->registry->all(new Subject2()); $this->assertIsArray($workflows); $this->assertCount(2, $workflows); $this->assertInstanceOf(Workflow::class, $workflows[0]); $this->assertInstanceOf(Workflow::class, $workflows[1]); $this->assertSame('workflow2', $workflows[0]->getName()); $this->assertSame('workflow3', $workflows[1]->getName()); } public function testAllWithNoMatch() { $workflows = $this->registry->all(new \stdClass()); $this->assertIsArray($workflows); $this->assertCount(0, $workflows); } private function createWorkflowSupportStrategy($supportedClassName): WorkflowSupportStrategyInterface { $strategy = $this->createStub(WorkflowSupportStrategyInterface::class); $strategy->method('supports') ->willReturnCallback(static fn ($workflow, $subject) => $subject instanceof $supportedClassName); return $strategy; } } class Subject1 { } class Subject2 { }