mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-13 13:54:23 +00:00
[person][Search] Feature: use the current center history when searching
for person
This commit is contained in:
parent
49d2e98a1a
commit
451f7f4230
@ -16,6 +16,7 @@ use Chill\MainBundle\Repository\CountryRepository;
|
|||||||
use Chill\MainBundle\Search\ParsingException;
|
use Chill\MainBundle\Search\ParsingException;
|
||||||
use Chill\MainBundle\Search\SearchApiQuery;
|
use Chill\MainBundle\Search\SearchApiQuery;
|
||||||
use Chill\MainBundle\Security\Authorization\AuthorizationHelper;
|
use Chill\MainBundle\Security\Authorization\AuthorizationHelper;
|
||||||
|
use Chill\MainBundle\Security\Authorization\AuthorizationHelperInterface;
|
||||||
use Chill\PersonBundle\Entity\Person;
|
use Chill\PersonBundle\Entity\Person;
|
||||||
use Chill\PersonBundle\Security\Authorization\PersonVoter;
|
use Chill\PersonBundle\Security\Authorization\PersonVoter;
|
||||||
use DateTimeInterface;
|
use DateTimeInterface;
|
||||||
@ -34,7 +35,7 @@ use function implode;
|
|||||||
|
|
||||||
final class PersonACLAwareRepository implements PersonACLAwareRepositoryInterface
|
final class PersonACLAwareRepository implements PersonACLAwareRepositoryInterface
|
||||||
{
|
{
|
||||||
private AuthorizationHelper $authorizationHelper;
|
private AuthorizationHelperInterface $authorizationHelper;
|
||||||
|
|
||||||
private CountryRepository $countryRepository;
|
private CountryRepository $countryRepository;
|
||||||
|
|
||||||
@ -46,7 +47,7 @@ final class PersonACLAwareRepository implements PersonACLAwareRepositoryInterfac
|
|||||||
Security $security,
|
Security $security,
|
||||||
EntityManagerInterface $em,
|
EntityManagerInterface $em,
|
||||||
CountryRepository $countryRepository,
|
CountryRepository $countryRepository,
|
||||||
AuthorizationHelper $authorizationHelper
|
AuthorizationHelperInterface $authorizationHelper
|
||||||
) {
|
) {
|
||||||
$this->security = $security;
|
$this->security = $security;
|
||||||
$this->em = $em;
|
$this->em = $em;
|
||||||
@ -310,9 +311,10 @@ final class PersonACLAwareRepository implements PersonACLAwareRepositoryInterfac
|
|||||||
}
|
}
|
||||||
|
|
||||||
return $query
|
return $query
|
||||||
|
->setFromClause($query->getFromClause() . ' JOIN view_chill_person_person_center_history_current vcppchc ON vcppchc.person_id = person.id', $query->getFromParams())
|
||||||
->andWhereClause(
|
->andWhereClause(
|
||||||
strtr(
|
strtr(
|
||||||
'person.center_id IN ({{ center_ids }})',
|
'vcppchc.center_id IN ({{ center_ids }})',
|
||||||
[
|
[
|
||||||
'{{ center_ids }}' => implode(
|
'{{ center_ids }}' => implode(
|
||||||
', ',
|
', ',
|
||||||
|
@ -0,0 +1,79 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Chill\PersonBundle\Tests\Repository;
|
||||||
|
|
||||||
|
use Chill\MainBundle\Entity\User;
|
||||||
|
use Chill\MainBundle\Repository\CenterRepositoryInterface;
|
||||||
|
use Chill\MainBundle\Repository\CountryRepository;
|
||||||
|
use Chill\MainBundle\Security\Authorization\AuthorizationHelperInterface;
|
||||||
|
use Chill\PersonBundle\Entity\Person;
|
||||||
|
use Chill\PersonBundle\Repository\PersonACLAwareRepository;
|
||||||
|
use Chill\PersonBundle\Security\Authorization\PersonVoter;
|
||||||
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
|
use Prophecy\Argument;
|
||||||
|
use Prophecy\PhpUnit\ProphecyTrait;
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
|
||||||
|
use Symfony\Component\Security\Core\Security;
|
||||||
|
|
||||||
|
class PersonACLAwareRepositoryTest extends KernelTestCase
|
||||||
|
{
|
||||||
|
use ProphecyTrait;
|
||||||
|
|
||||||
|
private EntityManagerInterface $entityManager;
|
||||||
|
|
||||||
|
private CountryRepository $countryRepository;
|
||||||
|
|
||||||
|
private CenterRepositoryInterface $centerRepository;
|
||||||
|
|
||||||
|
protected function setUp(): void
|
||||||
|
{
|
||||||
|
self::bootKernel();
|
||||||
|
|
||||||
|
$this->entityManager = self::$container->get(EntityManagerInterface::class);
|
||||||
|
$this->countryRepository = self::$container->get(CountryRepository::class);
|
||||||
|
$this->centerRepository = self::$container->get(CenterRepositoryInterface::class);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCountByCriteria()
|
||||||
|
{
|
||||||
|
$user = new User();
|
||||||
|
|
||||||
|
$authorizationHelper = $this->prophesize(AuthorizationHelperInterface::class);
|
||||||
|
$authorizationHelper->getReachableCenters(Argument::exact($user), Argument::exact(PersonVoter::SEE))
|
||||||
|
->willReturn($this->centerRepository->findAll());
|
||||||
|
|
||||||
|
$security = $this->prophesize(Security::class);
|
||||||
|
$security->getUser()->willReturn($user);
|
||||||
|
|
||||||
|
$repository = new PersonACLAwareRepository($security->reveal(), $this->entityManager, $this->countryRepository,
|
||||||
|
$authorizationHelper->reveal());
|
||||||
|
|
||||||
|
$number = $repository->countBySearchCriteria('diallo');
|
||||||
|
|
||||||
|
$this->assertGreaterThan(0, $number);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFindByCriteria()
|
||||||
|
{
|
||||||
|
$user = new User();
|
||||||
|
|
||||||
|
$authorizationHelper = $this->prophesize(AuthorizationHelperInterface::class);
|
||||||
|
$authorizationHelper->getReachableCenters(Argument::exact($user), Argument::exact(PersonVoter::SEE))
|
||||||
|
->willReturn($this->centerRepository->findAll());
|
||||||
|
|
||||||
|
$security = $this->prophesize(Security::class);
|
||||||
|
$security->getUser()->willReturn($user);
|
||||||
|
|
||||||
|
$repository = new PersonACLAwareRepository($security->reveal(), $this->entityManager, $this->countryRepository,
|
||||||
|
$authorizationHelper->reveal());
|
||||||
|
|
||||||
|
$results = $repository->findBySearchCriteria(0, 5, false, 'diallo');
|
||||||
|
|
||||||
|
$this->assertGreaterThan(0, count($results));
|
||||||
|
$this->assertContainsOnlyInstancesOf(Person::class, $results);
|
||||||
|
foreach ($results as $person) {
|
||||||
|
$this->assertStringContainsString('diallo', strtolower($person->getFirstName() . ' ' . $person->getLastName()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user