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);
 }
Ejemplo n.º 3
0
 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();
 }
Ejemplo n.º 4
0
 /**
  * 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());
 }