Exemplo n.º 1
0
 public function testWarmUpAndIsOptional()
 {
     $oroProvider = $this->getMock('Oro\\Bundle\\EmailBundle\\Entity\\Provider\\EmailOwnerProviderInterface');
     $oroProvider->expects($this->any())->method('getEmailOwnerClass')->will($this->returnValue('Oro\\TestUser'));
     $oroCrmProvider = $this->getMock('Oro\\Bundle\\EmailBundle\\Entity\\Provider\\EmailOwnerProviderInterface');
     $oroCrmProvider->expects($this->any())->method('getEmailOwnerClass')->will($this->returnValue('OroCRM\\TestContact'));
     $acmeProvider = $this->getMock('Oro\\Bundle\\EmailBundle\\Entity\\Provider\\EmailOwnerProviderInterface');
     $acmeProvider->expects($this->any())->method('getEmailOwnerClass')->will($this->returnValue('Acme\\TestUser'));
     $storage = new EmailOwnerProviderStorage();
     $storage->addProvider($oroProvider);
     $storage->addProvider($oroCrmProvider);
     $storage->addProvider($acmeProvider);
     $kernel = $this->getMock('Symfony\\Component\\HttpKernel\\KernelInterface');
     $warmer = $this->getMockBuilder('Oro\\Bundle\\EmailBundle\\Cache\\EntityCacheWarmer')->setConstructorArgs(array($storage, 'SomeDir', 'Test\\SomeNamespace', 'Test%sProxy', $kernel))->setMethods(array('createFilesystem', 'createTwigEnvironment', 'writeCacheFile'))->getMock();
     $fs = $this->getMockBuilder('Symfony\\Component\\Filesystem\\Filesystem')->disableOriginalConstructor()->getMock();
     $twig = $this->getMockBuilder('\\Twig_Environment')->disableOriginalConstructor()->getMock();
     $warmer->expects($this->once())->method('createFilesystem')->will($this->returnValue($fs));
     $warmer->expects($this->once())->method('createTwigEnvironment')->will($this->returnValue($twig));
     $fs->expects($this->once())->method('exists')->with($this->equalTo('SomeDir'));
     $fs->expects($this->once())->method('mkdir')->with($this->equalTo('SomeDir'), $this->equalTo(0777));
     $this->setTwigAndSaveExpectations($twig, $warmer, '.php', 0);
     $this->setTwigAndSaveExpectations($twig, $warmer, '.orm.yml', 1);
     $warmer->warmup('');
     $this->assertFalse($warmer->isOptional());
 }
Exemplo n.º 2
0
 public function setUp()
 {
     $this->fixtures = ['primaryEmail' => [1 => (new EmailAddress(1))->setEmail('*****@*****.**'), 2 => (new EmailAddress(2))->setEmail('*****@*****.**')], 'email' => ['*****@*****.**' => (new EmailAddress(1))->setEmail('*****@*****.**'), '*****@*****.**' => (new EmailAddress(2))->setEmail('*****@*****.**')]];
     $emailOwnerProvider = $this->getMock('Oro\\Bundle\\EmailBundle\\Entity\\Provider\\EmailOwnerProviderInterface');
     $emailOwnerProvider->expects($this->any())->method('getEmailOwnerClass')->will($this->returnValue('Oro\\Bundle\\EmailBundle\\Tests\\Unit\\Entity\\TestFixtures\\TestEmailOwner'));
     $this->emailOwnerProviderStorage = $this->getMockBuilder('Oro\\Bundle\\EmailBundle\\Entity\\Provider\\EmailOwnerProviderStorage')->disableOriginalConstructor()->getMock();
     $this->emailOwnerProviderStorage->expects($this->any())->method('getProviders')->will($this->returnValue([$emailOwnerProvider, $emailOwnerProvider]));
     $this->emailOwnerProviderStorage->expects($this->any())->method('getEmailOwnerFieldName')->will($this->onConsecutiveCalls('primaryEmail', 'homeEmail'));
     $emailAddressRepository = $this->getMockBuilder('Doctrine\\ORM\\EntityRepository')->disableOriginalConstructor()->getMock();
     $emailAddressRepository->expects($this->any())->method('findOneBy')->will($this->returnCallback(function (array $criteria) {
         return $this->findEmailAddressBy($criteria['email']);
     }));
     $emailAddressRepository->expects($this->any())->method('findBy')->will($this->returnCallback(function (array $criteria) {
         $keys = array_keys($criteria);
         $owner = $criteria[$keys[0]];
         $emailAddress = $this->findEmailAddressBy($owner->getId(), $keys[0]);
         if ($emailAddress) {
             return [$emailAddress];
         }
         return [];
     }));
     $em = $this->getMockBuilder('Doctrine\\ORM\\EntityManager')->disableOriginalConstructor()->getMock();
     $this->emailAddressManager = $this->getMockBuilder('Oro\\Bundle\\EmailBundle\\Entity\\Manager\\EmailAddressManager')->disableOriginalConstructor()->getMock();
     $this->emailAddressManager->expects($this->any())->method('getEmailAddressRepository')->will($this->returnValue($emailAddressRepository));
     $this->emailAddressManager->expects($this->any())->method('newEmailAddress')->will($this->returnValue(new EmailAddress()));
     $this->emailAddressManager->expects($this->any())->method('getEntityManager')->will($this->returnValue($em));
     $this->emailOwnerManager = new EmailOwnerManager($this->emailOwnerProviderStorage, $this->emailAddressManager);
 }
