/** * @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; } }