only in patch2: unchanged: --- a/core/modules/workflows/tests/src/Unit/WorkflowTest.php +++ b/core/modules/workflows/tests/src/Unit/WorkflowTest.php @@ -611,6 +611,73 @@ public function testSetTransitionFromStatesMissingState() { } /** + * @covers ::setTransitionToState + */ + public function testSetTransitionToState() { + $workflow = new Workflow(['id' => 'test', 'type' => 'test_type'], 'workflow'); + $workflow + ->addState('draft', 'Draft') + ->addState('published', 'Published') + ->addState('archived', 'Archived') + ->addTransition('test', 'Test', ['draft'], 'draft'); + + $this->assertFalse($workflow->hasTransitionFromStateToState('draft', 'published')); + $this->assertTrue($workflow->hasTransitionFromStateToState('draft', 'draft')); + $this->assertFalse($workflow->hasTransitionFromStateToState('published', 'draft')); + $this->assertFalse($workflow->hasTransitionFromStateToState('archived', 'draft')); + $workflow->setTransitionToState('test', 'published'); + $this->assertTrue($workflow->hasTransitionFromStateToState('draft', 'published')); + $this->assertFalse($workflow->hasTransitionFromStateToState('draft', 'draft')); + $this->assertFalse($workflow->hasTransitionFromStateToState('published', 'draft')); + $this->assertFalse($workflow->hasTransitionFromStateToState('archived', 'draft')); + } + + /** + * @covers ::setTransitionToState + */ + public function testSetTransitionToStateMissingTransition() { + $this->setExpectedException(\InvalidArgumentException::class, "The transition 'test' does not exist in workflow 'test'"); + $workflow = new Workflow(['id' => 'test', 'type' => 'test_type'], 'workflow'); + $workflow + ->addState('draft', 'Draft') + ->addState('published', 'Published') + ->addState('archived', 'Archived') + ->addTransition('create_new_draft', 'Create new draft', ['draft'], 'draft'); + + $workflow->setTransitionToState('test', 'published'); + } + + /** + * @covers ::setTransitionToState + */ + public function testSetTransitionToStateMissingState() { + $this->setExpectedException(\InvalidArgumentException::class, "The state 'published' does not exist in workflow 'test'"); + $workflow = new Workflow(['id' => 'test', 'type' => 'test_type'], 'workflow'); + $workflow + ->addState('draft', 'Draft') + ->addState('archived', 'Archived') + ->addTransition('create_new_draft', 'Create new draft', ['draft'], 'draft'); + + $workflow->setTransitionToState('create_new_draft', 'published'); + } + + /** + * @covers ::setTransitionToState + */ + public function testSetTransitionToStateAlreadyExists() { + $this->setExpectedException(\InvalidArgumentException::class, "The 'create_new_draft' transition already allows 'draft' to 'draft' transitions in workflow 'test'"); + $workflow = new Workflow(['id' => 'test', 'type' => 'test_type'], 'workflow'); + $workflow + ->addState('draft', 'Draft') + ->addState('archived', 'Archived') + ->addState('needs_review', 'Needs Review') + ->addTransition('create_new_draft', 'Create new draft', ['draft'], 'draft') + ->addTransition('needs_review', 'Needs review', ['draft'], 'needs_review'); + + $workflow->setTransitionToState('needs_review', 'draft'); + } + + /** * @covers ::deleteTransition */ public function testDeleteTransition() {