Skip to content
Snippets Groups Projects
Commit f6a753e1 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Config : support d'un format plus explicite permettant de spécifier le modificateur Faker 'unique'.

parent 956814d3
No related branches found
No related tags found
No related merge requests found
Pipeline #28570 passed
......@@ -4,6 +4,7 @@ CHANGELOG
3.1.0
-----
- Config : possibilité d'utiliser des noms de colonnes en plus des noms d'attributs Doctrine.
- Config : support d'un format plus explicite permettant de spécifier le modificateur Faker 'unique'.
- Suppression des dépendances à unicaen/app en faveur de la nouvelle bibliothèque unicaen/sql.
- Renommage de la table _METADATA en `unicaen_db_anonym`.
- [FIX] Plus d'anonymisation si la valeur est null.
......
......@@ -11,6 +11,7 @@ return [
/**
* Chemin des scripts SQL à générer :
* - 'anonymisation' : mise à jour des données avec des données fictives spécifiées.
* - 'restauration' : mise à jour des données avec les valeurs d'origine.
*/
'anonymisation' => '/tmp/unicaen_db_anonym_anonymisation.sql',
'restauration' => '/tmp/unicaen_db_anonym_restauration.sql',
......@@ -21,19 +22,17 @@ return [
*/
Individu::class => [
/**
* Mapping des champs à modifier avec des données fictives générées avec FakerPHP
* (@see https://fakerphp.github.io/formatters)
*
* 'field' => 'xxxxx' : formatter FakerPHP sans arguments `$faker->xxxxx()`
* 'field' => ['xxxxx', 3, true] : formatter FakerPHP avec arguments `$faker->xxxxx(3, true)`
* 'field' => 'null' : mise à NULL.
* Mapping des champs/colonnes à modifier avec des données fictives
* (générées avec FakerPHP : @see https://fakerphp.github.io/formatters)
*/
'mapping' => [
'nomUsuel' => 'lastName',
'nomPatronymique' => 'null',
'prenom1' => 'firstName',
'email' => 'safeEmail',
// 2 possibilités : 'champDoctrine' => <specif> ou 'nom_de_colonne' => <specif>
'nomUsuel' => 'lastName', // càd `$faker->lastName()`
'nomPatronymique' => 'null', // càd mise à NULL.
'prenom1' => 'firstName', // càd `$faker->firstName()`
'email' => 'safeEmail', // càd `$faker->safeEmail()`
'leitmotiv' => ['words', 3, true], // càd `$faker->words(3, true)`
'leitmotivUnique' => ['name' => 'words', 'unique' => true, 'params' => [3, true]], // càd `$faker->unique()->words(3, true)`
],
/**
* Enregistrements à écarter, selon la valeur d'un attribut.
......@@ -47,6 +46,7 @@ return [
],
Utilisateur::class => [
'mapping' => [
'username' => ['name' => 'userName', 'unique' => true, 'params' => []],
'email' => 'safeEmail',
'displayName' => 'name',
],
......
......@@ -118,12 +118,28 @@ class DbService
protected function generateFakeValue(array $fakerConfig, string $entity, string $field): string
{
// normalisation
if (!array_key_exists('name', $fakerConfig)) {
$method = array_shift($fakerConfig);
$fakerConfig = ['name' => $method, 'params' => array_values($fakerConfig)];
}
if (!array_key_exists('unique', $fakerConfig)) {
$fakerConfig['unique'] = false;
}
$method = $fakerConfig['name'];
if ($method === 'null') {
return 'NULL';
}
$params = $fakerConfig['params'] ?? [];
$unique = (bool) $fakerConfig['unique'];
$faker = $this->faker;
if ($unique) {
$faker = $this->faker->unique();
}
$fakeValue = $this->faker->$method(...$fakerConfig);
$fakeValue = $faker->$method(...$params);
Assert::scalar($fakeValue, "La méthode '$method' spécifiée pour l'attribut '$field' de l'entité '$entity' " .
"retourne une valeur non supportée : %s");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment