/** * @dataProvider paramsProvider * * @param string $entityClass * @param integer $entityId * @param array $activityClasses * @param \DateTime $dateFrom * @param \DateTime $dateTo * @param integer $andWhereCount Number of andWhere() calls * @param integer $setParameterCount Number of setParameter() calls */ public function testGetActivityListQueryBuilder($entityClass, $entityId, $activityClasses, $dateFrom, $dateTo, $andWhereCount, $setParameterCount) { $qb = $this->getMockBuilder('Doctrine\\ORM\\QueryBuilder')->disableOriginalConstructor()->getMock(); $expr = $this->getMock('Doctrine\\ORM\\Query\\Expr'); $qb->expects($this->once())->method('select')->will($this->returnSelf()); $qb->expects($this->once())->method('from')->will($this->returnSelf()); $qb->expects($this->once())->method('where')->will($this->returnSelf()); $qb->expects($this->once())->method('join')->will($this->returnSelf()); $qb->expects($this->once())->method('orderBy')->will($this->returnSelf()); $qb->expects($this->any())->method('expr')->will($this->returnValue($expr)); $expr->expects($this->any())->method('in'); $expr->expects($this->any())->method('between'); $qb->expects($this->exactly($andWhereCount))->method('andWhere')->will($this->returnSelf()); $qb->expects($this->exactly($setParameterCount))->method('setParameter')->will($this->returnSelf()); $this->entityManager->expects($this->once())->method('createQueryBuilder')->will($this->returnValue($qb)); $this->repository->getActivityListQueryBuilder($entityClass, $entityId, $activityClasses, $dateFrom, $dateTo); }
/** * Returns entity ids of records that have associated contacting activities * * @param string $className Target entity class name * * @return array */ protected function getTargetIds($className) { /** @var ActivityContactProvider $activityContactProvider */ $activityContactProvider = $this->getContainer()->get('orocrm_activity_contact.provider'); $contactingActivityClasses = $activityContactProvider->getSupportedActivityClasses(); // we need try/catch here to avoid crash on non existing entity relation try { $result = $this->activityListRepository->createQueryBuilder('list')->select('r.id')->distinct(true)->join('list.' . $this->getAssociationName($className), 'r')->where('list.relatedActivityClass in (:applicableClasses)')->setParameter('applicableClasses', $contactingActivityClasses)->getQuery()->getScalarResult(); $result = array_map('current', $result); } catch (\Exception $e) { $result = []; } return $result; }