Exemplo n.º 3
0
 /**
  * Constructor.
  *
  * @param EmailOwnerProviderStorage $emailOwnerProviderStorage
  * @param EmailAddressManager       $emailAddressManager
  */
 public function __construct(EmailOwnerProviderStorage $emailOwnerProviderStorage, EmailAddressManager $emailAddressManager)
 {
     foreach ($emailOwnerProviderStorage->getProviders() as $provider) {
         $fieldName = $emailOwnerProviderStorage->getEmailOwnerFieldName($provider);
         $this->emailOwnerClasses[$fieldName] = $provider->getEmailOwnerClass();
     }
     $this->emailAddressManager = $emailAddressManager;
 }
 /**
  * Constructor.
  *
  * @param EmailOwnerProviderStorage $emailOwnerProviderStorage
  * @param EmailAddressManager $emailAddressManager
  */
 public function __construct(EmailOwnerProviderStorage $emailOwnerProviderStorage, EmailAddressManager $emailAddressManager)
 {
     foreach ($emailOwnerProviderStorage->getProviders() as $provider) {
         $fieldName = sprintf('owner%d', count($this->emailOwnerClasses) + 1);
         $this->emailOwnerClasses[$fieldName] = $provider->getEmailOwnerClass();
     }
     $this->emailAddressManager = $emailAddressManager;
 }
 /**
  * Constructor.
  *
  * @param EmailOwnerProviderStorage $emailOwnerProviderStorage
  * @param string $entityCacheDir
  * @param string $entityCacheNamespace
  * @param string $entityProxyNameTemplate
  */
 public function __construct(EmailOwnerProviderStorage $emailOwnerProviderStorage, $entityCacheDir, $entityCacheNamespace, $entityProxyNameTemplate)
 {
     foreach ($emailOwnerProviderStorage->getProviders() as $provider) {
         $this->emailOwnerClasses[count($this->emailOwnerClasses) + 1] = $provider->getEmailOwnerClass();
     }
     $this->entityCacheDir = $entityCacheDir;
     $this->entityCacheNamespace = $entityCacheNamespace;
     $this->entityProxyNameTemplate = $entityProxyNameTemplate;
 }
Exemplo n.º 6
0
 /**
  * @param object $entity
  * @return bool
  */
 public function supportOwnerProvider($entity)
 {
     foreach ($this->emailOwnerStorage->getProviders() as $provider) {
         if ($this->activityListChainProvider->isSupportedTargetEntity($entity) && $provider->getEmailOwnerClass() === ClassUtils::getClass($entity)) {
             return true;
         }
     }
     return false;
 }
Exemplo n.º 7
0
 /**
  * Find an entity object which is an owner of the given email address
  *
  * @param \Doctrine\ORM\EntityManager $em
  * @param string $email
  * @return EmailOwnerInterface
  */
 public function findEmailOwner(EntityManager $em, $email)
 {
     $emailOwner = null;
     foreach ($this->emailOwnerProviderStorage->getProviders() as $provider) {
         $emailOwner = $provider->findEmailOwner($em, $email);
         if ($emailOwner !== null) {
             break;
         }
     }
     return $emailOwner;
 }
 public function testStorage()
 {
     $provider1 = $this->getMock('Oro\\Bundle\\EmailBundle\\Entity\\Provider\\EmailOwnerProviderInterface');
     $provider2 = $this->getMock('Oro\\Bundle\\EmailBundle\\Entity\\Provider\\EmailOwnerProviderInterface');
     $storage = new EmailOwnerProviderStorage();
     $storage->addProvider($provider1);
     $storage->addProvider($provider2);
     $result = $storage->getProviders();
     $this->assertCount(2, $result);
     $this->assertTrue($provider1 === $result[0]);
     $this->assertTrue($provider2 === $result[1]);
 }
