3 /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
10 * Copyright © 2013-2014 The Galette Team
12 * This file is part of Galette (http://galette.tuxfamily.org).
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.
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.
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/>.
28 * @package GaletteTests
30 * @author Johan Cwiklinski <johan@x-tnd.be>
31 * @copyright 2016 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
34 * @link http://galette.tuxfamily.org
38 namespace Galette\Entity\test\units
;
43 * Preferences tests class
47 * @package GaletteTests
48 * @author Johan Cwiklinski <johan@x-tnd.be>
49 * @copyright 2016 The Galette Team
50 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
51 * @link http://galette.tuxfamily.org
54 class FieldsConfig
extends atoum
56 private $fields_config = null;
58 private $members_fields;
59 private $members_fields_cats;
64 * @param string $testMethod Calling method
68 public function beforeTestMethod($testMethod)
70 $this->zdb
= new \Galette\Core\
Db();
72 include_once GALETTE_ROOT
. 'includes/fields_defs/members_fields.php';
73 $this->members_fields
= $members_fields;
74 include_once GALETTE_ROOT
. 'includes/fields_defs/members_fields_cats.php';
75 $this->members_fields_cats
= $members_fields_cats;
77 $this->fields_config
= new \Galette\Entity\
FieldsConfig(
79 \Galette\Entity\Adherent
::TABLE
,
80 $this->members_fields
,
81 $this->members_fields_cats
,
87 * Test non required fields
91 public function testNonRequired()
93 $nrequired = $this->fields_config
->getNonRequired();
109 $this->array($nrequired)->isIdenticalTo($expected);
113 * Test FieldsConfig initialization
117 public function testInstallInit()
119 $result = $this->fields_config
->installInit(
122 $this->boolean($result)->isTrue();
124 //new object with values loaded from database to compare
125 $fields_config = new \Galette\Entity\
FieldsConfig(
127 \Galette\Entity\Adherent
::TABLE
,
128 $this->members_fields
,
129 $this->members_fields_cats
132 $categorized = $fields_config->getCategorizedFields();
133 $this->countCategorizedFields($categorized);
135 $required = $fields_config->getRequired();
144 $this->array($required)->isEqualTo($expected);
146 $isrequired = $fields_config->isRequired('login_adh');
147 $this->boolean($isrequired)->isTrue();
149 $isrequired = $fields_config->isRequired('info_adh');
150 $this->boolean($isrequired)->isFalse();
152 $lists_config = new \Galette\Entity\
ListsConfig(
154 \Galette\Entity\Adherent
::TABLE
,
155 $this->members_fields
,
156 $this->members_fields_cats
,
159 $this->boolean($lists_config->load())->isTrue();
161 $visibles = $fields_config->getVisibilities();
162 $this->array($visibles)
164 count($categorized[\Galette\Entity\FieldsCategories
::ADH_CATEGORY_IDENTITY
]) +
165 count($categorized[\Galette\Entity\FieldsCategories
::ADH_CATEGORY_GALETTE
]) +
166 count($categorized[\Galette\Entity\FieldsCategories
::ADH_CATEGORY_CONTACT
]) +
167 count($lists_config->getAclMapping())
169 ->integer['id_adh']->isIdenticalTo(0)
170 ->integer['nom_adh']->isIdenticalTo(1);
174 * Count categorized_fields
176 * @param array $categorized Categorized fields
180 private function countCategorizedFields($categorized)
182 $this->array($categorized)
184 $this->array($categorized[\Galette\Entity\FieldsCategories
::ADH_CATEGORY_IDENTITY
])
186 $this->array($categorized[\Galette\Entity\FieldsCategories
::ADH_CATEGORY_GALETTE
])
188 $this->array($categorized[\Galette\Entity\FieldsCategories
::ADH_CATEGORY_CONTACT
])
193 * Test setNotRequired
197 public function testSetNotRequired()
199 $fields_config = $this->fields_config
;
200 $fields_config->load();
202 $required_mdp = $fields_config->getRequired()['mdp_adh'];
203 $this->boolean($required_mdp)->isTrue();
205 $cat = \Galette\Entity\FieldsCategories
::ADH_CATEGORY_GALETTE
;
206 $required_mdp = $fields_config->getCategorizedFields()[$cat][6]['required'];
207 $this->boolean($required_mdp)->isTrue();
209 $fields_config->setNotRequired('mdp_adh');
211 $required_mdp = $fields_config->getRequired();
212 $this->array($required_mdp)->notHasKey('mdp_adh');
214 $required_mdp = $fields_config->getCategorizedFields()[$cat][6]['required'];
215 $this->boolean($required_mdp)->isFalse();
223 public function testGetVisibility()
225 $this->fields_config
->load();
227 $visible = $this->fields_config
->getVisibility('nom_adh');
228 $this->integer($visible)->isIdenticalTo(\Galette\Entity\FieldsConfig
::USER_WRITE
);
230 $visible = $this->fields_config
->getVisibility('id_adh');
231 $this->integer($visible)->isIdenticalTo(\Galette\Entity\FieldsConfig
::NOBODY
);
233 $visible = $this->fields_config
->getVisibility('info_adh');
234 $this->integer($visible)->isIdenticalTo(\Galette\Entity\FieldsConfig
::STAFF
);
238 * Test setFields and storage
242 public function testSetFields()
244 $fields_config = $this->fields_config
;
245 $fields_config->installInit();
246 $fields_config->load();
248 $fields = $fields_config->getCategorizedFields();
251 $town = &$fields[\Galette\Entity\FieldsCategories
::ADH_CATEGORY_CONTACT
][3];
252 $this->boolean($town['required'])->isTrue();
253 $this->integer($town['visible'])->isIdenticalTo(\Galette\Entity\FieldsConfig
::USER_WRITE
);
255 $town['required'] = false;
256 $town['visible'] = \Galette\Entity\FieldsConfig
::NOBODY
;
259 $jabber = $fields[\Galette\Entity\FieldsCategories
::ADH_CATEGORY_CONTACT
][10];
260 $jabber['position'] = count($fields[1]);
261 unset($fields[\Galette\Entity\FieldsCategories
::ADH_CATEGORY_CONTACT
][10]);
262 $jabber['category'] = \Galette\Entity\FieldsCategories
::ADH_CATEGORY_IDENTITY
;
263 $fields[\Galette\Entity\FieldsCategories
::ADH_CATEGORY_IDENTITY
][] = $jabber;
265 $this->boolean($fields_config->setFields($fields))->isTrue();
267 $fields_config->load();
268 $fields = $fields_config->getCategorizedFields();
270 $town = $fields[\Galette\Entity\FieldsCategories
::ADH_CATEGORY_CONTACT
][3];
271 $this->boolean($town['required'])->isFalse();
272 $this->integer($town['visible'])->isIdenticalTo(\Galette\Entity\FieldsConfig
::NOBODY
);
274 $jabber2 = $fields[\Galette\Entity\FieldsCategories
::ADH_CATEGORY_IDENTITY
][12];
275 $this->array($jabber2)->isIdenticalTo($jabber);
279 * Test isSelfExcluded
283 public function testIsSelfExcluded()
285 $this->boolean($this->fields_config
->isSelfExcluded('bool_admin_adh'))->isTrue();
286 $this->boolean($this->fields_config
->isSelfExcluded('info_adh'))->isTrue();
287 $this->boolean($this->fields_config
->isSelfExcluded('nom_adh'))->isFalse();
295 public function testCheckUpdate()
297 $fields_config = $this->fields_config
;
298 $fields_config->load();
300 $categorized_init = $fields_config->getCategorizedFields();
303 foreach ($categorized_init[1] as $field) {
304 if ($field['field_id'] === 'nom_adh') {
309 $this->boolean($exists)->isTrue();
311 $delete = $this->zdb
->delete(\Galette\Entity\FieldsConfig
::TABLE
);
314 'table_name' => \Galette\Entity\Adherent
::TABLE
,
315 'field_id' => 'nom_adh'
318 $res = $this->zdb
->execute($delete);
319 $this->integer($res->count())->isIdenticalTo(1);
321 $fields_config->load();
323 $categorized = $fields_config->getCategorizedFields();
325 count($categorized[\Galette\Entity\FieldsCategories
::ADH_CATEGORY_IDENTITY
])
326 )->isIdenticalTo(12);
328 //new object instanciation should add missing field back
329 $fields_config = new \Galette\Entity\
FieldsConfig(
331 \Galette\Entity\Adherent
::TABLE
,
332 $this->members_fields
,
333 $this->members_fields_cats
336 $categorized = $fields_config->getCategorizedFields();
337 $this->array($categorized)->isIdenticalTo($categorized_init);
341 * Test check update when all is empty
345 public function testCheckUpdateWhenEmpty()
347 $this->zdb
->db
->query(
348 'TRUNCATE ' . PREFIX_DB
. \Galette\Entity\FieldsConfig
::TABLE
,
349 \Zend\Db\Adapter\Adapter
::QUERY_MODE_EXECUTE
351 $this->zdb
->db
->query(
352 'DELETE FROM ' . PREFIX_DB
. \Galette\Entity\FieldsCategories
::TABLE
,
353 \Zend\Db\Adapter\Adapter
::QUERY_MODE_EXECUTE
356 //new object instanciation should add missing fieldis and categories
357 $fields_config = new \Galette\Entity\
FieldsConfig(
359 \Galette\Entity\Adherent
::TABLE
,
360 $this->members_fields
,
361 $this->members_fields_cats
364 $categorized = $fields_config->getCategorizedFields();
365 $this->countCategorizedFields($categorized);
369 * Test get display elements
373 public function testGetDisplayElements()
375 $fields_config = $this->fields_config
;
376 $fields_config->load();
378 $session = new \RKA\
Session();
379 $admin_login = new \mock\Galette\Core\
Login(
381 new \Galette\Core\
I18n(),
384 $this->calling($admin_login)->isAdmin
= true;
386 $elements = $fields_config->getDisplayElements($admin_login);
387 $this->array($elements)
390 $this->object($elements[0])->isInstanceOf('\stdClass');
391 $this->integer($elements[0]->id
)->isIdenticalTo(1);
392 $this->array($elements[0]->elements
)->hasSize(7);
394 $this->object($elements[1])->isInstanceOf('\stdClass');
395 $this->integer($elements[1]->id
)->isIdenticalTo(3);
396 $this->array($elements[1]->elements
)->hasSize(10);
398 $this->object($elements[2])->isInstanceOf('\stdClass');
399 $this->integer($elements[2]->id
)->isIdenticalTo(2);
400 $this->array($elements[2]->elements
)
402 ->hasKey('info_adh');
404 $user_login = new \mock\Galette\Core\
Login(
406 new \Galette\Core\
I18n(),
409 $this->calling($user_login)->isUp2Date
= true;
411 $elements = $fields_config->getDisplayElements($user_login);
412 $this->array($elements)
415 $this->object($elements[0])->isInstanceOf('\stdClass');
416 $this->integer($elements[0]->id
)->isIdenticalTo(1);
417 $this->array($elements[0]->elements
)->hasSize(7);
419 $this->object($elements[1])->isInstanceOf('\stdClass');
420 $this->integer($elements[1]->id
)->isIdenticalTo(3);
421 $this->array($elements[1]->elements
)->hasSize(10);
423 $this->object($elements[2])->isInstanceOf('\stdClass');
424 $this->integer($elements[2]->id
)->isIdenticalTo(2);
425 $this->array($elements[2]->elements
)
427 ->notHasKey('info_adh');
431 * Test get form elements
435 public function testGetFormElements()
437 $fields_config = $this->fields_config
;
438 $fields_config->load();
440 $session = new \RKA\
Session();
441 $admin_login = new \mock\Galette\Core\
Login(
443 new \Galette\Core\
I18n(),
446 $this->calling($admin_login)->isAdmin
= true;
448 $elements = $fields_config->getFormElements($admin_login, false);
449 $this->array($elements)
451 ->hasKeys(['fieldsets', 'hiddens']);
453 $this->array($elements['fieldsets'])
456 $this->object($elements['fieldsets'][0])->isInstanceOf('\stdClass');
457 $this->integer($elements['fieldsets'][0]->id
)->isIdenticalTo(1);
458 $this->array($elements['fieldsets'][0]->elements
)->hasSize(10);
460 $this->object($elements['fieldsets'][1])->isInstanceOf('\stdClass');
461 $this->integer($elements['fieldsets'][1]->id
)->isIdenticalTo(3);
462 $this->array($elements['fieldsets'][1]->elements
)->hasSize(11);
464 $this->object($elements['fieldsets'][2])->isInstanceOf('\stdClass');
465 $this->integer($elements['fieldsets'][2]->id
)->isIdenticalTo(2);
466 $this->array($elements['fieldsets'][2]->elements
)
468 ->hasKey('info_adh');
470 $this->array($elements['hiddens'])
473 $user_login = new \mock\Galette\Core\
Login(
475 new \Galette\Core\
I18n(),
478 $this->calling($user_login)->isUp2Date
= true;
480 $elements = $fields_config->getFormElements($user_login, false);
481 $this->array($elements)
483 ->hasKeys(['fieldsets', 'hiddens']);
485 $this->array($elements['fieldsets'])
488 $this->object($elements['fieldsets'][0])->isInstanceOf('\stdClass');
489 $this->integer($elements['fieldsets'][0]->id
)->isIdenticalTo(1);
490 $this->array($elements['fieldsets'][0]->elements
)->hasSize(10);
492 $this->object($elements['fieldsets'][1])->isInstanceOf('\stdClass');
493 $this->integer($elements['fieldsets'][1]->id
)->isIdenticalTo(3);
494 $this->array($elements['fieldsets'][1]->elements
)->hasSize(11);
496 $this->object($elements['fieldsets'][2])->isInstanceOf('\stdClass');
497 $this->integer($elements['fieldsets'][2]->id
)->isIdenticalTo(2);
498 $this->array($elements['fieldsets'][2]->elements
)
500 ->notHasKey('info_adh');
502 $this->array($elements['hiddens'])