mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
Refactor GenderFilter to enhance data normalization.
Introduced logic to map and transform gender data for normalization and denormalization, aligning with expected formats. Updated associated tests to cover new scenarios and ensure consistent behavior.
This commit is contained in:
parent
b6375cad6c
commit
e37f3e7c37
@ -43,7 +43,6 @@ class GenderFilter implements
|
||||
|
||||
public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
|
||||
{
|
||||
$where = $qb->getDQLPart('where');
|
||||
$isIn = $qb->expr()->in('person.gender', ':person_gender');
|
||||
|
||||
$acceptedGenders = $data['accepted_genders_entity'];
|
||||
@ -88,11 +87,45 @@ class GenderFilter implements
|
||||
|
||||
public function normalizeFormData(array $formData): array
|
||||
{
|
||||
if (array_key_exists('accepted_genders', $formData)) {
|
||||
$genders = [];
|
||||
foreach ($formData['accepted_genders'] as $beforeGender) {
|
||||
foreach ($this->genderRepository->findByGenderTranslation(match ($beforeGender) {
|
||||
'both' => 'neutral', default => $beforeGender,
|
||||
}) as $gender) {
|
||||
if (null !== $gender) {
|
||||
if ('null' === $beforeGender) {
|
||||
$genders[] = null;
|
||||
}
|
||||
$genders[] = $gender->getId();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ['accepted_genders_entity' => array_unique($genders)];
|
||||
}
|
||||
|
||||
return ['accepted_genders_entity' => $formData['accepted_genders_entity']];
|
||||
}
|
||||
|
||||
public function denormalizeFormData(array $formData, int $fromVersion): array
|
||||
{
|
||||
if (array_key_exists('accepted_genders', $formData)) {
|
||||
$transformedData = [];
|
||||
foreach ($formData['accepted_genders'] as $genderBefore) {
|
||||
foreach ($this->genderRepository->findByGenderTranslation(
|
||||
match ($genderBefore) {
|
||||
'both' => 'neutral',
|
||||
default => $genderBefore,
|
||||
}
|
||||
) as $gender) {
|
||||
$transformedData[] = $gender;
|
||||
}
|
||||
}
|
||||
|
||||
return ['accepted_genders_entity' => $transformedData];
|
||||
}
|
||||
|
||||
return ['accepted_genders_entity' => $formData['accepted_genders_entity']];
|
||||
}
|
||||
|
||||
@ -130,7 +163,11 @@ class GenderFilter implements
|
||||
if (null === $g) {
|
||||
$genders[] = $this->translator->trans('export.filter.person.gender.no_gender');
|
||||
} else {
|
||||
$genders[] = $this->translatableStringHelper->localize($this->genderRepository->find($g)->getLabel());
|
||||
$g = $this->genderRepository->find($g);
|
||||
if (null === $g) {
|
||||
continue;
|
||||
}
|
||||
$genders[] = $this->translatableStringHelper->localize($g->getLabel());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -41,17 +41,44 @@ final class GenderFilterTest extends AbstractFilterTest
|
||||
{
|
||||
return [
|
||||
[
|
||||
'accepted_genders' => ['man'],
|
||||
],
|
||||
[
|
||||
'accepted_genders' => ['woman'],
|
||||
],
|
||||
[
|
||||
'accepted_genders' => ['man', 'both'],
|
||||
'accepted_genders_entity' => [null, '1'],
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* A list of data to normalize.
|
||||
*
|
||||
* @return iterable{array}
|
||||
*/
|
||||
public static function dataProviderFormDataToNormalize(): iterable
|
||||
{
|
||||
yield [
|
||||
['accepted_genders_entity' => [null, '1']],
|
||||
1,
|
||||
[],
|
||||
];
|
||||
yield [
|
||||
['accepted_genders' => ['man']],
|
||||
1,
|
||||
[],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataProviderFormDataToNormalize
|
||||
*/
|
||||
public function testDataNormalization(array $data, int $version, array $customAssert): void
|
||||
{
|
||||
$filter = $this->getFilter();
|
||||
|
||||
$normalized = $filter->normalizeFormData($data);
|
||||
$actual = $filter->denormalizeFormData($normalized, $version);
|
||||
|
||||
self::assertIsArray($actual);
|
||||
self::assertArrayHasKey('accepted_genders_entity', $actual);
|
||||
}
|
||||
|
||||
public static function getQueryBuilders(): iterable
|
||||
{
|
||||
self::bootKernel();
|
||||
|
Loading…
x
Reference in New Issue
Block a user