/** * 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']); } }