diff --git a/src/Symfony/Component/Workflow/Tests/WorkflowTest.php b/src/Symfony/Component/Workflow/Tests/WorkflowTest.php index 712e50fb17ef1..d287eb857d852 100644 --- a/src/Symfony/Component/Workflow/Tests/WorkflowTest.php +++ b/src/Symfony/Component/Workflow/Tests/WorkflowTest.php @@ -313,8 +313,9 @@ public function testGetEnabledTransitions() $subject->marking = array('c' => 1, 'e' => 1); $transitions = $workflow->getEnabledTransitions($subject); - $this->assertCount(1, $transitions); - $this->assertSame('t5', $transitions[0]->getName()); + $this->assertCount(2, $transitions); + $this->assertSame('t2', $transitions[0]->getName()); + $this->assertSame('t5', $transitions[1]->getName()); } public function testGetEnabledTransitionsWithSameNameTransition() diff --git a/src/Symfony/Component/Workflow/Workflow.php b/src/Symfony/Component/Workflow/Workflow.php index 6397b9147e784..759282d8b512f 100644 --- a/src/Symfony/Component/Workflow/Workflow.php +++ b/src/Symfony/Component/Workflow/Workflow.php @@ -186,19 +186,25 @@ public function getDefinition() return $this->definition; } + /** + * Check if this marking has at least one place in the froms transition. + * Check also if the transition is guarded for this marking. + * + * @param object $subject + * @param Marking $marking + * @param Transition $transition + * + * @return bool + */ private function doCan($subject, Marking $marking, Transition $transition) { foreach ($transition->getFroms() as $place) { - if (!$marking->has($place)) { - return false; + if ($marking->has($place) && true !== $this->guardTransition($subject, $marking, $transition)) { + return true; } } - if (true === $this->guardTransition($subject, $marking, $transition)) { - return false; - } - - return true; + return false; } /**