/** * {@inheritdoc} */ public function load(ObjectManager $manager) { $userManager = $this->container->get('oro_user.manager'); $organization = $manager->getRepository('OroOrganizationBundle:Organization')->getFirst(); $role = $manager->getRepository('OroUserBundle:Role')->findOneBy(['role' => 'ROLE_ADMINISTRATOR']); $user = $userManager->createUser(); $user->setUsername('simple_user')->setPlainPassword('simple_password')->setEmail('*****@*****.**')->setOrganization($organization)->addOrganization($organization)->setEnabled(true)->addRole($role); $folder = new EmailFolder(); $folder->setName('sent'); $folder->setFullName('sent'); $folder->setType('sent'); $origin = new InternalEmailOrigin(); $origin->setName('simple_user_origin_name'); $origin->setActive(true); $origin->addFolder($folder); $origin->setOwner($user); $origin->setOrganization($organization); $user->addEmailOrigin($origin); $userManager->updateUser($user); $user2 = $userManager->createUser(); $user2->setUsername('simple_user2')->setPlainPassword('simple_password2')->setFirstName('Elley')->setLastName('Towards')->setEmail('*****@*****.**')->setOrganization($organization)->addOrganization($organization)->setEnabled(true); $folder2 = new EmailFolder(); $folder2->setName('sent'); $folder2->setFullName('sent'); $folder2->setType('sent'); $origin2 = new InternalEmailOrigin(); $origin2->setName('simple_user_origin_name_2'); $origin2->setActive(true); $origin2->addFolder($folder2); $origin2->setOwner($user2); $origin2->setOrganization($organization); $user2->addEmailOrigin($origin); $userManager->updateUser($user2); $this->setReference($user->getUsername(), $user); $this->setReference($user2->getUsername(), $user2); }
/** * Performs synchronization of folders * * @param EmailOrigin $origin * * @return ImapEmailFolder[] The list of folders for which emails need to be synchronized */ protected function syncFolders(EmailOrigin $origin) { $folders = []; $existingImapFolders = $this->getExistingImapFolders($origin); $srcFolders = $this->getFolders(); foreach ($srcFolders as $srcFolder) { $folderFullName = $srcFolder->getGlobalName(); $uidValidity = $this->getUidValidity($srcFolder); // check if the current folder already exist and has no changes, // if so, remove it from the list of existing folders $imapFolder = null; foreach ($existingImapFolders as $key => $existingImapFolder) { if ($existingImapFolder->getUidValidity() === $uidValidity && $existingImapFolder->getFolder()->getFullName() === $folderFullName) { $imapFolder = $existingImapFolder; unset($existingImapFolders[$key]); break; } } // check if new folder need to be created if (!$imapFolder) { $this->logger->notice(sprintf('Persisting "%s" folder ...', $folderFullName)); $folder = new EmailFolder(); $folder->setFullName($folderFullName)->setName($srcFolder->getLocalName())->setType($srcFolder->guessFolderType()); $origin->addFolder($folder); $this->em->persist($folder); $imapFolder = new ImapEmailFolder(); $imapFolder->setFolder($folder); $imapFolder->setUidValidity($uidValidity); $this->em->persist($imapFolder); $this->logger->notice(sprintf('The "%s" folder was persisted.', $folderFullName)); } // save folder to the list of folders to be synchronized $folders[] = $imapFolder; } // mark the rest of existing folders as outdated foreach ($existingImapFolders as $imapFolder) { $this->logger->notice(sprintf('Mark "%s" folder as outdated.', $imapFolder->getFolder()->getFullName())); $imapFolder->getFolder()->setOutdatedAt(new \DateTime('now', new \DateTimeZone('UTC'))); $this->em->persist($imapFolder->getFolder()); } $this->em->persist($origin); $this->em->flush(); return $folders; }
/** * @param Folder $srcFolder * * @return EmailFolderModel */ protected function createEmailFolderModel(Folder $srcFolder, $uidValidity) { $folder = new EmailFolder(); $folder->setFullName($srcFolder->getGlobalName())->setName($srcFolder->getLocalName())->setType($srcFolder->guessFolderType())->setOrigin($this->origin); $emailFolderModel = new EmailFolderModel(); $emailFolderModel->setUidValidity($uidValidity); $emailFolderModel->setEmailFolder($folder); return $emailFolderModel; }
/** * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function testPersist() { $origin = $this->getMockBuilder('Oro\\Bundle\\EmailBundle\\Entity\\EmailOrigin')->getMock(); $origin->expects($this->any())->method('getId')->will($this->returnValue(1)); $folder = new EmailFolder(); $folder->setName('Exist'); $folder->setFullName('Exist'); $folder->setOrigin($origin); $this->batch->addFolder($folder); $newFolder = new EmailFolder(); $newFolder->setName('New'); $newFolder->setFullName('New'); $newFolder->setOrigin($origin); $this->batch->addFolder($newFolder); $dbFolder = new EmailFolder(); $dbFolder->setName('DbExist'); $dbFolder->setFullName('DbExist'); $dbFolder->setOrigin($origin); $addr = $this->addrManager->newEmailAddress()->setEmail('Exist'); $this->batch->addAddress($addr); $newAddr = $this->addrManager->newEmailAddress()->setEmail('New'); $this->batch->addAddress($newAddr); $dbAddr = $this->addrManager->newEmailAddress()->setEmail('DbExist'); $email1 = new Email(); $email1->setXMessageId('email1'); $email1->setMessageId('email1'); $email1->setFromEmailAddress($addr); $emailUser1 = new EmailUser(); $emailUser1->addFolder($folder); $emailUser1->setOrigin($origin); $email1->addEmailUser($emailUser1); $this->addEmailRecipient($email1, $addr); $this->addEmailRecipient($email1, $newAddr); $this->batch->addEmailUser($emailUser1); $email2 = new Email(); $email2->setXMessageId('email2'); $email2->setMessageId('email2'); $email2->setFromEmailAddress($newAddr); $emailUser2 = new EmailUser(); $emailUser2->addFolder($newFolder); $emailUser2->setOrigin($origin); $email2->addEmailUser($emailUser2); $this->addEmailRecipient($email2, $addr); $this->addEmailRecipient($email2, $newAddr); $this->batch->addEmailUser($emailUser2); $email3 = new Email(); $email3->setXMessageId('email3'); $email3->setMessageId('some_email'); $email3->setFromEmailAddress($newAddr); $emailUser3 = new EmailUser(); $emailUser3->addFolder($folder); $email3->addEmailUser($emailUser3); $this->addEmailRecipient($email3, $addr); $this->addEmailRecipient($email3, $newAddr); $this->batch->addEmailUser($emailUser3); $email4 = new Email(); $email4->setXMessageId('email4'); $email4->setMessageId('some_email'); $email4->setFromEmailAddress($newAddr); $emailUser4 = new EmailUser(); $emailUser4->addFolder($folder); $email4->addEmailUser($emailUser4); $this->addEmailRecipient($email4, $addr); $this->addEmailRecipient($email4, $newAddr); $this->batch->addEmailUser($emailUser4); $existingEmail = new Email(); $existingEmail->setXMessageId('existing_email'); $existingEmail->setMessageId('some_email'); $existingEmail->setFromEmailAddress($newAddr); $emailUser5 = new EmailUser(); $emailUser5->addFolder($dbFolder); $existingEmail->addEmailUser($emailUser5); $this->addEmailRecipient($existingEmail, $addr); $this->addEmailRecipient($existingEmail, $newAddr); $em = $this->getMockBuilder('Doctrine\\ORM\\EntityManager')->disableOriginalConstructor()->getMock(); $folderRepo = $this->getMockBuilder('Doctrine\\ORM\\EntityRepository')->disableOriginalConstructor()->getMock(); $addrRepo = $this->getMockBuilder('Doctrine\\ORM\\EntityRepository')->disableOriginalConstructor()->getMock(); $emailRepo = $this->getMockBuilder('Doctrine\\ORM\\EntityRepository')->disableOriginalConstructor()->getMock(); $em->expects($this->exactly(3))->method('getRepository')->will($this->returnValueMap(array(array('OroEmailBundle:EmailFolder', $folderRepo), array('Oro\\Bundle\\EmailBundle\\Tests\\Unit\\Entity\\TestFixtures\\TestEmailAddressProxy', $addrRepo), array('OroEmailBundle:Email', $emailRepo)))); $folderRepo->expects($this->exactly(2))->method('findOneBy')->will($this->returnCallback(function ($c) use(&$dbFolder) { return $c['fullName'] === 'Exist' ? $dbFolder : null; })); $addrRepo->expects($this->exactly(2))->method('findOneBy')->will($this->returnCallback(function ($c) use(&$dbAddr) { return $c['email'] === 'Exist' ? $dbAddr : null; })); $emailRepo->expects($this->once())->method('findBy')->with(array('messageId' => array('email1', 'email2', 'some_email')))->will($this->returnValue([$existingEmail])); $owner = $this->getMock('Oro\\Bundle\\EmailBundle\\Entity\\EmailOwnerInterface'); $this->ownerProvider->expects($this->any())->method('findEmailOwner')->will($this->returnValue($owner)); $this->batch->persist($em); $this->assertCount(1, $email1->getEmailUsers()); $this->assertCount(1, $email2->getEmailUsers()); $this->assertTrue($origin === $emailUser1->getOrigin()); $this->assertTrue($origin === $emailUser2->getOrigin()); $this->assertSame($newFolder, $emailUser2->getFolders()->first()); $this->assertSame($dbFolder, $emailUser1->getFolders()->first()); $this->assertTrue($dbAddr === $email1->getFromEmailAddress()); $this->assertNull($email1->getFromEmailAddress()->getOwner()); $this->assertTrue($newAddr === $email2->getFromEmailAddress()); $this->assertTrue($owner === $email2->getFromEmailAddress()->getOwner()); $email1Recipients = $email1->getRecipients(); $this->assertTrue($dbAddr === $email1Recipients[0]->getEmailAddress()); $this->assertNull($email1Recipients[0]->getEmailAddress()->getOwner()); $this->assertTrue($newAddr === $email1Recipients[1]->getEmailAddress()); $this->assertTrue($owner === $email1Recipients[1]->getEmailAddress()->getOwner()); $email2Recipients = $email2->getRecipients(); $this->assertTrue($dbAddr === $email2Recipients[0]->getEmailAddress()); $this->assertNull($email2Recipients[0]->getEmailAddress()->getOwner()); $this->assertTrue($newAddr === $email2Recipients[1]->getEmailAddress()); $this->assertTrue($owner === $email2Recipients[1]->getEmailAddress()->getOwner()); $changes = $this->batch->getChanges(); $this->assertCount(3, $changes); $this->assertSame($folder, $changes[0]['old']); $this->assertSame($dbFolder, $changes[0]['new']); $this->assertSame($email3, $changes[1]['old']); $this->assertSame($existingEmail, $changes[1]['new']); $this->assertSame($email4, $changes[2]['old']); $this->assertSame($existingEmail, $changes[2]['new']); }
public function testFullNameGetterAndSetter() { $entity = new EmailFolder(); $entity->setFullName('test'); $this->assertEquals('test', $entity->getFullName()); }
/** * Check the given folders and if needed correct them * * @param EmailFolder[] $folders * @param EmailOrigin $origin */ protected function ensureFoldersInitialized(array &$folders, EmailOrigin $origin) { if (!empty($folders) && count($folders) >= 2) { return; } $this->log->notice('Retrieving folders from an email server ...'); $srcFolders = $this->manager->getFolders(null, true); $this->log->notice(sprintf('Retrieved %d folder(s).', count($srcFolders))); foreach ($srcFolders as $srcFolder) { $type = null; if ($srcFolder->hasFlag(Folder::FLAG_INBOX)) { $type = EmailFolder::INBOX; } elseif ($srcFolder->hasFlag(Folder::FLAG_SENT)) { $type = EmailFolder::SENT; } if ($type !== null) { $globalName = $srcFolder->getGlobalName(); if ($this->isFolderExist($folders, $type, $globalName)) { continue; } $this->log->notice(sprintf('Persisting "%s" folder ...', $globalName)); $folder = new EmailFolder(); $folder->setFullName($globalName)->setName($srcFolder->getLocalName())->setType($type); $origin->addFolder($folder); $this->em->persist($origin); $this->em->persist($folder); $folders[] = $folder; $this->log->notice(sprintf('The "%s" folder was persisted.', $globalName)); } } $this->em->flush(); }
/** * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function testPersist() { $origin = $this->getMockBuilder('Oro\\Bundle\\EmailBundle\\Entity\\EmailOrigin')->getMock(); $origin->expects($this->any())->method('getId')->will($this->returnValue(1)); $this->batch->addOrigin($origin); $folder = new EmailFolder(); $folder->setName('Exist'); $folder->setFullName('Exist'); $folder->setOrigin($origin); $this->batch->addFolder($folder); $newFolder = new EmailFolder(); $newFolder->setName('New'); $newFolder->setFullName('New'); $newFolder->setOrigin($origin); $this->batch->addFolder($newFolder); $dbFolder = new EmailFolder(); $dbFolder->setName('DbExist'); $dbFolder->setFullName('DbExist'); $dbFolder->setOrigin($origin); $addr = $this->addrManager->newEmailAddress()->setEmail('Exist'); $this->batch->addAddress($addr); $newAddr = $this->addrManager->newEmailAddress()->setEmail('New'); $this->batch->addAddress($newAddr); $dbAddr = $this->addrManager->newEmailAddress()->setEmail('DbExist'); $email1 = new Email(); $email1->setFolder($folder); $email1->setFromEmailAddress($addr); $email1Recip1 = new EmailRecipient(); $email1Recip1->setEmailAddress($addr); $email1Recip2 = new EmailRecipient(); $email1Recip2->setEmailAddress($newAddr); $email1->addRecipient($email1Recip1); $email1->addRecipient($email1Recip2); $this->batch->addEmail($email1); $email2 = new Email(); $email2->setFolder($newFolder); $email2->setFromEmailAddress($newAddr); $email2Recip1 = new EmailRecipient(); $email2Recip1->setEmailAddress($addr); $email2Recip2 = new EmailRecipient(); $email2Recip2->setEmailAddress($newAddr); $email2->addRecipient($email2Recip1); $email2->addRecipient($email2Recip2); $this->batch->addEmail($email2); $em = $this->getMockBuilder('Doctrine\\ORM\\EntityManager')->disableOriginalConstructor()->getMock(); $folderRepo = $this->getMockBuilder('Doctrine\\ORM\\EntityRepository')->disableOriginalConstructor()->getMock(); $addrRepo = $this->getMockBuilder('Doctrine\\ORM\\EntityRepository')->disableOriginalConstructor()->getMock(); $em->expects($this->exactly(2))->method('getRepository')->will($this->returnValueMap(array(array('OroEmailBundle:EmailFolder', $folderRepo), array('Oro\\Bundle\\EmailBundle\\Tests\\Unit\\Entity\\TestFixtures\\TestEmailAddressProxy', $addrRepo)))); $folderRepo->expects($this->exactly(2))->method('findOneBy')->will($this->returnCallback(function ($c) use(&$dbFolder) { return $c['fullName'] === 'Exist' ? $dbFolder : null; })); $addrRepo->expects($this->exactly(2))->method('findOneBy')->will($this->returnCallback(function ($c) use(&$dbAddr) { return $c['email'] === 'Exist' ? $dbAddr : null; })); $em->expects($this->exactly(4))->method('persist')->with($this->logicalOr($this->identicalTo($newFolder), $this->identicalTo($newAddr), $this->identicalTo($email1), $this->identicalTo($email2))); $owner = $this->getMock('Oro\\Bundle\\EmailBundle\\Entity\\EmailOwnerInterface'); $this->ownerProvider->expects($this->any())->method('findEmailOwner')->will($this->returnValue($owner)); $this->batch->persist($em); $this->assertTrue($origin === $email1->getFolder()->getOrigin()); $this->assertTrue($origin === $email2->getFolder()->getOrigin()); $this->assertTrue($dbFolder === $email1->getFolder()); $this->assertTrue($newFolder === $email2->getFolder()); $this->assertTrue($dbAddr === $email1->getFromEmailAddress()); $this->assertNull($email1->getFromEmailAddress()->getOwner()); $this->assertTrue($newAddr === $email2->getFromEmailAddress()); $this->assertTrue($owner === $email2->getFromEmailAddress()->getOwner()); $email1Recipients = $email1->getRecipients(); $this->assertTrue($dbAddr === $email1Recipients[0]->getEmailAddress()); $this->assertNull($email1Recipients[0]->getEmailAddress()->getOwner()); $this->assertTrue($newAddr === $email1Recipients[1]->getEmailAddress()); $this->assertTrue($owner === $email1Recipients[1]->getEmailAddress()->getOwner()); $email2Recipients = $email2->getRecipients(); $this->assertTrue($dbAddr === $email2Recipients[0]->getEmailAddress()); $this->assertNull($email2Recipients[0]->getEmailAddress()->getOwner()); $this->assertTrue($newAddr === $email2Recipients[1]->getEmailAddress()); $this->assertTrue($owner === $email2Recipients[1]->getEmailAddress()->getOwner()); }