Exemple #1
0
 /**
  * @param OnFlushEventArgs $event
  */
 public function onFlush(OnFlushEventArgs $event)
 {
     $uow = $event->getEntityManager()->getUnitOfWork();
     $this->emailOwnerManager->handleOnFlush($event);
     $this->emailThreadManager->handleOnFlush($event);
     $this->emailActivityManager->handleOnFlush($event);
     $this->addNewEntityOwnedByEmail($uow->getScheduledEntityInsertions());
 }
 /**
  * @param OnFlushEventArgs $event
  */
 public function onFlush(OnFlushEventArgs $event)
 {
     $em = $event->getEntityManager();
     $uow = $em->getUnitOfWork();
     $emailAddressData = $this->emailOwnerManager->createEmailAddressData($uow);
     $updatedEmailAddresses = $this->emailOwnerManager->handleChangedAddresses($emailAddressData);
     foreach ($updatedEmailAddresses as $emailAddress) {
         $this->computeEntityChangeSet($em, $emailAddress);
     }
     $createdEmails = array_filter($uow->getScheduledEntityInsertions(), $this->getEmailFilter());
     $this->createdEmails = array_merge($this->createdEmails, $createdEmails);
     $this->activityManagerEmails = array_merge($this->activityManagerEmails, $createdEmails);
     $this->updatedEmails = array_merge($this->updatedEmails, array_filter($uow->getScheduledEntityUpdates(), $this->getEmailFilter()));
     $this->addNewEntityOwnedByEmail($uow->getScheduledEntityInsertions());
 }
 /**
  * @dataProvider createEmailAddressDataProvider
  */
 public function testCreateEmailAddressData(UnitOfWork $uow, $result)
 {
     $this->assertEquals($result, $this->emailOwnerManager->createEmailAddressData($uow));
 }
 /**
  * @param OnFlushEventArgs $event
  */
 public function onFlush(OnFlushEventArgs $event)
 {
     $this->emailOwnerManager->handleOnFlush($event);
 }
 /**
  * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  */
 public function testHandleOnFlush()
 {
     $this->initOnFlush();
     $emailAddrManager = $this->getMockBuilder('Oro\\Bundle\\EmailBundle\\Entity\\Manager\\EmailAddressManager')->disableOriginalConstructor()->getMock();
     $manager = new EmailOwnerManager($this->getEmailOwnerProviderStorage(), $emailAddrManager);
     $owner1 = new TestEmailOwner(1);
     $owner2 = new TestEmailOwner(2);
     $owner3 = new TestEmailOwner(3);
     $owner4 = new TestEmailOwnerWithoutEmail(4);
     $newOwner1 = new TestEmailOwner(null, 'newOwner1');
     $newOwner2 = new TestEmailOwner(null, 'newOwner2');
     $deletingOwner1 = new TestEmailOwner(100);
     $deletingOwner2 = new TestEmailOwnerWithoutEmail(100);
     $deletingOwner3 = new TestEmailOwner(200);
     $owner1NewEmail = new TestEmail(null, $owner1);
     $owner2Email = new TestEmail(1, $owner2);
     $deletingEmail1 = new TestEmail(2, $owner1, 'deleting_email1');
     $owner1OldPrimaryEmailAddr = new TestEmailAddressProxy($owner1);
     $owner1NewPrimaryEmailAddr = new TestEmailAddressProxy();
     $owner1OldHomeEmailAddr = new TestEmailAddressProxy($owner1);
     $owner1NewHomeEmailAddr = new TestEmailAddressProxy($owner2);
     $owner2NewPrimaryEmailAddr = new TestEmailAddressProxy($owner1);
     $owner3OldPrimaryEmailAddr = new TestEmailAddressProxy($owner3);
     $newOwner2NewPrimaryEmailAddr = new TestEmailAddressProxy();
     $owner1NewEmailAddr = new TestEmailAddressProxy();
     $owner2EmailAddr = new TestEmailAddressProxy($owner1);
     $deletingOwner2EmailAddr = new TestEmailAddressProxy($deletingOwner2);
     $deletingOwner3EmailAddr1 = new TestEmailAddressProxy($deletingOwner3);
     $deletingOwner3EmailAddr2 = new TestEmailAddressProxy($deletingOwner3);
     $deletingEmail1EmailAddr = new TestEmailAddressProxy($deletingEmail1->getEmailOwner());
     $scheduledEntityInsertions = [$newOwner1, $newOwner2, $owner1NewEmail];
     $scheduledEntityUpdates = [$owner1, $owner2, $owner3, $owner4, $owner2Email];
     $scheduledEntityDeletions = [$deletingOwner1, $deletingOwner2, $deletingOwner3, $deletingEmail1];
     $this->uow->expects($this->any())->method('getEntityChangeSet')->will($this->returnValueMap([[$owner1, ['name' => ['old_name', 'new_name'], 'primaryEmail' => ['old_email1', 'new_email1'], 'homeEmail' => ['old_home_email1', 'new_home_email1']]], [$owner2, ['primaryEmail' => [null, 'new_email2']]], [$owner3, ['primaryEmail' => ['old_email3', null]]], [$owner4, ['primaryEmail' => ['old_email4', 'new_email4']]], [$newOwner1, ['primaryEmail' => [null, null]]], [$newOwner2, ['primaryEmail' => [null, 'new_email20']]], [$owner1NewEmail, ['email' => [null, 'new_email1_1']]], [$owner2Email, ['email' => ['new_email1_1', 'new_email2_1']]]]));
     $this->uow->expects($this->once())->method('getScheduledEntityInsertions')->will($this->returnValue($scheduledEntityInsertions));
     $this->uow->expects($this->once())->method('getScheduledEntityUpdates')->will($this->returnValue($scheduledEntityUpdates));
     $this->uow->expects($this->once())->method('getScheduledEntityDeletions')->will($this->returnValue($scheduledEntityDeletions));
     $emailAddrRepo = $this->createEntityRepositoryMock();
     $emailAddrManager->expects($this->any())->method('getEmailAddressRepository')->will($this->returnValue($emailAddrRepo));
     $emailAddrManager->expects($this->any())->method('newEmailAddress')->will($this->onConsecutiveCalls($newOwner2NewPrimaryEmailAddr, $owner1NewPrimaryEmailAddr, $owner1NewEmailAddr));
     $emailAddrRepo->expects($this->any())->method('findOneBy')->will($this->returnCallback(function ($criteria) use($owner1OldPrimaryEmailAddr, $owner1OldHomeEmailAddr, $owner1NewHomeEmailAddr, $owner2NewPrimaryEmailAddr, $owner2EmailAddr, $owner3OldPrimaryEmailAddr, $deletingEmail1EmailAddr) {
         //@codingStandardsIgnoreEnd
         switch ($criteria['email']) {
             case 'old_email1':
                 return $owner1OldPrimaryEmailAddr;
             case 'old_home_email1':
                 return $owner1OldHomeEmailAddr;
             case 'new_home_email1':
                 return $owner1NewHomeEmailAddr;
             case 'new_email2':
                 return $owner2NewPrimaryEmailAddr;
             case 'new_email2_1':
                 return $owner2EmailAddr;
             case 'old_email3':
                 return $owner3OldPrimaryEmailAddr;
             case 'deleting_email1':
                 return $deletingEmail1EmailAddr;
             default:
                 return null;
         }
     }));
     $emailAddrRepo->expects($this->any())->method('findBy')->will($this->returnCallback(function ($criteria) use($deletingOwner1, $deletingOwner2, $deletingOwner3, $deletingOwner2EmailAddr, $deletingOwner3EmailAddr1, $deletingOwner3EmailAddr2) {
         //@codingStandardsIgnoreEnd
         if ($criteria == ['owner1' => $deletingOwner1]) {
             return [];
         } elseif ($criteria == ['owner2' => $deletingOwner2]) {
             return [$deletingOwner2EmailAddr];
         } elseif ($criteria == ['owner1' => $deletingOwner3]) {
             return [$deletingOwner3EmailAddr1, $deletingOwner3EmailAddr2];
         }
         return [];
     }));
     $this->uow->expects($this->exactly(13))->method('computeChangeSet')->with($this->anything(), $this->logicalOr($this->identicalTo($owner1OldPrimaryEmailAddr), $this->identicalTo($owner1NewPrimaryEmailAddr), $this->identicalTo($owner1OldHomeEmailAddr), $this->identicalTo($owner1NewHomeEmailAddr), $this->identicalTo($owner1NewEmailAddr), $this->identicalTo($owner2NewPrimaryEmailAddr), $this->identicalTo($owner2EmailAddr), $this->identicalTo($owner3OldPrimaryEmailAddr), $this->identicalTo($newOwner2NewPrimaryEmailAddr), $this->identicalTo($deletingOwner2EmailAddr), $this->identicalTo($deletingOwner3EmailAddr1), $this->identicalTo($deletingOwner3EmailAddr2), $this->identicalTo($deletingEmail1EmailAddr)));
     $manager->handleOnFlush($this->createOnFlushEventArgsMock());
     $this->assertNull($owner1OldPrimaryEmailAddr->getOwner());
     $this->assertSame($owner1, $owner1NewPrimaryEmailAddr->getOwner());
     $this->assertNull($owner1OldHomeEmailAddr->getOwner());
     $this->assertSame($owner1, $owner1NewHomeEmailAddr->getOwner());
     $this->assertSame($owner1, $owner1NewEmailAddr->getOwner());
     $this->assertSame($owner2, $owner2NewPrimaryEmailAddr->getOwner());
     $this->assertSame($owner2, $owner2EmailAddr->getOwner());
     $this->assertNull($owner3OldPrimaryEmailAddr->getOwner());
     $this->assertSame($newOwner2, $newOwner2NewPrimaryEmailAddr->getOwner());
     $this->assertNull($deletingOwner2EmailAddr->getOwner());
     $this->assertNull($deletingOwner3EmailAddr1->getOwner());
     $this->assertNull($deletingOwner3EmailAddr2->getOwner());
     $this->assertNull($deletingEmail1EmailAddr->getOwner());
 }