/**
  * Gets search results, that includes found items and any additional information.
  *
  * @param string $query
  * @param int $page
  * @param int $perPage
  * @param bool $searchById
  * @return array
  * @TODO: Refactor
  */
 public function search($query, $page, $perPage, $searchById = false)
 {
     $items = array();
     if ($searchById) {
         $idParts = explode(User::DELIMITER, $query);
         if (count($idParts) === 2) {
             $query = $idParts[1];
             if ($idParts[0] == User::TYPE_DIAMANTE) {
                 $isDiamanteUserSearch = true;
             }
         }
     }
     if ($searchById && isset($isDiamanteUserSearch)) {
         $diamanteUsers = [$this->diamanteUserRepository->get($query)];
     } else {
         $diamanteUsers = $this->diamanteUserRepository->searchByInput($query, $this->properties);
     }
     if (!isset($isDiamanteUserSearch)) {
         $oroUsers = $this->oroUserSearchHandler->search($query, $page, $perPage, $searchById);
     }
     if (!empty($diamanteUsers)) {
         $convertedDiamanteUsers = $this->convertUsers($diamanteUsers, User::TYPE_DIAMANTE);
         $items = array_merge($items, $convertedDiamanteUsers);
     }
     if (!empty($oroUsers['results'])) {
         $convertedOroUsers = $this->convertUsers($oroUsers['results'], User::TYPE_ORO);
         $items = array_merge($items, $convertedOroUsers);
     }
     return array('results' => $items, 'more' => false);
 }
 /**
  * {@inheritdoc}
  */
 protected function searchIds($search, $firstResult, $maxResults)
 {
     $userIds = parent::searchIds($search, $firstResult, $maxResults + 1);
     $excludedKey = null;
     $currentUserId = $this->securityFacade->getLoggedUserId();
     if ($currentUserId) {
         $excludedKey = array_search($currentUserId, $userIds);
     }
     if (false !== $excludedKey) {
         unset($userIds[$excludedKey]);
         $userIds = array_values($userIds);
     } else {
         $userIds = array_slice($userIds, 0, $maxResults);
     }
     return $userIds;
 }
 /**
  * @test
  */
 public function testSearchWithNotEmptyQuery()
 {
     $query = 'Name';
     $expectedDiamanteUsers = 1;
     $expectedOroUsers = 3;
     $totalExpectedResult = $expectedDiamanteUsers + $expectedOroUsers;
     $this->userService->expects($this->once())->method('getGravatarLink')->with($this->equalTo('*****@*****.**', DiamanteUserSearchHandler::AVATAR_SIZE));
     $this->diamanteUserRepository->expects($this->once())->method('searchByInput')->with($this->equalTo($query), $this->equalTo($this->getProperties()))->will($this->returnValue($this->getDiamanteUsersCollection($expectedDiamanteUsers, $query)));
     $this->userSearchHandler->expects($this->once())->method('search')->with($this->equalTo($query), 1, 10)->will($this->returnValue(array('results' => $this->getOroUsersCollection($expectedOroUsers, $query), 'more' => false)));
     $result = $this->diamanteUserSearchHandler->search($query, 1, 10);
     $this->assertInternalType('array', $result);
     $this->assertTrue(array_key_exists('results', $result));
     $this->assertEquals($totalExpectedResult, count($result['results']));
     foreach ($result['results'] as $item) {
         $this->assertStringEndsWith($query, $item['firstName']);
     }
 }