Refactor RelationshipApiControllerTest

The codebase has been improved by refining and optimizing the test methods in the RelationshipApiControllerTest class. The check for relations was also added to exclude persons without any relationship, this may exclude duplicate relations. This change should avoid errors on this test.
This commit is contained in:
Julien Fastré 2023-12-08 11:07:14 +01:00
parent dab80a84d8
commit f02873c6e0
Signed by: julienfastre
GPG Key ID: BDE2190974723FCB

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();