/**
  * @param ProcessHandleEvent $event
  *
  * @throws \Exception
  */
 public function onProcessHandleAfter(ProcessHandleEvent $event)
 {
     $entity = $event->getProcessData()->get('data');
     if (!$entity instanceof MemberActivity) {
         return;
     }
     $this->processCollectorListener->setEnabled(false);
     try {
         $this->doctrineHelper->getEntityManager($entity)->flush($entity);
     } catch (\Exception $e) {
         $this->processCollectorListener->setEnabled(true);
         throw $e;
     }
     $this->processCollectorListener->setEnabled(true);
 }
 /**
  * @param array $data
  * @param bool $expectsDisable
  * @param bool $expectedFlush
  * @param bool $exception
  *
  * @dataProvider eventDataProvider
  */
 public function testOnProcessHandleAfter(array $data, $expectsDisable, $expectedFlush, $exception = false)
 {
     $trigger = new ProcessTrigger();
     $data = new ProcessData($data);
     $event = new ProcessHandleEvent($trigger, $data);
     $em = $this->getMockBuilder('Doctrine\\ORM\\EntityManager')->disableOriginalConstructor()->getMock();
     $this->doctrineHelper->expects($this->any())->method('getEntityManager')->will($this->returnValue($em));
     if ($expectsDisable) {
         $this->processListener->expects($this->at(0))->method('setEnabled')->with(false);
         $this->processListener->expects($this->at(1))->method('setEnabled')->with(true);
     }
     if ($expectedFlush) {
         $em->expects($this->once())->method('flush')->with($this->isType('object'));
     } else {
         if ($exception) {
             $em->expects($this->once())->method('flush')->will($this->throwException(new \Exception()));
             $this->setExpectedException('\\Exception');
         } else {
             $em->expects($this->never())->method('flush');
         }
     }
     $this->listener->onProcessHandleAfter($event);
 }
 /**
  * @param string $event
  * @param object $entity
  * @param \PHPUnit_Framework_MockObject_MockObject $entityManager
  * @param array $changeSet
  */
 protected function callPreFunctionByEventName($event, $entity, $entityManager, $changeSet = array())
 {
     switch ($event) {
         case ProcessTrigger::EVENT_CREATE:
             $args = new LifecycleEventArgs($entity, $entityManager);
             $this->listener->prePersist($args);
             break;
         case ProcessTrigger::EVENT_UPDATE:
             $args = new PreUpdateEventArgs($entity, $entityManager, $changeSet);
             $this->listener->preUpdate($args);
             break;
         case ProcessTrigger::EVENT_DELETE:
             $args = new LifecycleEventArgs($entity, $entityManager);
             $this->listener->preRemove($args);
             break;
     }
 }