Merge branch '245-rewrite-test-relationship-api' into 'master'

Refactor RelationshipApiControllerTest to avoid failures

Closes #245

See merge request Chill-Projet/chill-bundles!635
This commit is contained in:
Julien Fastré 2023-12-13 15:02:42 +00:00
commit 0da12cdc2e

View File

@ -14,6 +14,7 @@ namespace Chill\PersonBundle\Tests\Controller;
use Chill\MainBundle\Test\PrepareClientTrait; use Chill\MainBundle\Test\PrepareClientTrait;
use Chill\PersonBundle\Entity\Person; use Chill\PersonBundle\Entity\Person;
use Chill\PersonBundle\Entity\Relationships\Relation; use Chill\PersonBundle\Entity\Relationships\Relation;
use Chill\PersonBundle\Entity\Relationships\Relationship;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
@ -43,31 +44,34 @@ final class RelationshipApiControllerTest extends WebTestCase
{ {
self::bootKernel(); self::bootKernel();
$em = self::$container->get(EntityManagerInterface::class); $em = self::$container->get(EntityManagerInterface::class);
$countPersons = $em->createQueryBuilder() $personIdHavingRelation = $em->createQueryBuilder()
->select('count(p)') ->select('p.id')
->from(Person::class, 'p')
->join('p.centerCurrent', 'center_current')
->join('center_current.center', 'c')
->where('c.name LIKE :name')
->setParameter('name', 'Center A')
->getQuery()
->getSingleScalarResult();
$person = $em->createQueryBuilder()
->select('p')
->from(Person::class, 'p') ->from(Person::class, 'p')
->join('p.centerCurrent', 'center_current') ->join('p.centerCurrent', 'center_current')
->join('center_current.center', 'c') ->join('center_current.center', 'c')
->where('c.name LIKE :name') ->where('c.name LIKE :name')
->andWhere('EXISTS (SELECT 1 FROM ' . Relationship::class . ' r WHERE r.fromPerson = p OR r.toPerson = p)')
->setParameter('name', 'Center A') ->setParameter('name', 'Center A')
->getQuery() ->getQuery()
->setMaxResults(1) ->setMaxResults(1)
->setFirstResult(\random_int(0, $countPersons - 1)) ->getSingleScalarResult();
->getSingleResult();
$personIdWithoutRelation = $em->createQueryBuilder()
->select('p.id')
->from(Person::class, 'p')
->join('p.centerCurrent', 'center_current')
->join('center_current.center', 'c')
->where('c.name LIKE :name')
->andWhere('NOT EXISTS (SELECT 1 FROM ' . Relationship::class . ' r WHERE r.fromPerson = p OR r.toPerson = p)')
->setParameter('name', 'Center A')
->getQuery()
->setMaxResults(1)
->getSingleScalarResult();
self::ensureKernelShutdown(); self::ensureKernelShutdown();
return [ return [
[$person->getId()], [$personIdHavingRelation, $personIdWithoutRelation],
]; ];
} }
@ -75,39 +79,29 @@ final class RelationshipApiControllerTest extends WebTestCase
{ {
self::bootKernel(); self::bootKernel();
$em = self::$container->get(EntityManagerInterface::class); $em = self::$container->get(EntityManagerInterface::class);
$countPersons = $em->createQueryBuilder() $personIdWithoutRelations = $em->createQueryBuilder()
->select('count(DISTINCT p)') ->select('p.id')
->from(Person::class, 'p')
->join('p.centerCurrent', 'center_current')
->join('center_current.center', 'c')
->where('c.name LIKE :name')
->setParameter('name', 'Center A')
->getQuery()
->getSingleScalarResult();
$persons = $em->createQueryBuilder()
->select('p')
->from(Person::class, 'p') ->from(Person::class, 'p')
->join('p.centerCurrent', 'center_current') ->join('p.centerCurrent', 'center_current')
->join('center_current.center', 'c') ->join('center_current.center', 'c')
->where('c.name LIKE :name') ->where('c.name LIKE :name')
->andWhere('NOT EXISTS (SELECT 1 FROM ' . Relationship::class . ' r WHERE r.fromPerson = p OR r.toPerson = p)')
->setParameter('name', 'Center A') ->setParameter('name', 'Center A')
->getQuery() ->getQuery()
->setMaxResults(2) ->setMaxResults(2)
->setFirstResult(\random_int(0, $countPersons - 1))
->getResult(); ->getResult();
self::ensureKernelShutdown(); self::ensureKernelShutdown();
return [ return [
[$persons[0]->getId(), $persons[1]->getId(), $this->getRandomRelation($em)->getId(), true], [$personIdWithoutRelations[0]['id'], $personIdWithoutRelations[1]['id'], $this->getRandomRelation($em)->getId(), true],
]; ];
} }
/** /**
* @dataProvider personProvider * @dataProvider personProvider
*/ */
public function testGetRelationshipByPerson(mixed $personId) public function testGetRelationshipByPerson(int $personId)
{ {
self::ensureKernelShutdown(); self::ensureKernelShutdown();
$client = $this->getClientAuthenticated(); $client = $this->getClientAuthenticated();