Exemplo n.º 9
0
 protected function setUp()
 {
     $this->emailOwnerManager = $this->getMockBuilder('Oro\\Bundle\\EmailBundle\\Entity\\Manager\\EmailOwnerManager')->disableOriginalConstructor()->getMock();
     $this->emailActivityManager = $this->getMockBuilder('Oro\\Bundle\\EmailBundle\\Entity\\Manager\\EmailActivityManager')->disableOriginalConstructor()->getMock();
     $this->emailThreadManager = $this->getMockBuilder('Oro\\Bundle\\EmailBundle\\Entity\\Manager\\EmailThreadManager')->disableOriginalConstructor()->getMock();
     $this->registry = $this->getMockBuilder('Doctrine\\Bundle\\DoctrineBundle\\Registry')->setMethods(['getRepository', 'getEmailsByOwnerEntity'])->disableOriginalConstructor()->getMock();
     $this->userEmailOwnerProvider = $this->getMockBuilder('Oro\\Bundle\\UserBundle\\Entity\\Provider\\EmailOwnerProvider')->disableOriginalConstructor()->getMock();
     $this->chainProvider = $this->getMockBuilder('Oro\\Bundle\\ActivityListBundle\\Provider\\ActivityListChainProvider')->disableOriginalConstructor()->getMock();
     $this->emailOwnerStorage = new EmailOwnerProviderStorage();
     $this->emailOwnerStorage->addProvider($this->userEmailOwnerProvider);
     $this->emailOwnersProvider = $this->getMockBuilder('Oro\\Bundle\\EmailBundle\\Provider\\EmailOwnersProvider')->setConstructorArgs([$this->chainProvider, $this->emailOwnerStorage, $this->registry])->setMethods(['supportOwnerProvider'])->getMock();
     $this->listener = new EntityListener($this->emailOwnerManager, $this->emailActivityManager, $this->emailThreadManager, $this->emailOwnersProvider);
 }
Exemplo n.º 10
0
 public function testPrepareQueryOneProviderGiven()
 {
     $provider = $this->getMock('Oro\\Bundle\\EmailBundle\\Entity\\Provider\\EmailOwnerProviderInterface');
     $provider->expects($this->any())->method('getEmailOwnerClass')->will($this->returnValue(self::TEST_ENTITY));
     $this->registry->addProvider($provider);
     $this->formatter->expects($this->once())->method('getFormattedNameDQL')->with($this->equalTo('owner1'), $this->equalTo(self::TEST_ENTITY))->will($this->returnValue(self::TEST_NAME_DQL_FORMATTED));
     $em = $this->getTestEntityManager();
     $qb = $em->createQueryBuilder();
     $qb->select('e')->from('OroEmailBundle:Email', 'e')->leftJoin('e.fromEmailAddress', self::JOIN_ALIAS);
     $this->factory->prepareQuery($qb);
     // @codingStandardsIgnoreStart
     $this->assertEquals("SELECT e, " . "CONCAT('', CASE WHEN a.hasOwner = true THEN (" . "CASE WHEN a.owner1 IS NOT NULL THEN CONCAT(a.firstName, CONCAT(a.lastName, '')) ELSE '' END" . ") ELSE a.email END) as fromEmailExpression " . "FROM OroEmailBundle:Email e LEFT JOIN e.fromEmailAddress a LEFT JOIN a.owner1 owner1", $qb->getDQL());
     // @codingStandardsIgnoreEnd
 }
 /**
  * @param string[] $emailsToLoad
  *
  * @return array
  *  key   = email address
  *  value = array
  *      known => true/false
  *          false if the address belongs to user only
  *          true if the address belongs to not excluded owners
  *      user  => user id
  */
 protected function getKnownEmailAddresses(array $emailsToLoad)
 {
     $repo = $this->emailAddressManager->getEmailAddressRepository($this->em);
     $qb = $repo->createQueryBuilder('a')->where('a.hasOwner = :hasOwner AND a.email IN (:emails)')->setParameter('hasOwner', true)->setParameter('emails', $emailsToLoad);
     $select = 'a.email';
     $userIdField = null;
     $mailboxIdField = null;
     $ownerIdFields = [];
     foreach ($this->emailOwnerProviderStorage->getProviders() as $provider) {
         $ownerClass = $provider->getEmailOwnerClass();
         $isUser = $ownerClass === 'Oro\\Bundle\\UserBundle\\Entity\\User';
         $isMailbox = $ownerClass === 'Oro\\Bundle\\EmailBundle\\Entity\\Mailbox';
         $field = $this->emailOwnerProviderStorage->getEmailOwnerFieldName($provider);
         if ($isUser) {
             $userIdField = $field;
         }
         if ($isMailbox) {
             $mailboxIdField = $field;
         }
         if (isset($this->exclusions[$ownerClass])) {
             if ($isUser) {
                 $select .= sprintf(',IDENTITY(a.%1$s) AS %1$s', $field);
             } else {
                 $qb->andWhere(sprintf('a.%s IS NULL', $field));
             }
         } else {
             $select .= sprintf(',IDENTITY(a.%1$s) AS %1$s', $field);
             $ownerIdFields[] = $field;
         }
     }
     $qb->select($select);
     $data = $qb->getQuery()->getArrayResult();
     $result = $this->prepareKnownEmailAddressesData($data, $ownerIdFields, $userIdField, $mailboxIdField);
     return $result;
 }
