This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
symfony/src/Symfony/Component/Workflow/Tests/RegistryTest.php

142 lines
5.6 KiB
PHP
Raw Normal View History

2016-03-25 15:43:30 +00:00
<?php
namespace Symfony\Component\Workflow\Tests;
2017-02-20 13:34:33 +00:00
use PHPUnit\Framework\TestCase;
2016-03-25 15:43:30 +00:00
use Symfony\Component\Workflow\Definition;
use Symfony\Component\Workflow\MarkingStore\MarkingStoreInterface;
use Symfony\Component\Workflow\Registry;
use Symfony\Component\Workflow\SupportStrategy\SupportStrategyInterface;
use Symfony\Component\Workflow\SupportStrategy\WorkflowSupportStrategyInterface;
2016-03-25 15:43:30 +00:00
use Symfony\Component\Workflow\Workflow;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
2016-03-25 15:43:30 +00:00
2017-02-20 13:34:33 +00:00
class RegistryTest extends TestCase
2016-03-25 15:43:30 +00:00
{
private $registry;
2019-08-02 18:02:27 +01:00
protected function setUp()
2016-03-25 15:43:30 +00:00
{
$this->registry = new Registry();
2019-01-16 18:24:45 +00:00
$this->registry->addWorkflow(new Workflow(new Definition([], []), $this->getMockBuilder(MarkingStoreInterface::class)->getMock(), $this->getMockBuilder(EventDispatcherInterface::class)->getMock(), 'workflow1'), $this->createWorkflowSupportStrategy(Subject1::class));
$this->registry->addWorkflow(new Workflow(new Definition([], []), $this->getMockBuilder(MarkingStoreInterface::class)->getMock(), $this->getMockBuilder(EventDispatcherInterface::class)->getMock(), 'workflow2'), $this->createWorkflowSupportStrategy(Subject2::class));
$this->registry->addWorkflow(new Workflow(new Definition([], []), $this->getMockBuilder(MarkingStoreInterface::class)->getMock(), $this->getMockBuilder(EventDispatcherInterface::class)->getMock(), 'workflow3'), $this->createWorkflowSupportStrategy(Subject2::class));
2016-03-25 15:43:30 +00:00
}
2019-08-02 18:02:27 +01:00
protected function tearDown()
2016-03-25 15:43:30 +00:00
{
$this->registry = null;
}
/**
* @group legacy
2018-07-06 12:18:00 +01:00
* @expectedDeprecation The "Symfony\Component\Workflow\Registry::add()" method is deprecated since Symfony 4.1. Use addWorkflow() instead.
*/
public function testAddIsDeprecated()
{
2018-02-07 17:11:17 +00:00
$registry = new Registry();
2019-01-16 18:24:45 +00:00
$registry->add($w = new Workflow(new Definition([], []), $this->getMockBuilder(MarkingStoreInterface::class)->getMock(), $this->getMockBuilder(EventDispatcherInterface::class)->getMock(), 'workflow1'), $this->createSupportStrategy(Subject1::class));
2018-02-07 17:11:17 +00:00
$workflow = $registry->get(new Subject1());
$this->assertInstanceOf(Workflow::class, $workflow);
$this->assertSame('workflow1', $workflow->getName());
}
2016-03-25 15:43:30 +00:00
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()
{
2019-08-01 23:48:42 +01:00
$this->expectException('Symfony\Component\Workflow\Exception\InvalidArgumentException');
$this->expectExceptionMessage('At least two workflows match this subject. Set a different name on each and use the second (name) argument of this method.');
2016-03-25 15:43:30 +00:00
$w1 = $this->registry->get(new Subject2());
$this->assertInstanceOf(Workflow::class, $w1);
$this->assertSame('workflow1', $w1->getName());
}
public function testGetWithNoMatch()
{
2019-08-01 23:48:42 +01:00
$this->expectException('Symfony\Component\Workflow\Exception\InvalidArgumentException');
$this->expectExceptionMessage('Unable to find a workflow for class "stdClass".');
2016-03-25 15:43:30 +00:00
$w1 = $this->registry->get(new \stdClass());
$this->assertInstanceOf(Workflow::class, $w1);
$this->assertSame('workflow1', $w1->getName());
}
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);
}
/**
* @group legacy
*/
private function createSupportStrategy($supportedClassName)
{
$strategy = $this->getMockBuilder(SupportStrategyInterface::class)->getMock();
$strategy->expects($this->any())->method('supports')
->willReturnCallback(function ($workflow, $subject) use ($supportedClassName) {
return $subject instanceof $supportedClassName;
});
return $strategy;
}
/**
* @group legacy
*/
private function createWorkflowSupportStrategy($supportedClassName)
{
$strategy = $this->getMockBuilder(WorkflowSupportStrategyInterface::class)->getMock();
$strategy->expects($this->any())->method('supports')
->willReturnCallback(function ($workflow, $subject) use ($supportedClassName) {
return $subject instanceof $supportedClassName;
});
return $strategy;
}
2016-03-25 15:43:30 +00:00
}
class Subject1
{
}
class Subject2
{
}