]> git.agnieray.net Git - galette.git/blob - tests/Galette/IO/tests/units/CsvIn.php
Use consistent name
[galette.git] / tests / Galette / IO / tests / units / CsvIn.php
1 <?php
2
3 /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
4
5 /**
6 * CsvIn tests
7 *
8 * PHP version 5
9 *
10 * Copyright © 2020 The Galette Team
11 *
12 * This file is part of Galette (http://galette.tuxfamily.org).
13 *
14 * Galette is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License as published by
16 * the Free Software Foundation, either version 3 of the License, or
17 * (at your option) any later version.
18 *
19 * Galette is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
23 *
24 * You should have received a copy of the GNU General Public License
25 * along with Galette. If not, see <http://www.gnu.org/licenses/>.
26 *
27 * @category Core
28 * @package GaletteTests
29 *
30 * @author Johan Cwiklinski <johan@x-tnd.be>
31 * @copyright 2020 The Galette Team
32 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
33 * @version SVN: $Id$
34 * @link http://galette.tuxfamily.org
35 * @since 2020-05-11
36 */
37
38 namespace Galette\IO\test\units;
39
40 use atoum;
41 use Galette\Entity\Adherent;
42 use Galette\DynamicFields\DynamicField;
43
44 /**
45 * CsvIn tests class
46 *
47 * @category Core
48 * @name CsvIn
49 * @package GaletteTests
50 * @author Johan Cwiklinski <johan@x-tnd.be>
51 * @copyright 2020 The Galette Team
52 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
53 * @link http://galette.tuxfamily.org
54 * @since 2020-05-11
55 */
56 class CsvIn extends atoum
57 {
58 private $zdb;
59 private $i18n;
60 private $preferences;
61 private $session;
62 private $login;
63 private $view;
64 private $history;
65 private $members_fields;
66 private $members_form_fields;
67 private $members_fields_cats;
68 private $flash;
69 private $flash_data;
70 private $container;
71 private $request;
72 private $response;
73 private $mocked_router;
74 private $contents_table = null;
75
76 /**
77 * Set up tests
78 *
79 * @param string $testMethod Calling method
80 *
81 * @return void
82 */
83 public function beforeTestMethod($testMethod)
84 {
85 $this->contents_table = null;
86 $this->mocked_router = new \mock\Slim\Router();
87 $this->calling($this->mocked_router)->pathFor = function ($name, $params) {
88 return $name;
89 };
90 $this->zdb = new \Galette\Core\Db();
91 $this->i18n = new \Galette\Core\I18n(
92 \Galette\Core\I18n::DEFAULT_LANG
93 );
94 $this->preferences = new \Galette\Core\Preferences(
95 $this->zdb
96 );
97 $this->session = new \RKA\Session();
98 $this->login = new \Galette\Core\Login($this->zdb, $this->i18n, $this->session);
99 $this->history = new \Galette\Core\History($this->zdb, $this->login, $this->preferences);
100 $flash_data = [];
101 $this->flash_data = &$flash_data;
102 $this->flash = new \Slim\Flash\Messages($flash_data);
103
104 global $zdb, $i18n, $login, $hist;
105 $zdb = $this->zdb;
106 $i18n = $this->i18n;
107 $login = $this->login;
108 $hist = $this->history;
109
110 $app = new \Slim\App(['router' => $this->mocked_router, 'flash' => $this->flash]);
111 $container = $app->getContainer();
112 /*$this->view = new \mock\Slim\Views\Smarty(
113 rtrim(GALETTE_ROOT . GALETTE_TPL_SUBDIR, DIRECTORY_SEPARATOR),
114 [
115 'cacheDir' => rtrim(GALETTE_CACHE_DIR, DIRECTORY_SEPARATOR),
116 'compileDir' => rtrim(GALETTE_COMPILE_DIR, DIRECTORY_SEPARATOR),
117 'pluginsDir' => [
118 GALETTE_ROOT . 'includes/smarty_plugins'
119 ]
120 ]
121 );
122 $this->calling($this->view)->render = function ($response) {
123 $response->getBody()->write('Atoum view rendered');
124 return $response;
125 };
126
127 $this->view->addSlimPlugins($container->get('router'), '/');
128 //$container['view'] = $this->view;*/
129 $container['view'] = null;
130 $container['zdb'] = $zdb;
131 $container['login'] = $this->login;
132 $container['session'] = $this->session;
133 $container['preferences'] = $this->preferences;
134 $container['logo'] = null;
135 $container['print_logo'] = null;
136 $container['plugins'] = null;
137 $container['history'] = $this->history;
138 $container['i18n'] = null;
139 $container['fields_config'] = null;
140 $container['lists_config'] = null;
141 $container['l10n'] = null;
142 include_once GALETTE_ROOT . 'includes/fields_defs/members_fields.php';
143 $this->members_fields = $members_fields;
144 $container['members_fields'] = $this->members_fields;
145 $members_form_fields = $members_fields;
146 foreach ($members_form_fields as $k => $field) {
147 if ($field['position'] == -1) {
148 unset($members_form_fields[$k]);
149 }
150 }
151 $this->members_form_fields = $members_form_fields;
152 $container['members_form_fields'] = $this->members_form_fields;
153 include_once GALETTE_ROOT . 'includes/fields_defs/members_fields_cats.php';
154 $this->members_fields_cats = $members_fields_cats;
155 $container['members_fields_cats'] = $this->members_fields_cats;
156 $this->container = $container;
157 $this->request = $container->get('request');
158 $this->response = $container->get('response');
159 }
160
161 /**
162 * Tear down tests
163 *
164 * @param string $testMethod Calling method
165 *
166 * @return void
167 */
168 public function afterTestMethod($testMethod)
169 {
170 $delete = $this->zdb->delete(\Galette\Entity\Adherent::TABLE);
171 $this->zdb->execute($delete);
172 $delete = $this->zdb->delete(\Galette\Entity\DynamicFieldsHandle::TABLE);
173 $this->zdb->execute($delete);
174 $delete = $this->zdb->delete(DynamicField::TABLE);
175 $this->zdb->execute($delete);
176 //cleanup dynamic translations
177 $delete = $this->zdb->delete(\Galette\Core\L10n::TABLE);
178 $delete->where([
179 'text_orig' => [
180 'Dynamic choice field',
181 'Dynamic date field',
182 'Dynamic text field'
183 ]
184 ]);
185 $this->zdb->execute($delete);
186
187 if ($this->contents_table !== null) {
188 $this->zdb->drop($this->contents_table);
189 }
190 }
191
192 /**
193 * Import text CSV file
194 *
195 * @param array $fields Fields name to use at import
196 * @param string $file_name File name
197 * @param array $flash_messages Excpeted flash messages from doImport route
198 * @param airay $members_list List of faked members data
199 * @param integer $count_before Count before insertions. Defaults to 0 if null.
200 * @param integer $count_after Count after insertions. Default to $count_before + count $members_list
201 * @param array $values Textual values for dynamic choices fields
202 *
203 * @return void
204 */
205 private function doImportFileTest(
206 array $fields,
207 $file_name,
208 array $flash_messages,
209 array $members_list,
210 $count_before = null,
211 $count_after = null,
212 array $values = []
213 ) {
214 if ($count_before === null) {
215 $count_before = 0;
216 }
217 if ($count_after === null) {
218 $count_after = $count_before + count($members_list);
219 }
220
221 $members = new \Galette\Repository\Members();
222 $list = $members->getList();
223 $this->integer($list->count())->isIdenticalTo(
224 $count_before,
225 print_r(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1), true)
226 );
227
228 $model = $this->getModel($fields);
229
230 //get csv model file to add data in
231 $controller = new \Galette\Controllers\CsvController($this->container);
232 $response = $controller->getImportModel($this->request, $this->response);
233 $csvin = new \galette\IO\CsvIn($this->zdb);
234
235 $this->integer($response->getStatusCode())->isIdenticalTo(200);
236 $this->array($response->getHeaders())
237 ->array['Content-Type']->isIdenticalTo(['text/csv'])
238 ->array['Content-Disposition']->isIdenticalTo(['attachment;filename="galette_import_model.csv"']);
239
240 $csvfile_model = $response->getBody()->__toString();
241 $this->string($csvfile_model)
242 ->isIdenticalTo("\"" . implode("\";\"", $fields) . "\"\r\n");
243
244 $contents = $csvfile_model;
245 foreach ($members_list as $member) {
246 $amember = [];
247 foreach ($fields as $field) {
248 $amember[$field] = $member[$field];
249 }
250 $contents .= "\"" . implode("\";\"", $amember) . "\"\r\n";
251 }
252
253 $path = GALETTE_CACHE_DIR . $file_name;
254 $this->integer(file_put_contents($path, $contents));
255 $_FILES['new_file'] = [
256 'error' => UPLOAD_ERR_OK,
257 'name' => $file_name,
258 'tmp_name' => $path,
259 'size' => filesize($path)
260 ];
261 $this->boolean($csvin->store($_FILES['new_file'], true))->isTrue();
262 $this->boolean(file_exists($csvin->getDestDir() . $csvin->getFileName()))->isTrue();
263
264 $post = [
265 'import_file' => $file_name
266 ];
267
268 $request = clone $this->request;
269 $request = $request->withParsedBody($post);
270
271 $response = $controller->doImports($request, $this->response);
272 $this->integer($response->getStatusCode())->isIdenticalTo(301);
273 $this->array($this->flash_data['slimFlash'])->isIdenticalTo($flash_messages);
274 $this->flash->clearMessages();
275
276 $members = new \Galette\Repository\Members();
277 $list = $members->getList();
278 $this->integer($list->count())->isIdenticalTo($count_after);
279
280 if ($count_before != $count_after) {
281 foreach ($list as $member) {
282 $created = $members_list[$member->fingerprint];
283 foreach ($fields as $field) {
284 if (property_exists($member, $field)) {
285 $this->variable($member->$field)->isEqualTo($created[$field]);
286 } else {
287 //manage dynamic fields
288 $matches = [];
289 if (preg_match('/^dynfield_(\d+)/', $field, $matches)) {
290 $adh = new Adherent($this->zdb, (int)$member->id_adh, ['dynamics' => true]);
291 $expected = [
292 [
293 'item_id' => $adh->id,
294 'field_form' => 'adh',
295 'val_index' => 1,
296 'field_val' => $created[$field]
297 ]
298 ];
299
300 $dfield = $adh->getDynamicFields()->getValues($matches[1]);
301 if (isset($dfield[0]['text_val'])) {
302 //choice, add textual value
303 $expected[0]['text_val'] = $values[$created[$field]];
304 }
305
306 $this->array($adh->getDynamicFields()->getValues($matches[1]))->isEqualTo($expected);
307 } else {
308 throw new \RuntimeException("Unknown field $field");
309 }
310 }
311 }
312 }
313 }
314 }
315
316 /**
317 * Test CSV import loading
318 *
319 * @return void
320 */
321 public function testImport()
322 {
323 $fields = ['nom_adh', 'ville_adh', 'bool_exempt_adh', 'fingerprint'];
324 $file_name = 'test-import-atoum.csv';
325 $flash_messages = [
326 'success_detected' => ["File '$file_name' has been successfully imported :)"]
327 ];
328 $members_list = $this->getMemberData1();
329 $count_before = 0;
330 $count_after = 10;
331
332 $this->doImportFileTest($fields, $file_name, $flash_messages, $members_list, $count_before, $count_after);
333
334 //missing name
335 $file_name = 'test-import-atoum-noname.csv';
336 $flash_messages = [
337 'error_detected' => [
338 'File does not comply with requirements.',
339 'Field nom_adh is required, but missing in row 3'
340 ]
341 ];
342
343 $members_list = $this->getMemberData2NoName();
344 $count_before = 10;
345 $count_after = 10;
346
347 $this->doImportFileTest($fields, $file_name, $flash_messages, $members_list, $count_before, $count_after);
348 }
349
350 /**
351 * Get CSV import model
352 *
353 * @param array $fields Fields list
354 *
355 * @return \Galette\Entity\ImportModel
356 */
357 protected function getModel($fields): \Galette\Entity\ImportModel
358 {
359 $model = new \Galette\Entity\ImportModel();
360 $this->boolean($model->remove($this->zdb))->isTrue();
361
362 $this->object($model->setFields($fields))->isInstanceOf('Galette\Entity\ImportModel');
363 $this->boolean($model->store($this->zdb))->isTrue();
364 $this->boolean($model->load())->isTrue();
365 return $model;
366 }
367
368 /**
369 * Test dynamic translation has been added properly
370 *
371 * @param string $text_orig Original text
372 * @param string $lang Lang text has been added in
373 *
374 * @return void
375 */
376 protected function checkDynamicTranslation($text_orig, $lang = 'fr_FR.utf8')
377 {
378 $langs = array_keys($this->i18n->langs);
379 $select = $this->zdb->select(\Galette\Core\L10n::TABLE);
380 $select->columns([
381 'text_locale',
382 'text_nref',
383 'text_trans'
384 ]);
385 $select->where(['text_orig' => $text_orig]);
386 $results = $this->zdb->execute($select);
387 $this->integer($results->count())->isIdenticalTo(count($langs));
388
389 foreach ($results as $result) {
390 $this->boolean(in_array(str_replace('.utf8', '', $result['text_locale']), $langs))->isTrue();
391 $this->integer((int)$result['text_nref'])->isIdenticalTo(1);
392 $this->string($result['text_trans'])->isIdenticalTo(
393 ($result['text_locale'] == 'fr_FR.utf8' ? $text_orig : '')
394 );
395 }
396 }
397
398 /**
399 * Test import with dynamic fields
400 *
401 * @return void
402 */
403 public function testImportDynamics()
404 {
405
406 $field_data = [
407 'form_name' => 'adh',
408 'field_name' => 'Dynamic text field',
409 'field_perm' => DynamicField::PERM_USER_WRITE,
410 'field_type' => DynamicField::TEXT,
411 'field_required' => 1,
412 'field_repeat' => 1
413 ];
414
415 $df = DynamicField::getFieldType($this->zdb, $field_data['field_type']);
416
417 $stored = $df->store($field_data);
418 $error_detected = $df->getErrors();
419 $warning_detected = $df->getWarnings();
420 $this->boolean($stored)->isTrue(
421 implode(
422 ' ',
423 $df->getErrors() + $df->getWarnings()
424 )
425 );
426 $this->array($error_detected)->isEmpty(implode(' ', $df->getErrors()));
427 $this->array($warning_detected)->isEmpty(implode(' ', $df->getWarnings()));
428 //check if dynamic translation has been added
429 $this->checkDynamicTranslation($field_data['field_name']);
430
431 $select = $this->zdb->select(DynamicField::TABLE);
432 $select->columns(array('num' => new \Laminas\Db\Sql\Expression('COUNT(1)')));
433 $result = $this->zdb->execute($select)->current();
434 $this->integer((int)$result->num)->isIdenticalTo(1);
435
436 $fields = ['nom_adh', 'ville_adh', 'dynfield_' . $df->getId(), 'fingerprint'];
437 $file_name = 'test-import-atoum-dyn.csv';
438 $flash_messages = [
439 'success_detected' => ["File '$file_name' has been successfully imported :)"]
440 ];
441 $members_list = $this->getMemberData1();
442 foreach ($members_list as $fingerprint => &$data) {
443 $data['dynfield_' . $df->getId()] = 'Dynamic field value for ' . $data['fingerprint'];
444 }
445 $count_before = 0;
446 $count_after = 10;
447
448 $this->doImportFileTest($fields, $file_name, $flash_messages, $members_list, $count_before, $count_after);
449
450 //missing name
451 //$fields does not change from previous
452 $file_name = 'test-import-atoum-dyn-noname.csv';
453 $flash_messages = [
454 'error_detected' => [
455 'File does not comply with requirements.',
456 'Field nom_adh is required, but missing in row 3'
457 ]
458 ];
459 $members_list = $this->getMemberData2NoName();
460 foreach ($members_list as $fingerprint => &$data) {
461 $data['dynfield_' . $df->getId()] = 'Dynamic field value for ' . $data['fingerprint'];
462 }
463
464 $count_before = 10;
465 $count_after = 10;
466
467 $this->doImportFileTest($fields, $file_name, $flash_messages, $members_list, $count_before, $count_after);
468
469 //missing required dynamic field
470 //$fields does not change from previous
471 $file_name = 'test-import-atoum-dyn-nodyn.csv';
472 $flash_messages = [
473 'error_detected' => [
474 'File does not comply with requirements.',
475 'Missing required field Dynamic text field'
476 ]
477 ];
478 $members_list = $this->getMemberData2();
479 $i = 0;
480 foreach ($members_list as $fingerprint => &$data) {
481 //two lines without required dynamic field.
482 $data['dynfield_' . $df->getId()] = (($i == 2 || $i == 5) ? '' :
483 'Dynamic field value for ' . $data['fingerprint']);
484 ++$i;
485 }
486
487 $count_before = 10;
488 $count_after = 10;
489
490 $this->doImportFileTest($fields, $file_name, $flash_messages, $members_list, $count_before, $count_after);
491
492 //cleanup members and dynamic fields values
493 $delete = $this->zdb->delete(\Galette\Entity\Adherent::TABLE);
494 $this->zdb->execute($delete);
495 $delete = $this->zdb->delete(\Galette\Entity\DynamicFieldsHandle::TABLE);
496 $this->zdb->execute($delete);
497
498 //new dynamic field, of type choice.
499 $values = [
500 'First value',
501 'Second value',
502 'Third value'
503 ];
504 $cfield_data = [
505 'form_name' => 'adh',
506 'field_name' => 'Dynamic choice field',
507 'field_perm' => DynamicField::PERM_USER_WRITE,
508 'field_type' => DynamicField::CHOICE,
509 'field_required' => 0,
510 'field_repeat' => 1,
511 'fixed_values' => implode("\n", $values)
512 ];
513
514 $cdf = DynamicField::getFieldType($this->zdb, $cfield_data['field_type']);
515
516 $stored = $cdf->store($cfield_data);
517 $error_detected = $cdf->getErrors();
518 $warning_detected = $cdf->getWarnings();
519 $this->boolean($stored)->isTrue(
520 implode(
521 ' ',
522 $cdf->getErrors() + $cdf->getWarnings()
523 )
524 );
525 $this->array($error_detected)->isEmpty(implode(' ', $cdf->getErrors()));
526 $this->array($warning_detected)->isEmpty(implode(' ', $cdf->getWarnings()));
527 //check if dynamic translation has been added
528 $this->checkDynamicTranslation($cfield_data['field_name']);
529
530 $select = $this->zdb->select(DynamicField::TABLE);
531 $select->columns(array('num' => new \Laminas\Db\Sql\Expression('COUNT(1)')));
532 $result = $this->zdb->execute($select)->current();
533 $this->integer((int)$result->num)->isIdenticalTo(2);
534
535 $this->array($cdf->getValues())->isIdenticalTo($values);
536
537 $fields = ['nom_adh', 'ville_adh', 'dynfield_' . $cdf->getId(), 'fingerprint'];
538 $file_name = 'test-import-atoum-dyn-cdyn.csv';
539 $flash_messages = [
540 'success_detected' => ["File '$file_name' has been successfully imported :)"]
541 ];
542 $members_list = $this->getMemberData1();
543 foreach ($members_list as $fingerprint => &$data) {
544 //two lines without required dynamic field.
545 $data['dynfield_' . $cdf->getId()] = rand(0, 2);
546 }
547
548 $count_before = 0;
549 $count_after = 10;
550
551 $this->doImportFileTest(
552 $fields,
553 $file_name,
554 $flash_messages,
555 $members_list,
556 $count_before,
557 $count_after,
558 $values
559 );
560
561 //cleanup members and dynamic fields values
562 $delete = $this->zdb->delete(\Galette\Entity\Adherent::TABLE);
563 $this->zdb->execute($delete);
564 $delete = $this->zdb->delete(\Galette\Entity\DynamicFieldsHandle::TABLE);
565 $this->zdb->execute($delete);
566 //cleanup dynamic choices table
567 $this->contents_table = $cdf->getFixedValuesTableName($cdf->getId());
568
569 //new dynamic field, of type date.
570 $cfield_data = [
571 'form_name' => 'adh',
572 'field_name' => 'Dynamic date field',
573 'field_perm' => DynamicField::PERM_USER_WRITE,
574 'field_type' => DynamicField::DATE,
575 'field_required' => 0,
576 'field_repeat' => 1
577 ];
578
579 $cdf = DynamicField::getFieldType($this->zdb, $cfield_data['field_type']);
580
581 $stored = $cdf->store($cfield_data);
582 $error_detected = $cdf->getErrors();
583 $warning_detected = $cdf->getWarnings();
584 $this->boolean($stored)->isTrue(
585 implode(
586 ' ',
587 $cdf->getErrors() + $cdf->getWarnings()
588 )
589 );
590 $this->array($error_detected)->isEmpty(implode(' ', $cdf->getErrors()));
591 $this->array($warning_detected)->isEmpty(implode(' ', $cdf->getWarnings()));
592 //check if dynamic translation has been added
593 $this->checkDynamicTranslation($cfield_data['field_name']);
594
595 $select = $this->zdb->select(DynamicField::TABLE);
596 $select->columns(array('num' => new \Laminas\Db\Sql\Expression('COUNT(1)')));
597 $result = $this->zdb->execute($select)->current();
598 $this->integer((int)$result->num)->isIdenticalTo(3);
599
600
601 $fields = ['nom_adh', 'ville_adh', 'dynfield_' . $cdf->getId(), 'fingerprint'];
602 $file_name = 'test-import-atoum-cdyn-date.csv';
603 $flash_messages = [
604 'success_detected' => ["File '$file_name' has been successfully imported :)"]
605 ];
606 $members_list = $this->getMemberData1();
607 foreach ($members_list as $fingerprint => &$data) {
608 //two lines without required dynamic field.
609 $data['dynfield_' . $cdf->getId()] = $data['date_crea_adh'];
610 }
611
612 $count_before = 0;
613 $count_after = 10;
614
615 $this->doImportFileTest($fields, $file_name, $flash_messages, $members_list, $count_before, $count_after);
616
617 //Test with a bad date
618 //$fields does not change from previous
619 $file_name = 'test-import-atoum-cdyn-baddate.csv';
620 $flash_messages = [
621 'error_detected' => [
622 'File does not comply with requirements.',
623 '- Wrong date format (Y-m-d) for Dynamic date field!'
624 ]
625 ];
626 $members_list = $this->getMemberData2();
627 $i = 0;
628 foreach ($members_list as $fingerprint => &$data) {
629 //two lines without required dynamic field.
630 $data['dynfield_' . $cdf->getId()] = (($i == 2 || $i == 5) ? '20200513' : $data['date_crea_adh']);
631 ++$i;
632 }
633
634 $count_before = 10;
635 $count_after = 10;
636
637 $this->doImportFileTest($fields, $file_name, $flash_messages, $members_list, $count_before, $count_after);
638 }
639
640 /**
641 * Get first set of member data
642 *
643 * @return array
644 */
645 private function getMemberData1()
646 {
647 return array(
648 'FAKER_0' => array (
649 'nom_adh' => 'Boucher',
650 'prenom_adh' => 'Roland',
651 'ville_adh' => 'Dumas',
652 'cp_adh' => '61276',
653 'adresse_adh' => '5, chemin de Meunier',
654 'email_adh' => 'remy44@lopez.net',
655 'login_adh' => 'jean36',
656 'mdp_adh' => 'HM~OCSl[]UkZp%Y',
657 'mdp_adh2' => 'HM~OCSl[]UkZp%Y',
658 'bool_admin_adh' => false,
659 'bool_exempt_adh' => true,
660 'bool_display_info' => false,
661 'sexe_adh' => 1,
662 'prof_adh' => 'Technicien géomètre',
663 'titre_adh' => null,
664 'ddn_adh' => '1914-03-22',
665 'lieu_naissance' => 'Laurent-sur-Guyot',
666 'pseudo_adh' => 'tgonzalez',
667 'pays_adh' => null,
668 'tel_adh' => '+33 8 93 53 99 52',
669 'url_adh' => null,
670 'activite_adh' => true,
671 'id_statut' => 9,
672 'date_crea_adh' => '2020-03-09',
673 'pref_lang' => 'br',
674 'fingerprint' => 'FAKER_0',
675 ),
676 'FAKER_1' => array (
677 'nom_adh' => 'Lefebvre',
678 'prenom_adh' => 'François',
679 'ville_adh' => 'Laine',
680 'cp_adh' => '53977',
681 'adresse_adh' => '311, rue de Costa',
682 'email_adh' => 'astrid64@masse.fr',
683 'login_adh' => 'olivier.pierre',
684 'mdp_adh' => '.4y/J>yN_QUh7Bw@NW>)',
685 'mdp_adh2' => '.4y/J>yN_QUh7Bw@NW>)',
686 'bool_admin_adh' => false,
687 'bool_exempt_adh' => false,
688 'bool_display_info' => false,
689 'sexe_adh' => 2,
690 'prof_adh' => 'Conseiller relooking',
691 'titre_adh' => null,
692 'ddn_adh' => '1989-10-31',
693 'lieu_naissance' => 'Collet',
694 'pseudo_adh' => 'agnes.evrard',
695 'pays_adh' => null,
696 'tel_adh' => '0288284193',
697 'url_adh' => 'https://leroux.fr/omnis-autem-suscipit-consequuntur-possimus-sint-iste-beatae.html',
698 'activite_adh' => true,
699 'id_statut' => 9,
700 'date_crea_adh' => '2019-11-29',
701 'pref_lang' => 'oc',
702 'fingerprint' => 'FAKER_1',
703 ),
704 'FAKER_2' => array (
705 'nom_adh' => 'Lemaire',
706 'prenom_adh' => 'Georges',
707 'ville_adh' => 'Teixeira-sur-Mer',
708 'cp_adh' => '40141',
709 'adresse_adh' => 'place Guillaume',
710 'email_adh' => 'lefort.vincent@club-internet.fr',
711 'login_adh' => 'josette46',
712 'mdp_adh' => '(IqBaAIR',
713 'mdp_adh2' => '(IqBaAIR',
714 'bool_admin_adh' => false,
715 'bool_exempt_adh' => false,
716 'bool_display_info' => true,
717 'sexe_adh' => 0,
718 'prof_adh' => 'Assistant logistique',
719 'titre_adh' => null,
720 'ddn_adh' => '1935-09-07',
721 'lieu_naissance' => 'Ponsboeuf',
722 'pseudo_adh' => 'fgay',
723 'pays_adh' => null,
724 'tel_adh' => '+33 7 45 45 19 81',
725 'url_adh' => null,
726 'activite_adh' => true,
727 'id_statut' => 8,
728 'date_crea_adh' => '2019-02-03',
729 'pref_lang' => 'uk',
730 'fingerprint' => 'FAKER_2',
731 ),
732 'FAKER_3' => array (
733 'nom_adh' => 'Paul',
734 'prenom_adh' => 'Thibaut',
735 'ville_adh' => 'Mallet-sur-Prevost',
736 'cp_adh' => '50537',
737 'adresse_adh' => '246, boulevard Daniel Mendes',
738 'email_adh' => 'ihamel@pinto.fr',
739 'login_adh' => 'josephine.fabre',
740 'mdp_adh' => '`2LrQcb9Utgm=Y\\S$',
741 'mdp_adh2' => '`2LrQcb9Utgm=Y\\S$',
742 'bool_admin_adh' => false,
743 'bool_exempt_adh' => false,
744 'bool_display_info' => true,
745 'sexe_adh' => 0,
746 'prof_adh' => 'Aide à domicile',
747 'titre_adh' => null,
748 'ddn_adh' => '1961-09-17',
749 'lieu_naissance' => 'Gomez',
750 'pseudo_adh' => 'chauvin.guillaume',
751 'pays_adh' => 'Hong Kong',
752 'tel_adh' => '+33 5 48 57 32 28',
753 'url_adh' => null,
754 'activite_adh' => true,
755 'id_statut' => 1,
756 'date_crea_adh' => '2017-11-20',
757 'pref_lang' => 'nb_NO',
758 'fingerprint' => 'FAKER_3',
759 'societe_adh' => 'Jacques',
760 'is_company' => true,
761 ),
762 'FAKER_4' => array (
763 'nom_adh' => 'Pascal',
764 'prenom_adh' => 'Isaac',
765 'ville_adh' => 'Jourdanboeuf',
766 'cp_adh' => '93966',
767 'adresse_adh' => '5, boulevard de Boucher',
768 'email_adh' => 'valerie.becker@gmail.com',
769 'login_adh' => 'lucie08',
770 'mdp_adh' => '|%+wtMW{l',
771 'mdp_adh2' => '|%+wtMW{l',
772 'bool_admin_adh' => false,
773 'bool_exempt_adh' => false,
774 'bool_display_info' => true,
775 'sexe_adh' => 1,
776 'prof_adh' => 'Bruiteur',
777 'titre_adh' => null,
778 'ddn_adh' => '1953-12-11',
779 'lieu_naissance' => 'Foucher',
780 'pseudo_adh' => 'sauvage.dorothee',
781 'pays_adh' => 'Bangladesh',
782 'tel_adh' => '+33 4 75 14 66 56',
783 'url_adh' => null,
784 'activite_adh' => false,
785 'id_statut' => 9,
786 'date_crea_adh' => '2018-08-16',
787 'pref_lang' => 'en_US',
788 'fingerprint' => 'FAKER_4',
789 ),
790 'FAKER_5' => array (
791 'nom_adh' => 'Morvan',
792 'prenom_adh' => 'Joseph',
793 'ville_adh' => 'Noel',
794 'cp_adh' => '05069',
795 'adresse_adh' => 'place de Barthelemy',
796 'email_adh' => 'claunay@tele2.fr',
797 'login_adh' => 'marthe.hoarau',
798 'mdp_adh' => '\'C?}vJAU>:-iE',
799 'mdp_adh2' => '\'C?}vJAU>:-iE',
800 'bool_admin_adh' => false,
801 'bool_exempt_adh' => false,
802 'bool_display_info' => true,
803 'sexe_adh' => 1,
804 'prof_adh' => 'Opérateur du son',
805 'titre_adh' => null,
806 'ddn_adh' => '1938-05-11',
807 'lieu_naissance' => 'Beguedan',
808 'pseudo_adh' => 'andre.guillou',
809 'pays_adh' => null,
810 'tel_adh' => '09 26 70 06 55',
811 'url_adh' => 'http://www.hoarau.fr/quis-neque-ducimus-quidem-et',
812 'activite_adh' => true,
813 'id_statut' => 9,
814 'date_crea_adh' => '2018-09-28',
815 'pref_lang' => 'ca',
816 'fingerprint' => 'FAKER_5',
817 ),
818 'FAKER_6' => array (
819 'nom_adh' => 'Lebreton',
820 'prenom_adh' => 'Emmanuelle',
821 'ville_adh' => 'Lefevre',
822 'cp_adh' => '29888',
823 'adresse_adh' => '98, rue Moulin',
824 'email_adh' => 'zacharie77@ruiz.fr',
825 'login_adh' => 'marianne.collin',
826 'mdp_adh' => '=jG{wyE',
827 'mdp_adh2' => '=jG{wyE',
828 'bool_admin_adh' => false,
829 'bool_exempt_adh' => false,
830 'bool_display_info' => true,
831 'sexe_adh' => 1,
832 'prof_adh' => 'Galeriste',
833 'titre_adh' => null,
834 'ddn_adh' => '2001-02-01',
835 'lieu_naissance' => 'Berthelot',
836 'pseudo_adh' => 'ferreira.rene',
837 'pays_adh' => 'Tuvalu',
838 'tel_adh' => '+33 (0)7 47 56 89 70',
839 'url_adh' => null,
840 'activite_adh' => true,
841 'id_statut' => 9,
842 'date_crea_adh' => '2018-01-13',
843 'pref_lang' => 'es',
844 'fingerprint' => 'FAKER_6',
845 ),
846 'FAKER_7' => array (
847 'nom_adh' => 'Maurice',
848 'prenom_adh' => 'Capucine',
849 'ville_adh' => 'Renaultdan',
850 'cp_adh' => '59 348',
851 'adresse_adh' => '56, avenue Grenier',
852 'email_adh' => 'didier.emmanuel@tiscali.fr',
853 'login_adh' => 'william.herve',
854 'mdp_adh' => '#7yUz#qToZ\'',
855 'mdp_adh2' => '#7yUz#qToZ\'',
856 'bool_admin_adh' => false,
857 'bool_exempt_adh' => false,
858 'bool_display_info' => true,
859 'sexe_adh' => 1,
860 'prof_adh' => 'Cintrier-machiniste',
861 'titre_adh' => null,
862 'ddn_adh' => '1984-04-17',
863 'lieu_naissance' => 'Rolland',
864 'pseudo_adh' => 'roger27',
865 'pays_adh' => 'Antilles néerlandaises',
866 'tel_adh' => '0922523762',
867 'url_adh' => null,
868 'activite_adh' => true,
869 'id_statut' => 9,
870 'date_crea_adh' => '2020-02-13',
871 'pref_lang' => 'br',
872 'fingerprint' => 'FAKER_7',
873 'societe_adh' => 'Mace',
874 'is_company' => true,
875 ),
876 'FAKER_8' => array (
877 'nom_adh' => 'Hubert',
878 'prenom_adh' => 'Lucy',
879 'ville_adh' => 'Lagarde',
880 'cp_adh' => '22 829',
881 'adresse_adh' => '3, rue Pénélope Marie',
882 'email_adh' => 'zoe02@morvan.com',
883 'login_adh' => 'bernard.agathe',
884 'mdp_adh' => '@9di}eJyc"0s_d(',
885 'mdp_adh2' => '@9di}eJyc"0s_d(',
886 'bool_admin_adh' => false,
887 'bool_exempt_adh' => false,
888 'bool_display_info' => true,
889 'sexe_adh' => 2,
890 'prof_adh' => 'Facteur',
891 'titre_adh' => null,
892 'ddn_adh' => '2008-01-13',
893 'lieu_naissance' => 'Ribeiro',
894 'pseudo_adh' => 'julien.isabelle',
895 'pays_adh' => 'Mexique',
896 'tel_adh' => '0809527977',
897 'url_adh' => null,
898 'activite_adh' => true,
899 'id_statut' => 9,
900 'date_crea_adh' => '2019-06-26',
901 'pref_lang' => 'de_DE',
902 'fingerprint' => 'FAKER_8',
903 ),
904 'FAKER_9' => array (
905 'nom_adh' => 'Goncalves',
906 'prenom_adh' => 'Corinne',
907 'ville_adh' => 'LesageVille',
908 'cp_adh' => '15728',
909 'adresse_adh' => '18, rue de Pinto',
910 'email_adh' => 'julien.clement@dbmail.com',
911 'login_adh' => 'xavier.nicolas',
912 'mdp_adh' => '<W0XdOj2Gp|@;W}gWh]',
913 'mdp_adh2' => '<W0XdOj2Gp|@;W}gWh]',
914 'bool_admin_adh' => false,
915 'bool_exempt_adh' => false,
916 'bool_display_info' => true,
917 'sexe_adh' => 1,
918 'prof_adh' => 'Eleveur de volailles',
919 'titre_adh' => null,
920 'ddn_adh' => '2013-09-12',
921 'lieu_naissance' => 'Breton',
922 'pseudo_adh' => 'louis.pruvost',
923 'pays_adh' => null,
924 'tel_adh' => '+33 (0)6 80 24 46 58',
925 'url_adh' => null,
926 'activite_adh' => true,
927 'id_statut' => 9,
928 'date_crea_adh' => '2020-08-09',
929 'pref_lang' => 'br',
930 'fingerprint' => 'FAKER_9',
931 )
932 );
933 }
934
935 /**
936 * Get second set of member data
937 * two lines without name.
938 *
939 * @return array
940 */
941 private function getMemberData2()
942 {
943 return array (
944 'FAKER_0' => array (
945 'nom_adh' => 'Goncalves',
946 'prenom_adh' => 'Margot',
947 'ville_adh' => 'Alves',
948 'cp_adh' => '76254',
949 'adresse_adh' => '43, impasse Maurice Imbert',
950 'email_adh' => 'guillou.richard@yahoo.fr',
951 'login_adh' => 'suzanne.mathieu',
952 'mdp_adh' => 'Thihk2z0',
953 'mdp_adh2' => 'Thihk2z0',
954 'bool_admin_adh' => false,
955 'bool_exempt_adh' => false,
956 'bool_display_info' => true,
957 'sexe_adh' => 2,
958 'prof_adh' => 'Cueilleur de cerises',
959 'titre_adh' => null,
960 'ddn_adh' => '2020-04-24',
961 'lieu_naissance' => 'Poulain-les-Bains',
962 'pseudo_adh' => 'olivier.roux',
963 'pays_adh' => 'République Dominicaine',
964 'tel_adh' => '08 95 04 73 14',
965 'url_adh' => null,
966 'activite_adh' => true,
967 'id_statut' => 9,
968 'date_crea_adh' => '2020-07-31',
969 'pref_lang' => 'ca',
970 'fingerprint' => 'FAKER_0',
971 ),
972 'FAKER_1' => array (
973 'nom_adh' => 'Da Silva',
974 'prenom_adh' => 'Augustin',
975 'ville_adh' => 'Perrin-sur-Masson',
976 'cp_adh' => '31519',
977 'adresse_adh' => '154, place Boulay',
978 'email_adh' => 'marc60@moreno.fr',
979 'login_adh' => 'hoarau.maryse',
980 'mdp_adh' => '\\9Si%r/FAmz.HE4!{Q\\',
981 'mdp_adh2' => '\\9Si%r/FAmz.HE4!{Q\\',
982 'bool_admin_adh' => false,
983 'bool_exempt_adh' => false,
984 'bool_display_info' => true,
985 'sexe_adh' => 2,
986 'prof_adh' => 'Séismologue',
987 'titre_adh' => null,
988 'ddn_adh' => '1988-06-26',
989 'lieu_naissance' => 'Martel',
990 'pseudo_adh' => 'hchevalier',
991 'pays_adh' => 'Kiribati',
992 'tel_adh' => '04 55 49 80 92',
993 'url_adh' => 'http://www.leblanc.com/nemo-non-rerum-commodi-sequi-ut',
994 'activite_adh' => true,
995 'id_statut' => 1,
996 'date_crea_adh' => '2020-06-02',
997 'pref_lang' => 'fr_FR',
998 'fingerprint' => 'FAKER_1',
999 ),
1000 'FAKER_2' => array (
1001 'nom_adh' => 'Doe',
1002 'prenom_adh' => 'Laetitia',
1003 'ville_adh' => 'SimonBourg',
1004 'cp_adh' => '90351',
1005 'adresse_adh' => '147, chemin de Chauvet',
1006 'email_adh' => 'jean.joseph@pinto.fr',
1007 'login_adh' => 'marianne.bourgeois',
1008 'mdp_adh' => '[oT:"ExE',
1009 'mdp_adh2' => '[oT:"ExE',
1010 'bool_admin_adh' => false,
1011 'bool_exempt_adh' => false,
1012 'bool_display_info' => true,
1013 'sexe_adh' => 0,
1014 'prof_adh' => 'Porteur de hottes',
1015 'titre_adh' => null,
1016 'ddn_adh' => '2010-03-13',
1017 'lieu_naissance' => 'Gallet',
1018 'pseudo_adh' => 'abarre',
1019 'pays_adh' => 'Kirghizistan',
1020 'tel_adh' => '07 47 63 11 31',
1021 'url_adh' => 'https://www.jacques.com/fuga-voluptatem-tenetur-rem-possimus',
1022 'activite_adh' => true,
1023 'id_statut' => 9,
1024 'date_crea_adh' => '2020-10-28',
1025 'pref_lang' => 'ar',
1026 'fingerprint' => 'FAKER_2',
1027 ),
1028 'FAKER_3' => array (
1029 'nom_adh' => 'Cordier',
1030 'prenom_adh' => 'Olivier',
1031 'ville_adh' => 'Lacroixboeuf',
1032 'cp_adh' => '58 787',
1033 'adresse_adh' => '77, place Gilbert Perrier',
1034 'email_adh' => 'adelaide07@yahoo.fr',
1035 'login_adh' => 'riou.sebastien',
1036 'mdp_adh' => '%"OC/UniE46',
1037 'mdp_adh2' => '%"OC/UniE46',
1038 'bool_admin_adh' => false,
1039 'bool_exempt_adh' => false,
1040 'bool_display_info' => false,
1041 'sexe_adh' => 2,
1042 'prof_adh' => 'Oenologue',
1043 'titre_adh' => null,
1044 'ddn_adh' => '2010-10-08',
1045 'lieu_naissance' => 'Leger',
1046 'pseudo_adh' => 'frederique.bernier',
1047 'pays_adh' => null,
1048 'tel_adh' => '+33 2 50 03 01 12',
1049 'url_adh' => null,
1050 'activite_adh' => true,
1051 'id_statut' => 9,
1052 'date_crea_adh' => '2020-08-14',
1053 'pref_lang' => 'ar',
1054 'fingerprint' => 'FAKER_3',
1055 ),
1056 'FAKER_4' => array (
1057 'nom_adh' => 'Robert',
1058 'prenom_adh' => 'Grégoire',
1059 'ville_adh' => 'Delannoy-sur-Mer',
1060 'cp_adh' => '41185',
1061 'adresse_adh' => '15, boulevard de Pierre',
1062 'email_adh' => 'normand.matthieu@orange.fr',
1063 'login_adh' => 'guilbert.louis',
1064 'mdp_adh' => 'y(,HodJF*j',
1065 'mdp_adh2' => 'y(,HodJF*j',
1066 'bool_admin_adh' => false,
1067 'bool_exempt_adh' => false,
1068 'bool_display_info' => true,
1069 'sexe_adh' => 2,
1070 'prof_adh' => 'Mannequin détail',
1071 'titre_adh' => null,
1072 'ddn_adh' => '1974-05-14',
1073 'lieu_naissance' => 'Barbe-sur-Laurent',
1074 'pseudo_adh' => 'stoussaint',
1075 'pays_adh' => 'Îles Mineures Éloignées des États-Unis',
1076 'tel_adh' => '+33 (0)1 30 50 01 54',
1077 'url_adh' => 'http://www.lemaitre.org/dolorum-recusandae-non-eum-non',
1078 'activite_adh' => true,
1079 'id_statut' => 3,
1080 'date_crea_adh' => '2018-12-05',
1081 'pref_lang' => 'it_IT',
1082 'fingerprint' => 'FAKER_4',
1083 'societe_adh' => 'Chretien Martineau S.A.',
1084 'is_company' => true,
1085 ),
1086 'FAKER_5' => array (
1087 'nom_adh' => 'Doe',
1088 'prenom_adh' => 'Charles',
1089 'ville_adh' => 'Charpentier-sur-Lebrun',
1090 'cp_adh' => '99129',
1091 'adresse_adh' => '817, chemin de Bonnin',
1092 'email_adh' => 'guillou.augustin@live.com',
1093 'login_adh' => 'dominique80',
1094 'mdp_adh' => '~g??E0HE$A>2"e*C7+Kw',
1095 'mdp_adh2' => '~g??E0HE$A>2"e*C7+Kw',
1096 'bool_admin_adh' => true,
1097 'bool_exempt_adh' => false,
1098 'bool_display_info' => true,
1099 'sexe_adh' => 0,
1100 'prof_adh' => 'Commandant de police',
1101 'titre_adh' => null,
1102 'ddn_adh' => '2007-03-26',
1103 'lieu_naissance' => 'Boutin',
1104 'pseudo_adh' => 'virginie.jacquet',
1105 'pays_adh' => null,
1106 'tel_adh' => '0393209420',
1107 'url_adh' => null,
1108 'activite_adh' => true,
1109 'id_statut' => 9,
1110 'date_crea_adh' => '2018-02-17',
1111 'pref_lang' => 'fr_FR',
1112 'fingerprint' => 'FAKER_5',
1113 ),
1114 'FAKER_6' => array (
1115 'nom_adh' => 'Thierry',
1116 'prenom_adh' => 'Louis',
1117 'ville_adh' => 'Henry',
1118 'cp_adh' => '98 144',
1119 'adresse_adh' => '383, avenue Éléonore Bouchet',
1120 'email_adh' => 'bernard.elodie@orange.fr',
1121 'login_adh' => 'ubreton',
1122 'mdp_adh' => 'lTBT@,hsE`co?C2=',
1123 'mdp_adh2' => 'lTBT@,hsE`co?C2=',
1124 'bool_admin_adh' => false,
1125 'bool_exempt_adh' => false,
1126 'bool_display_info' => false,
1127 'sexe_adh' => 2,
1128 'prof_adh' => 'Endocrinologue',
1129 'titre_adh' => null,
1130 'ddn_adh' => '1994-07-19',
1131 'lieu_naissance' => 'Pagesdan',
1132 'pseudo_adh' => 'diallo.sebastien',
1133 'pays_adh' => null,
1134 'tel_adh' => '+33 5 72 28 24 81',
1135 'url_adh' => null,
1136 'activite_adh' => true,
1137 'id_statut' => 9,
1138 'date_crea_adh' => '2020-03-16',
1139 'pref_lang' => 'en_US',
1140 'fingerprint' => 'FAKER_6',
1141 ),
1142 'FAKER_7' => array (
1143 'nom_adh' => 'Delattre',
1144 'prenom_adh' => 'Susanne',
1145 'ville_adh' => 'Roche-les-Bains',
1146 'cp_adh' => '37 104',
1147 'adresse_adh' => '44, rue Suzanne Guilbert',
1148 'email_adh' => 'tmartel@wanadoo.fr',
1149 'login_adh' => 'lebreton.alexandre',
1150 'mdp_adh' => '{(3mCWC7[YL]n',
1151 'mdp_adh2' => '{(3mCWC7[YL]n',
1152 'bool_admin_adh' => false,
1153 'bool_exempt_adh' => false,
1154 'bool_display_info' => true,
1155 'sexe_adh' => 0,
1156 'prof_adh' => 'Gérant d\'hôtel',
1157 'titre_adh' => null,
1158 'ddn_adh' => '1914-05-16',
1159 'lieu_naissance' => 'Traore',
1160 'pseudo_adh' => 'helene59',
1161 'pays_adh' => null,
1162 'tel_adh' => '0383453389',
1163 'url_adh' => 'http://www.lesage.com/et-aperiam-labore-est-libero-voluptatem.html',
1164 'activite_adh' => true,
1165 'id_statut' => 9,
1166 'date_crea_adh' => '2020-02-03',
1167 'pref_lang' => 'oc',
1168 'fingerprint' => 'FAKER_7',
1169 ),
1170 'FAKER_8' => array (
1171 'nom_adh' => 'Peltier',
1172 'prenom_adh' => 'Inès',
1173 'ville_adh' => 'Thierry-sur-Carre',
1174 'cp_adh' => '80690',
1175 'adresse_adh' => '43, impasse Texier',
1176 'email_adh' => 'qdubois@mendes.fr',
1177 'login_adh' => 'julie.carlier',
1178 'mdp_adh' => '.ATai-E6%LIxE{',
1179 'mdp_adh2' => '.ATai-E6%LIxE{',
1180 'bool_admin_adh' => false,
1181 'bool_exempt_adh' => false,
1182 'bool_display_info' => true,
1183 'sexe_adh' => 1,
1184 'prof_adh' => 'Gynécologue',
1185 'titre_adh' => null,
1186 'ddn_adh' => '1988-05-29',
1187 'lieu_naissance' => 'Dijoux-sur-Michaud',
1188 'pseudo_adh' => 'wpierre',
1189 'pays_adh' => null,
1190 'tel_adh' => '01 32 14 47 74',
1191 'url_adh' => null,
1192 'activite_adh' => true,
1193 'id_statut' => 9,
1194 'date_crea_adh' => '2020-03-28',
1195 'pref_lang' => 'ar',
1196 'fingerprint' => 'FAKER_8',
1197 ),
1198 'FAKER_9' => array (
1199 'nom_adh' => 'Marchand',
1200 'prenom_adh' => 'Audrey',
1201 'ville_adh' => 'Lenoirdan',
1202 'cp_adh' => '06494',
1203 'adresse_adh' => '438, place de Carre',
1204 'email_adh' => 'luc42@yahoo.fr',
1205 'login_adh' => 'margot.bousquet',
1206 'mdp_adh' => 'FH,q5udclwM(',
1207 'mdp_adh2' => 'FH,q5udclwM(',
1208 'bool_admin_adh' => false,
1209 'bool_exempt_adh' => false,
1210 'bool_display_info' => true,
1211 'sexe_adh' => 1,
1212 'prof_adh' => 'Convoyeur garde',
1213 'titre_adh' => null,
1214 'ddn_adh' => '1977-09-02',
1215 'lieu_naissance' => 'Arnaud-sur-Antoine',
1216 'pseudo_adh' => 'gerard66',
1217 'pays_adh' => null,
1218 'tel_adh' => '+33 1 46 04 81 87',
1219 'url_adh' => 'http://www.thierry.com/',
1220 'activite_adh' => true,
1221 'id_statut' => 5,
1222 'date_crea_adh' => '2019-05-16',
1223 'pref_lang' => 'fr_FR',
1224 'fingerprint' => 'FAKER_9',
1225 )
1226 );
1227 }
1228
1229 /**
1230 * Get second set of member data but two lines without name.
1231 *
1232 * @return array
1233 */
1234 private function getMemberData2NoName()
1235 {
1236 $data = $this->getMemberData2();
1237 $data['FAKER_2']['nom_adh'] = '';
1238 $data['FAKER_5']['nom_adh'] = '';
1239 return $data;
1240 }
1241 }