mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
DX: fix some phpstan issues and add test for ParticipationOverlapValidator.php
This commit is contained in:
parent
70871176fc
commit
afd2235254
@ -0,0 +1,108 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Validator\AccompanyingPeriod;
|
||||||
|
|
||||||
|
use Chill\PersonBundle\Entity\AccompanyingPeriod;
|
||||||
|
use Chill\PersonBundle\Entity\Person;
|
||||||
|
use Chill\PersonBundle\Templating\Entity\PersonRenderInterface;
|
||||||
|
use Chill\PersonBundle\Validator\Constraints\AccompanyingPeriod\ParticipationOverlap;
|
||||||
|
use Chill\PersonBundle\Validator\Constraints\AccompanyingPeriod\ParticipationOverlapValidator;
|
||||||
|
use Chill\ThirdPartyBundle\Entity\ThirdParty;
|
||||||
|
use Chill\ThirdPartyBundle\Templating\Entity\ThirdPartyRender;
|
||||||
|
use Prophecy\Argument;
|
||||||
|
use Prophecy\PhpUnit\ProphecyTrait;
|
||||||
|
use Symfony\Component\Validator\Test\ConstraintValidatorTestCase;
|
||||||
|
|
||||||
|
class ParticipationOverlapValidatorTest extends ConstraintValidatorTestCase
|
||||||
|
{
|
||||||
|
use ProphecyTrait;
|
||||||
|
|
||||||
|
public function testNoViolation(): void
|
||||||
|
{
|
||||||
|
$constraint = $this->getConstraint();
|
||||||
|
|
||||||
|
$period = new AccompanyingPeriod();
|
||||||
|
$person1 = new Person();
|
||||||
|
$person2 = new Person();
|
||||||
|
|
||||||
|
$period->createParticipationFor($person1);
|
||||||
|
$period->createParticipationFor($person2);
|
||||||
|
|
||||||
|
$this->validator->validate($period->getParticipations(), $constraint);
|
||||||
|
|
||||||
|
$this->assertNoViolation();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHasTwoParticipationsOverlaps(): void
|
||||||
|
{
|
||||||
|
$constraint = $this->getConstraint();
|
||||||
|
|
||||||
|
$period = new AccompanyingPeriod();
|
||||||
|
$person1 = new Person();
|
||||||
|
$reflectionPerson = new \ReflectionClass($person1);
|
||||||
|
$personId = $reflectionPerson->getProperty('id');
|
||||||
|
$personId->setAccessible(true);
|
||||||
|
$personId->setValue($person1, 1);
|
||||||
|
$person2 = new Person();
|
||||||
|
|
||||||
|
$period->createParticipationFor($person1);
|
||||||
|
$period->createParticipationFor($person1);
|
||||||
|
$period->createParticipationFor($person2);
|
||||||
|
|
||||||
|
$this->validator->validate($period->getParticipations(), $constraint);
|
||||||
|
|
||||||
|
$this->buildViolation('participation-overlaps')
|
||||||
|
->setParameters([
|
||||||
|
'{{ start }}' => (new \DateTimeImmutable('today'))->format('d-m-Y'),
|
||||||
|
'{{ end }}' => null,
|
||||||
|
'{{ ids }}' => [null, null],
|
||||||
|
'{{ name }}' => 'person'
|
||||||
|
])
|
||||||
|
->assertRaised();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHasTwoParticipationsButDoNotOverlaps(): void
|
||||||
|
{
|
||||||
|
$constraint = $this->getConstraint();
|
||||||
|
|
||||||
|
$period = new AccompanyingPeriod();
|
||||||
|
$person1 = new Person();
|
||||||
|
$reflectionPerson = new \ReflectionClass($person1);
|
||||||
|
$personId = $reflectionPerson->getProperty('id');
|
||||||
|
$personId->setAccessible(true);
|
||||||
|
$personId->setValue($person1, 1);
|
||||||
|
$person2 = new Person();
|
||||||
|
|
||||||
|
$participation1 = $period->createParticipationFor($person1);
|
||||||
|
$period->createParticipationFor($person1);
|
||||||
|
$participation1->setEndDate(new \DateTime('now'));
|
||||||
|
$period->createParticipationFor($person2);
|
||||||
|
|
||||||
|
$this->validator->validate($period->getParticipations(), $constraint);
|
||||||
|
|
||||||
|
$this->assertNoViolation();
|
||||||
|
}
|
||||||
|
protected function createValidator(): ParticipationOverlapValidator
|
||||||
|
{
|
||||||
|
$personRender = $this->prophesize(PersonRenderInterface::class);
|
||||||
|
$personRender->renderString(Argument::type(Person::class), [])
|
||||||
|
->willReturn('person');
|
||||||
|
$thirdPartyRender = $this->prophesize(ThirdPartyRender::class);
|
||||||
|
$thirdPartyRender->renderString(Argument::type(ThirdParty::class), [])
|
||||||
|
->willReturn('third-party');
|
||||||
|
|
||||||
|
return new ParticipationOverlapValidator(
|
||||||
|
$personRender->reveal(),
|
||||||
|
$thirdPartyRender->reveal()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getConstraint(): ParticipationOverlap
|
||||||
|
{
|
||||||
|
return new ParticipationOverlap(['message' => 'participation-overlaps']);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -61,9 +61,9 @@ class ParticipationOverlapValidator extends ConstraintValidator
|
|||||||
throw new UnexpectedTypeException($participation, AccompanyingPeriodParticipation::class);
|
throw new UnexpectedTypeException($participation, AccompanyingPeriodParticipation::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
$personId = $participation->getPerson()->getId();
|
$hashPerson = spl_object_hash($participation->getPerson());
|
||||||
|
|
||||||
$participationList[$personId][] = $participation;
|
$participationList[$hashPerson][] = $participation;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($participationList as $group) {
|
foreach ($participationList as $group) {
|
||||||
|
@ -23,6 +23,8 @@ use function in_array;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Lazy load third parties.
|
* Lazy load third parties.
|
||||||
|
*
|
||||||
|
* @deprecated As the PickThirdPartyType is deprecated, this should not be in use
|
||||||
*/
|
*/
|
||||||
class ThirdPartyChoiceLoader implements ChoiceLoaderInterface
|
class ThirdPartyChoiceLoader implements ChoiceLoaderInterface
|
||||||
{
|
{
|
||||||
@ -57,7 +59,7 @@ class ThirdPartyChoiceLoader implements ChoiceLoaderInterface
|
|||||||
$choices = [];
|
$choices = [];
|
||||||
|
|
||||||
foreach ($values as $value) {
|
foreach ($values as $value) {
|
||||||
if (empty($value)) {
|
if (null === $value || '' === $value) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,6 +29,10 @@ use function array_merge;
|
|||||||
use function count;
|
use function count;
|
||||||
use function is_array;
|
use function is_array;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated use the @link{PickThirdPartyDynamicType::class}
|
||||||
|
* @note do remove ThirdPartyChoiceLoader if this class is removed
|
||||||
|
*/
|
||||||
class PickThirdPartyType extends AbstractType
|
class PickThirdPartyType extends AbstractType
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
@ -180,7 +180,7 @@ final class ThirdPartyRepository implements ObjectRepository
|
|||||||
if (array_key_exists('name', $terms) || array_key_exists('_default', $terms)) {
|
if (array_key_exists('name', $terms) || array_key_exists('_default', $terms)) {
|
||||||
$term = $terms['name'] ?? $terms['_default'];
|
$term = $terms['name'] ?? $terms['_default'];
|
||||||
|
|
||||||
if (empty($term)) {
|
if (null === $term || '' === $term) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$qb->andWhere($qb->expr()->like('UNACCENT(LOWER(tp.name))', 'UNACCENT(LOWER(:name))'));
|
$qb->andWhere($qb->expr()->like('UNACCENT(LOWER(tp.name))', 'UNACCENT(LOWER(:name))'));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user