/** * @param boolean $withStartStep * @dataProvider resetWorkflowItemProvider */ public function testResetWorkflowItem($withStartStep) { $workflowName = self::TEST_WORKFLOW_NAME; $activeWorkflowName = self::TEST_WORKFLOW_NAME . '_active'; $workflowItem = $this->createWorkflowItem(); $entity = new WorkflowAwareEntity(); $workflowStep = new WorkflowStep(); $entity->setWorkflowItem($workflowItem); $entity->setWorkflowStep($workflowStep); $workflowItem->setEntity($entity); $workflowDefinition = new WorkflowDefinition(); $workflowDefinition->setRelatedEntity(get_class($entity)); $workflowItem->setDefinition($workflowDefinition); $aclManager = $this->getMockBuilder('Oro\\Bundle\\WorkflowBundle\\Acl\\AclManager')->disableOriginalConstructor()->getMock(); $workflow = $this->getMockBuilder('Oro\\Bundle\\WorkflowBundle\\Model\\Workflow')->setConstructorArgs(array(new EntityConnector(), $aclManager, null, null, null))->setMethods(null)->getMock(); $workflow->setName($workflowName); $stepManager = $this->getMock('Oro\\Bundle\\WorkflowBundle\\Model\\StepManager'); $stepManager->expects($this->any())->method('hasStartStep')->will($this->returnValue($withStartStep)); $activeWorkflow = $this->getMockBuilder('Oro\\Bundle\\WorkflowBundle\\Model\\Workflow')->setConstructorArgs(array(new EntityConnector(), $aclManager, $stepManager, null, null))->setMethods(array('start'))->getMock(); $activeWorkflow->setName($activeWorkflowName); $activeWorkflow->setDefinition($workflowDefinition); if ($withStartStep) { $workflowDefinition->setName($activeWorkflowName); $workflowItemActive = $this->createWorkflowItem($activeWorkflowName); $workflowItemActive->setEntity($entity); $workflowItemActive->setDefinition($workflowDefinition); $activeWorkflow->expects($this->once())->method('start')->with($entity, array(), null)->will($this->returnValue($workflowItemActive)); } else { $activeWorkflow->expects($this->never())->method('start'); } $this->workflowRegistry->expects($this->any())->method('getWorkflow')->will($this->returnCallback(function ($workflowIdentifier) use($workflow, $activeWorkflow) { return is_string($workflowIdentifier) ? $activeWorkflow : $workflow; })); $this->workflowRegistry->expects($this->once())->method('getActiveWorkflowByEntityClass')->will($this->returnValue($activeWorkflow)); $entityManager = $this->createEntityManager(); $this->registry->expects($this->once())->method('getManagerForClass')->will($this->returnValue($entityManager)); if ($withStartStep) { $this->registry->expects($this->once())->method('getManager')->will($this->returnValue($entityManager)); } else { $this->registry->expects($this->never())->method('getManager'); } $activeWorkflowItem = $this->workflowManager->resetWorkflowItem($workflowItem); if ($withStartStep) { $this->assertNotNull($activeWorkflowItem); $this->assertEquals($activeWorkflowName, $activeWorkflowItem->getDefinition()->getName()); } else { $this->assertNull($activeWorkflowItem); } $this->assertNull($entity->getWorkflowStep()); $this->assertNull($entity->getWorkflowItem()); }