mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
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:
parent
dab80a84d8
commit
f02873c6e0
@ -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();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user