3 namespace Drupal\Tests\workflows\Unit;
5 use Drupal\Tests\UnitTestCase;
6 use Drupal\workflow_type_test\Plugin\WorkflowType\TestType;
7 use Drupal\workflows\State;
8 use Drupal\workflows\WorkflowTypeInterface;
11 * @coversDefaultClass \Drupal\workflows\State
15 class StateTest extends UnitTestCase {
18 * @covers ::__construct
23 public function testGetters() {
25 $this->prophesize(WorkflowTypeInterface::class)->reveal(),
30 $this->assertEquals('draft', $state->id());
31 $this->assertEquals('Draft', $state->label());
32 $this->assertEquals(3, $state->weight());
36 * @covers ::canTransitionTo
38 public function testCanTransitionTo() {
39 $workflow_type = new TestType([], '', []);
41 ->addState('draft', 'Draft')
42 ->addState('published', 'Published')
43 ->addTransition('publish', 'Publish', ['draft'], 'published');
44 $state = $workflow_type->getState('draft');
45 $this->assertTrue($state->canTransitionTo('published'));
46 $this->assertFalse($state->canTransitionTo('some_other_state'));
48 $workflow_type->deleteTransition('publish');
49 $this->assertFalse($state->canTransitionTo('published'));
53 * @covers ::getTransitionTo
55 public function testGetTransitionTo() {
56 $workflow_type = new TestType([], '', []);
58 ->addState('draft', 'Draft')
59 ->addState('published', 'Published')
60 ->addTransition('publish', 'Publish', ['draft'], 'published');
61 $state = $workflow_type->getState('draft');
62 $transition = $state->getTransitionTo('published');
63 $this->assertEquals('Publish', $transition->label());
67 * @covers ::getTransitionTo
69 public function testGetTransitionToException() {
70 $this->setExpectedException(\InvalidArgumentException::class, "Can not transition to 'published' state");
71 $workflow_type = new TestType([], '', []);
72 $workflow_type->addState('draft', 'Draft');
73 $state = $workflow_type->getState('draft');
74 $state->getTransitionTo('published');
78 * @covers ::getTransitions
80 public function testGetTransitions() {
81 $workflow_type = new TestType([], '', []);
83 ->addState('draft', 'Draft')
84 ->addState('published', 'Published')
85 ->addState('archived', 'Archived')
86 ->addTransition('create_new_draft', 'Create new draft', ['draft'], 'draft')
87 ->addTransition('publish', 'Publish', ['draft'], 'published')
88 ->addTransition('archive', 'Archive', ['published'], 'archived');
89 $state = $workflow_type->getState('draft');
90 $transitions = $state->getTransitions();
91 $this->assertCount(2, $transitions);
92 $this->assertEquals('Create new draft', $transitions['create_new_draft']->label());
93 $this->assertEquals('Publish', $transitions['publish']->label());
97 * @covers ::labelCallback
99 public function testLabelCallback() {
100 $workflow_type = $this->prophesize(WorkflowTypeInterface::class)->reveal();
102 new State($workflow_type, 'draft', 'Draft'),
103 new State($workflow_type, 'published', 'Published'),
105 $this->assertEquals(['Draft', 'Published'], array_map([State::class, 'labelCallback'], $states));