public function testDefinition() { $this->assertNull($this->workflowItem->getDefinition()); $value = new WorkflowDefinition(); $this->workflowItem->setDefinition($value); $this->assertEquals($value, $this->workflowItem->getDefinition()); }
/** * Updates WorkflowItem with WorkflowDefinition * * @param EntityManager $em * @param WorkflowItem $workflowItem * @throws WorkflowException */ protected function updateWorkflowDefinition(EntityManager $em, WorkflowItem $workflowItem) { $workflowDefinition = $em->find('OroWorkflowBundle:WorkflowDefinition', $workflowItem->getWorkflowName()); if (!$workflowDefinition) { throw new WorkflowException(sprintf('Cannot find workflow definition "%s"', $workflowItem->getWorkflowName())); } $workflowItem->setDefinition($workflowDefinition); }
protected function generateEntities(ObjectManager $manager, WorkflowDefinition $definition) { // load entities /** @var WorkflowAwareEntity[] $entities */ $entities = array(); for ($i = 1; $i <= self::COUNT; $i++) { $entity = new WorkflowAwareEntity(); $entity->setName($definition->getName() . '_entity_' . $i); $entities[] = $entity; $manager->persist($entity); } $manager->flush(); // create workflow item manually (to make it faster) foreach ($entities as $entity) { $workflowItem = new WorkflowItem(); $workflowItem->setDefinition($definition)->setWorkflowName($definition->getName())->setEntity($entity)->setEntityId($entity->getId())->setCurrentStep($definition->getSteps()->first()); $manager->persist($workflowItem); $entity->setWorkflowItem($workflowItem)->setWorkflowStep($workflowItem->getCurrentStep()); } $manager->flush(); }
/** * Create workflow item. * * @param object $entity * @param array $data * @return WorkflowItem */ public function createWorkflowItem($entity, array $data = array()) { $entityAttributeName = $this->attributeManager->getEntityAttribute()->getName(); $workflowItem = new WorkflowItem(); $workflowItem->setWorkflowName($this->getName())->setEntity($entity); if (array_key_exists($entityAttributeName, $data)) { unset($data[$entityAttributeName]); } $workflowItem->getData()->set($entityAttributeName, $entity)->setFieldsMapping($this->getAttributesMapping())->add($data); $workflowItem->setDefinition($this->getDefinition()); return $workflowItem; }
/** * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function testOnFlushAndPostFlush() { $definition = $this->getMockBuilder('Oro\\Bundle\\WorkflowBundle\\Entity\\WorkflowDefinition')->disableOriginalConstructor()->getMock(); $definition->expects($this->any())->method('getEntityAttributeName')->will($this->returnValue('entity')); $entity1 = new WorkflowItem(); $entity1->setDefinition($definition); $entity1->setWorkflowName('workflow_1'); $entity1->setSerializedData('_old_serialized_data'); $data1 = new WorkflowData(); $data1->foo = 'foo'; $entity1->setData($data1); $entity2 = new WorkflowItem(); $entity2->setDefinition($definition); $entity2->setWorkflowName('workflow_2'); $data2 = new WorkflowData(); $data2->bar = 'bar'; $entity2->setData($data2); $entity3 = new \stdClass(); $entity4 = new WorkflowItem(); $entity4->setDefinition($definition); $entity4->setWorkflowName('workflow_4'); $data4 = new WorkflowData(); $data4->foo = 'baz'; $entity4->setData($data4); $entity5 = new WorkflowItem(); $entity5->setDefinition($definition); $data5 = new WorkflowData(); // Leave this data not modified $entity5->setData($data5); $entity6 = new \stdClass(); $expectedSerializedData1 = 'serialized_data_1'; $expectedSerializedData2 = 'serialized_data_2'; $expectedSerializedData4 = 'serialized_data_4'; $this->serializer->expects($this->never())->method('deserialize'); $this->serializer->expects($this->at(0))->method('setWorkflowName')->with($entity1->getWorkflowName()); $this->serializer->expects($this->at(1))->method('serialize')->with($this->isInstanceOf('Oro\\Bundle\\WorkflowBundle\\Model\\WorkflowData'), 'json')->will($this->returnCallback(function ($data) use($data1, $expectedSerializedData1) { $this->assertEquals($data1, $data); return $expectedSerializedData1; })); $this->serializer->expects($this->at(2))->method('setWorkflowName')->with($entity2->getWorkflowName()); $this->serializer->expects($this->at(3))->method('serialize')->with($this->isInstanceOf('Oro\\Bundle\\WorkflowBundle\\Model\\WorkflowData'), 'json')->will($this->returnCallback(function ($data) use($data2, $expectedSerializedData2) { $this->assertEquals($data2, $data); return $expectedSerializedData2; })); $this->serializer->expects($this->at(4))->method('setWorkflowName')->with($entity4->getWorkflowName()); $this->serializer->expects($this->at(5))->method('serialize')->with($this->isInstanceOf('Oro\\Bundle\\WorkflowBundle\\Model\\WorkflowData'), 'json')->will($this->returnCallback(function ($data) use($data4, $expectedSerializedData4) { $this->assertEquals($data4, $data); return $expectedSerializedData4; })); $entityManager = $this->getPostFlushEntityManagerMock(array(array('getScheduledEntityInsertions', array(), $this->returnValue(array($entity1, $entity2, $entity3))), array('getScheduledEntityUpdates', array(), $this->returnValue(array($entity4, $entity5, $entity6))))); $this->listener->onFlush(new OnFlushEventArgs($entityManager)); $this->listener->postFlush(new PostFlushEventArgs($entityManager)); $this->assertAttributeEquals($expectedSerializedData1, 'serializedData', $entity1); $this->assertAttributeEquals($expectedSerializedData2, 'serializedData', $entity2); $this->assertAttributeEquals($expectedSerializedData4, 'serializedData', $entity4); $this->assertAttributeEquals(null, 'serializedData', $entity5); $this->assertFalse($entity1->getData()->isModified()); $this->assertFalse($entity2->getData()->isModified()); $this->assertFalse($entity4->getData()->isModified()); $this->assertFalse($entity5->getData()->isModified()); }