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