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
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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.
+10 −10
Original line number Diff line number Diff line
@@ -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',
                ],
+18 −2
Original line number Diff line number Diff line
@@ -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");