3 /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
6 * Members repository tests
10 * Copyright © 2017 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/>.
27 * @category Repository
28 * @package GaletteTests
30 * @author Johan Cwiklinski <johan@x-tnd.be>
31 * @copyright 2017 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\Repository\test\units
;
43 * Members repository tests
45 * @category Repository
47 * @package GaletteTests
48 * @author Johan Cwiklinski <johan@x-tnd.be>
49 * @copyright 2017 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 Members
extends atoum
62 private $members_fields;
63 private $seed = 335689;
69 * @param string $testMethod Calling method
73 public function beforeTestMethod($testMethod)
75 $this->zdb
= new \Galette\Core\
Db();
76 $this->i18n
= new \Galette\Core\
I18n(
77 \Galette\Core\I18n
::DEFAULT_LANG
79 $this->preferences
= new \Galette\Core\
Preferences(
82 $this->session
= new \RKA\
Session();
83 $this->login
= new \Galette\Core\
Login($this->zdb
, $this->i18n
, $this->session
);
84 $this->history
= new \Galette\Core\
History($this->zdb
, $this->login
);
86 include_once GALETTE_ROOT
. 'includes/fields_defs/members_fields.php';
87 $this->members_fields
= $members_fields;
88 $this->createMembers();
94 * @param string $testMethod Calling method
98 public function afterTestMethod($testMethod)
100 $this->deleteGroups();
101 $this->deleteMembers();
105 * Create members and get their id
109 private function createMembers()
111 global $zdb, $login, $hist, $i18n; // globals :(
113 $login = $this->login
;
114 $hist = $this->history
;
118 $this->deleteMembers();
119 } catch (\Exception
$e) {
123 $status = new \Galette\Entity\
Status($this->zdb
);
124 if (count($status->getList()) === 0) {
125 $res = $status->installInit();
126 $this->boolean($res)->isTrue();
129 $contribtypes = new \Galette\Entity\
ContributionsTypes($this->zdb
);
130 if (count($contribtypes->getCompleteList()) === 0) {
131 $res = $contribtypes->installInit();
132 $this->boolean($res)->isTrue();
135 $fakedata = new \Galette\Util\
FakeData($this->zdb
, $this->i18n
);
138 ->setSeed($this->seed
)
140 ->setWithPhotos(true)
142 ->setNbTransactions(0)
146 $this->members_fields
,
151 $fakedata->generate();
153 $report = $fakedata->getReport();
155 $this->array($report['success'])->hasSize(2);
156 $this->array($report['errors'])->hasSize(0);
157 $this->array($report['warnings'])->hasSize(0);
159 $this->mids
= $fakedata->getMembersIds();
167 private function deleteMembers()
169 if (is_array($this->mids
) && count($this->mids
) > 0) {
170 $delete = $this->zdb
->delete(\Galette\Entity\Contribution
::TABLE
);
171 $delete->where
->in(\Galette\Entity\Adherent
::PK
, $this->mids
);
172 $this->zdb
->execute($delete);
175 $delete = $this->zdb
->delete(\Galette\Entity\Adherent
::TABLE
);
176 $delete->where(['fingerprint' => 'FAKER' . $this->seed
]);
177 $this->zdb
->execute($delete);
180 $this->zdb
->db
->query(
181 'TRUNCATE TABLE ' . PREFIX_DB
. \Galette\Core\History
::TABLE
,
182 \Zend\Db\Adapter\Adapter
::QUERY_MODE_EXECUTE
185 //FIXME: Photos should be removed, but this fail for now :(
186 $this->zdb
->db
->query(
187 'TRUNCATE TABLE ' . PREFIX_DB
. \Galette\Core\Picture
::TABLE
,
188 \Zend\Db\Adapter\Adapter
::QUERY_MODE_EXECUTE
197 private function deleteGroups()
200 $delete = $this->zdb
->delete(\Galette\Entity\Group
::GROUPSUSERS_TABLE
);
201 $this->zdb
->execute($delete);
203 $delete = $this->zdb
->delete(\Galette\Entity\Group
::TABLE
);
204 $delete->where
->isNotNull('parent_group');
205 $this->zdb
->execute($delete);
207 $delete = $this->zdb
->delete(\Galette\Entity\Group
::TABLE
);
208 $this->zdb
->execute($delete);
216 public function testGetList()
218 $members = new \Galette\Repository\
Members();
220 $list = $members->getList();
221 $this->integer($list->count())->isIdenticalTo(10);
223 $list = $members->getEmails($this->zdb
);
224 $this->array($list)->hasSize(10)
226 'georges.didier@perrot.fr',
231 //Filter on active accounts
232 $filters = new \Galette\Filters\MembersList
;
233 $filters->filter_account
= \Galette\Repository\Members
::ACTIVE_ACCOUNT
;
234 $members = new \Galette\Repository\
Members($filters);
235 $list = $members->getList();
237 $this->integer($list->count())->isIdenticalTo(9);
239 //Filter on inactive accounts
240 $filters = new \Galette\Filters\MembersList
;
241 $filters->filter_account
= \Galette\Repository\Members
::INACTIVE_ACCOUNT
;
242 $members = new \Galette\Repository\
Members($filters);
243 $list = $members->getList();
245 $this->integer($list->count())->isIdenticalTo(1);
248 $filters = new \Galette\Filters\MembersList
;
249 $filters->filter_str
= 'avenue';
250 $filters->field_filter
= \Galette\Repository\Members
::FILTER_ADDRESS
;
251 $members = new \Galette\Repository\
Members($filters);
252 $list = $members->getList();
254 $this->integer($list->count())->isIdenticalTo(2);
256 $members = new \Galette\Repository\
Members();
257 $list = $members->getList(true);
261 ->object[0]->isInstanceOf('\Galette\Entity\Adherent');
263 $members = new \Galette\Repository\
Members();
264 $list = $members->getList(false, ['nom_adh', 'ville_adh']);
265 $this->integer($list->count())->isIdenticalTo(10);
266 $arraylist = $list->toArray();
267 foreach ($arraylist as $array) {
270 ->keys
->isIdenticalTo([
278 $members = new \Galette\Repository\
Members();
279 $list = $members->getStaffMembersList();
280 $this->integer($list->count())->isIdenticalTo(1);
285 $torm[] = array_pop($mids);
286 $torm[] = array_pop($mids);
289 $members = new \Galette\Repository\
Members();
290 $this->boolean($members->removeMembers('notanid'))->isFalse();
291 $this->boolean($members->removeMembers($torm))->isTrue();
293 $list = $members->getList();
294 $this->integer($list->count())->isIdenticalTo(8);
302 public function testGetPublicList()
304 $members = new \Galette\Repository\
Members();
306 $list = $members->getPublicList(false);
307 $this->array($list)->hasSize(1);
311 $this->object($adh)->isInstanceOf('\Galette\Entity\Adherent');
312 $this->boolean($adh->appearsInMembersList())->isTrue();
313 $this->variable($adh->_picture
)->isNull();
315 $list = $members->getPublicList(true);
316 $this->array($list)->hasSize(1);
320 $this->object($adh)->isInstanceOf('\Galette\Entity\Adherent');
321 $this->boolean($adh->appearsInMembersList())->isTrue();
323 $this->boolean($adh->hasPicture())->isTrue();
327 * Test search on groups
331 public function testGroupsSearch()
333 $members = new \Galette\Repository\
Members();
334 $list = $members->getList(true);
335 $this->integer(count($list))->isIdenticalTo(10);
337 $group = new \Galette\Entity\
Group();
338 $group->setName('World');
339 $this->boolean($group->store())->isTrue();
340 $world = $group->getId();
341 $this->integer($world)->isGreaterThan(0);
343 //cannot be parent of itself
346 function () use ($group) {
347 $group->setParentGroup($group->getId());
349 )->hasMessage('Group `World` cannot be set as parent!');
351 $group = new \Galette\Entity\
Group();
352 $group->setName('Europe')->setParentGroup($world);
353 $this->boolean($group->store())->isTrue();
354 $europe = $group->getId();
355 $this->integer($europe)->isGreaterThan(0);
356 $this->boolean($group->setMembers([$list[0], $list[1]]))->isTrue();
358 $group = new \Galette\Entity\
Group();
359 $group->setName('Asia')->setParentGroup($world);
360 $this->boolean($group->store())->isTrue();
361 $asia = $group->getId();
362 $this->integer($asia)->isGreaterThan(0);
363 $this->boolean($group->setMembers([$list[2], $list[3]]))->isTrue();
365 $group = new \Galette\Entity\
Group();
366 $group->setName('Africa')->setParentGroup($world);
367 $this->boolean($group->store())->isTrue();
368 $africa = $group->getId();
369 $this->integer($africa)->isGreaterThan(0);
370 $this->boolean($group->setMembers([$list[4], $list[5]]))->isTrue();
372 $group = new \Galette\Entity\
Group();
373 $group->setName('America')->setParentGroup($world);
374 $this->boolean($group->store())->isTrue();
375 $america = $group->getId();
376 $this->integer($america)->isGreaterThan(0);
377 $this->boolean($group->setMembers([$list[6], $list[7]]))->isTrue();
379 $group = new \Galette\Entity\
Group();
380 $group->setName('Antarctica')->setParentGroup($world);
381 $this->boolean($group->store())->isTrue();
382 $antarctica = $group->getId();
383 $this->integer($america)->isGreaterThan(0);
384 $this->boolean($group->setMembers([$list[8], $list[9]]))->isTrue();
386 $group = new \Galette\Entity\
Group();
387 $group->setName('Activities');
388 $this->boolean($group->store())->isTrue();
389 $activities = $group->getId();
390 $this->integer($activities)->isGreaterThan(0);
392 $group = new \Galette\Entity\
Group();
393 $group->setName('Pony')->setParentGroup($activities);
394 $this->boolean($group->store())->isTrue();
395 $pony = $group->getId();
396 $this->integer($pony)->isGreaterThan(0);
397 //assign Members to group
399 for ($i = 0; $i < 5; ++
$i) {
400 $members[] = $list[$i];
402 $this->boolean($group->setMembers($members))->isTrue();
403 $this->integer(count($group->getMembers()))->isIdenticalTo(5);
405 $group = new \Galette\Entity\
Group();
406 $group->setName('Swimming pool')->setParentGroup($activities);
407 $this->boolean($group->store())->isTrue();
408 $pool = $group->getId();
409 $this->integer($pool)->isGreaterThan(0);
410 //assign Members to group
411 $members = [$list[0]];
412 for ($i = 5; $i < 10; ++
$i) {
413 $members[] = $list[$i];
415 $this->boolean($group->setMembers($members))->isTrue();
416 $this->integer(count($group->getMembers()))->isIdenticalTo(6);
418 //all groups/members are setup. try to find them now.
419 $filters = new \Galette\Filters\AdvancedMembersList
;
420 $filters->groups_search_log_op
= \Galette\Filters\AdvancedMembersList
::OP_OR
;
421 $filters->groups_search
= ['idx' => 1, 'group' => $europe];
422 $members = new \Galette\Repository\
Members($filters);
423 $list = $members->getList();
425 $this->integer($list->count())->isIdenticalTo(2);
427 $filters->groups_search
= ['idx' => 2, 'group' => $pony];
428 $members = new \Galette\Repository\
Members($filters);
429 $list = $members->getList();
431 $this->integer($list->count())->isIdenticalTo(5);
433 $filters->groups_search_log_op
= \Galette\Filters\AdvancedMembersList
::OP_AND
;
434 $members = new \Galette\Repository\
Members($filters);
435 $list = $members->getList();
437 $this->integer($list->count())->isIdenticalTo(2);
440 $filters = new \Galette\Filters\AdvancedMembersList
;
441 $filters->groups_search_log_op
= \Galette\Filters\AdvancedMembersList
::OP_OR
;
442 $filters->groups_search
= ['idx' => 1, 'group' => $africa];
443 $filters->groups_search
= ['idx' => 2, 'group' => $pony];
444 $members = new \Galette\Repository\
Members($filters);
445 $list = $members->getList();
447 $this->integer($list->count())->isIdenticalTo(6);
449 $filters->groups_search_log_op
= \Galette\Filters\AdvancedMembersList
::OP_AND
;
450 $members = new \Galette\Repository\
Members($filters);
451 $list = $members->getList();
453 $this->integer($list->count())->isIdenticalTo(1);