eventListener created and tested for firstname, lastname and altnames

This commit is contained in:
Julie Lenaerts 2021-10-06 12:16:45 +02:00
parent 7d8f380050
commit 0c4ea81550
7 changed files with 135 additions and 44 deletions

View File

@ -1,8 +0,0 @@
services:
Chill\PersonBundle\EventListener\:
autowire: true
autoconfigure: true
tags:
- name: "doctrine.orm.entity_listener"
event: "prePersist"
entity: 'Chill\PersonBundle\Entity\Person'

View File

@ -84,6 +84,7 @@ class ChillPersonExtension extends Extension implements PrependExtensionInterfac
$loader->load('services/repository.yaml');
$loader->load('services/serializer.yaml');
$loader->load('services/security.yaml');
$loader->load('services/doctrineEventListener.yaml');
// load service advanced search only if configure
if ($config['search']['search_by_phone'] != 'never') {

View File

@ -1784,6 +1784,14 @@ class Person implements HasCenterInterface, TrackCreationInterface, TrackUpdateI
$firstNameCaps = ucfirst(strtolower($this->firstName));
$this->setFirstName($firstNameCaps);
$altNamesCaps = [];
foreach($this->altNames as $altName)
{
$altNamesCaps[] = ucfirst(strtolower($altName));
}
$this->setAltNames($altNamesCaps);
$lastNameCaps = strtoupper($this->lastName);
$this->setLastName($lastNameCaps);

View File

@ -1,36 +0,0 @@
<?php
declare(strict_types=1);
namespace Chill\PersonBundle\EventListener;
use Chill\PersonBundle\Entity\Person;
use Doctrine\ORM\EntityManager;
use Doctrine\Persistence\Event\LifecycleEventArgs;
class PersonCreateEvent
{
public EntityManager $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
public function onPrePersist(LifecycleEventArgs $event): void
{
$person = $event->getObject();
if ($person instanceof Person){
$firstnameCaps = ucfirst(strtolower($person->getFirstName()));
$person->setFirstName($firstnameCaps);
$lastnameCaps = strtoupper($person->getLastName());
$person->setLastName($lastnameCaps);
dump($person);
// $this->em->persist($person);
// $this->em->flush();
}
}
}

View File

@ -0,0 +1,46 @@
<?php
declare(strict_types=1);
namespace Chill\PersonBundle\EventListener;
use Chill\PersonBundle\Entity\Person;
use Chill\PersonBundle\Entity\PersonAltName;
use Doctrine\Persistence\Event\LifecycleEventArgs;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class PersonEventListener
{
public function onPrePersist(LifecycleEventArgs $event): void
{
$em = $event->getObjectManager();
if($event->getObject() instanceof Person){
$person = $event->getObject();
$firstnameCaps = ucwords(strtolower($person->getFirstName()), " \t\r\n\f\v'-");
$person->setFirstName($firstnameCaps);
$lastnameCaps = strtoupper($person->getLastName());
$person->setLastName($lastnameCaps);
$em->persist($person);
$em->flush();
} elseif ($event->getObject() instanceof PersonAltName){
$altname = $event->getObject();
$altnameCaps = ucwords(strtolower($altname->getLabel()), " \t\r\n\f\v'-");
$altname->setLabel($altnameCaps);
$em->persist($altname);
$em->flush();
} else {
throw new NotFoundHttpException('Entity must be a person or an altname');
}
}
}

View File

@ -0,0 +1,68 @@
<?php
use PHPUnit\Framework\TestCase;
use Chill\PersonBundle\EventListener\PersonEventListener;
use Chill\PersonBundle\Entity\Person;
use Chill\PersonBundle\Entity\PersonAltName;
use Doctrine\Persistence\Event\LifecycleEventArgs;
class PersonCreateEventTest extends TestCase
{
/**
* @dataProvider generateNames
*/
public function testOnPrePersist($firstname, $firstnameExpected, $lastname, $lastnameExpected)
{
$listener = new PersonEventListener();
$person = new Person();
$person->setFirstName($firstname);
$person->setLastName($lastname);
$args = $this->createMock(LifecycleEventArgs::class);
$args->method('getObject')
->willReturn($person);
$listener->onPrePersist($args);
$this->assertEquals($firstnameExpected, $person->getFirstName());
$this->assertEquals($lastnameExpected, $person->getLastName());
}
/**
* @dataProvider generateAltNames
*/
public function testAltNamesOnPrePersist($altname, $altnameExpected)
{
$listener = new PersonEventListener();
$personAltname = new PersonAltName();
$personAltname->setLabel($altname);
$args = $this->createMock(LifecycleEventArgs::class);
$args->method('getObject')
->willReturn($personAltname);
$listener->onPrePersist($args);
$this->assertEquals($altnameExpected, $personAltname->getLabel());
}
public function generateNames(): iterator
{
yield ['julie', 'Julie', 'lenaerts', 'LENAERTS'];
yield ['jean-marie', 'Jean-Marie', 'lenaerts', 'LENAERTS'];
yield ['vinCENT', 'Vincent', 'van gogh', 'VAN GOGH'];
yield ['Vincent', 'Vincent', 'van Gogh', 'VAN GOGH'];
yield ['André marie', 'André Marie', 'Bah', 'BAH'];
}
public function generateAltNames(): iterator
{
yield ['vinCENT', 'Vincent'];
yield ['jean-marie', 'Jean-Marie'];
}
}

View File

@ -0,0 +1,12 @@
services:
Chill\PersonBundle\EventListener\PersonEventListener:
autoconfigure: true
tags:
-
name: 'doctrine.orm.entity_listener'
event: 'prePersist'
entity: 'Chill\PersonBundle\Entity\Person'
-
name: 'doctrine.orm.entity_listener'
event: 'prePersist'
entity: 'Chill\PersonBundle\Entity\PersonAltName'