Exemplo n.º 12
0
 /**
  * @param string $emailFromTableAlias EmailAddress table alias of joined Email#fromEmailAddress association
  *
  * @return string
  */
 protected function getFromEmailExpression($emailFromTableAlias)
 {
     $providers = $this->emailOwnerProviderStorage->getProviders();
     if (empty($providers)) {
         return sprintf('%s.email', $emailFromTableAlias);
     }
     $expressionsByOwner = [];
     foreach ($providers as $provider) {
         $relationAlias = $this->emailOwnerProviderStorage->getEmailOwnerFieldName($provider);
         $expressionsByOwner[$relationAlias] = $this->entityNameResolver->getNameDQL($provider->getEmailOwnerClass(), $relationAlias);
     }
     $expression = '';
     foreach ($expressionsByOwner as $alias => $expressionPart) {
         $expression .= sprintf('WHEN %s.%s IS NOT NULL THEN %s ', $emailFromTableAlias, $alias, $expressionPart);
     }
     $expression = sprintf('CASE %sELSE \'\' END', $expression);
     // if has owner then use expression to expose formatted name, use email otherwise
     return sprintf('CONCAT(\'\', CASE WHEN %1$s.hasOwner = true THEN (%2$s) ELSE %1$s.email END) as fromEmailExpression', $emailFromTableAlias, $expression);
 }
 /**
  * @param RegistryInterface $registry
  * @param string $className
  * @param EmailOwnerProviderStorage $emailOwnerProviderStorage
  * @param UserConfigManager $userConfigManager
  */
 public function __construct(RegistryInterface $registry, $className, EmailOwnerProviderStorage $emailOwnerProviderStorage, UserConfigManager $userConfigManager)
 {
     $this->registry = $registry;
     $this->className = $className;
     $this->alias = 'o';
     // default
     for ($i = 1; $i <= count($emailOwnerProviderStorage->getProviders()); $i++) {
         $this->emailOwnerFieldNames[] = sprintf('owner%d', $i);
     }
     $firstNames = array();
     $lastNames = array();
     foreach ($this->emailOwnerFieldNames as $fieldName) {
         $firstNames[] = sprintf('%s.firstName', $fieldName);
         $lastNames[] = sprintf('%s.lastName', $fieldName);
     }
     $firstName = sprintf('COALESCE(%s, \'\')', implode(', ', $firstNames));
     $lastName = sprintf('COALESCE(%s, \'\')', implode(', ', $lastNames));
     // TODO: refactor usage of email name formats https://magecore.atlassian.net/browse/BAP-2007
     $nameFormat = '%first% %last%';
     $this->fromEmailExpression = $this->buildFromEmailExpression($nameFormat, $firstName, $lastName) . ' as FromEmailExpression';
 }
Exemplo n.º 14
0
 /**
  * @param string[] $emailsToLoad
  *
  * @return array
  *  key   = email address
  *  value = array
  *      known => true/false
  *          false if the address belongs to user only
  *          true if the address belongs to not excluded owners
  *      user  => user id
  */
 protected function getKnownEmailAddresses(array $emailsToLoad)
 {
     $repo = $this->emailAddressManager->getEmailAddressRepository($this->em);
     $qb = $repo->createQueryBuilder('a')->where('a.hasOwner = :hasOwner AND a.email IN (:emails)')->setParameter('hasOwner', true)->setParameter('emails', $emailsToLoad);
     $select = 'a.email';
     $userIdField = null;
     $mailboxIdField = null;
     $ownerIdFields = [];
     foreach ($this->emailOwnerProviderStorage->getProviders() as $provider) {
         $ownerClass = $provider->getEmailOwnerClass();
         $isUser = $ownerClass === 'Oro\\Bundle\\UserBundle\\Entity\\User';
         $isMailbox = $ownerClass === 'Oro\\Bundle\\EmailBundle\\Entity\\Mailbox';
         $field = $this->emailOwnerProviderStorage->getEmailOwnerFieldName($provider);
         if ($isUser) {
             $userIdField = $field;
         }
         if ($isMailbox) {
             $mailboxIdField = $field;
         }
         if (isset($this->exclusions[$ownerClass])) {
             if ($isUser) {
                 $select .= sprintf(',IDENTITY(a.%1$s) AS %1$s', $field);
             } else {
                 $qb->andWhere(sprintf('a.%s IS NULL', $field));
             }
         } else {
             $select .= sprintf(',IDENTITY(a.%1$s) AS %1$s', $field);
             $ownerIdFields[] = $field;
         }
     }
     $qb->select($select);
     $result = [];
     $data = $qb->getQuery()->getArrayResult();
     foreach ($data as $item) {
         $known = false;
         foreach ($ownerIdFields as $field) {
             if ($item[$field] !== null) {
                 $known = true;
                 break;
             }
         }
         $email = strtolower($item['email']);
         $userId = $item[$userIdField];
         $mailboxId = $item[$mailboxIdField];
         $result[$email] = $userId === null ? ['known' => $known] : ['known' => $known, 'user' => (int) $userId];
         if ($mailboxId !== null) {
             $result[$email]['mailbox'] = $mailboxId;
         }
     }
     return $result;
 }
Exemplo n.º 15
0
 /**
  * Create a proxy class for EmailAddress entity and save it in cache
  *
  * @param Filesystem        $fs
  * @param \Twig_Environment $twig
  */
 protected function processEmailAddressTemplate(Filesystem $fs, \Twig_Environment $twig)
 {
     // Ensure the cache directory exists
     if (!$fs->exists($this->entityCacheDir)) {
         $fs->mkdir($this->entityCacheDir, 0777);
     }
     $args = array();
     $providers = $this->emailOwnerProviderStorage->getProviders();
     foreach ($providers as $provider) {
         $args[] = array('targetEntity' => $provider->getEmailOwnerClass(), 'columnName' => $this->emailOwnerProviderStorage->getEmailOwnerColumnName($provider), 'fieldName' => $this->emailOwnerProviderStorage->getEmailOwnerFieldName($provider));
     }
     $className = sprintf($this->entityProxyNameTemplate, 'EmailAddress');
     $twigParams = array('namespace' => $this->entityCacheNamespace, 'className' => $className, 'owners' => $args);
     // generate a proxy class
     $content = $twig->render('EmailAddress.php.twig', $twigParams);
     $this->writeCacheFile(sprintf('%s%s%s.php', $this->entityCacheDir, DIRECTORY_SEPARATOR, $className), $content);
     // generate ORM mappings for a proxy class
     $content = $twig->render('EmailAddress.orm.yml.twig', $twigParams);
     $this->writeCacheFile(sprintf('%s%s%s.orm.yml', $this->entityCacheDir, DIRECTORY_SEPARATOR, $className), $content);
 }
Exemplo n.º 16
0
 /**
  * @return string
  */
 protected function getUserOwnerFieldName()
 {
     return $this->emailOwnerProviderStorage->getEmailOwnerFieldName(ArrayUtil::find(function (EmailOwnerProviderInterface $provider) {
         return $provider->getEmailOwnerClass() === 'Oro\\Bundle\\UserBundle\\Entity\\User';
     }, $this->emailOwnerProviderStorage->getProviders()));
 }
Exemplo n.º 17
0
 private function getEmailOwnerProviderStorage()
 {
     $provider1 = $this->getMock('Oro\\Bundle\\EmailBundle\\Entity\\Provider\\EmailOwnerProviderInterface');
     $provider1->expects($this->any())->method('getEmailOwnerClass')->will($this->returnValue('Oro\\Bundle\\EmailBundle\\Tests\\Unit\\Entity\\TestFixtures\\TestEmailOwner'));
     $provider2 = $this->getMock('Oro\\Bundle\\EmailBundle\\Entity\\Provider\\EmailOwnerProviderInterface');
     $provider2->expects($this->any())->method('getEmailOwnerClass')->will($this->returnValue('Oro\\Bundle\\EmailBundle\\Tests\\Unit\\Entity\\TestFixtures\\TestEmailOwnerWithoutEmail'));
     $storage = new EmailOwnerProviderStorage();
     $storage->addProvider($provider1);
     $storage->addProvider($provider2);
     return $storage;
 }