Core  3.2
PHP API documentation
 All Data Structures Namespaces Files Functions Variables Pages
PU_test_dcp_role_move.php
Go to the documentation of this file.
1 <?php
2 /*
3  * @author Anakeen
4  * @package FDL
5 */
6 /**
7  * Group order, all group have one user with same name, and one role with same name
8  *
9  * +--------+ +----------+
10  * + A | | F |
11  * +--------+ +-----------> |
12  * | +-----+--+ +----------+
13  * | | +-------+
14  * | | |
15  * | +-----v----+ +v-----------+
16  * | | | | |
17  * | | B | | C |
18  * | +--------+-+ +----+-------+
19  * | | |
20  * | | | +-----------+
21  * | +-v-----------v--+ | |
22  * | | D | | G |
23  * | | | +-----------+
24  * | +----+-----------+
25  * | |
26  * | +-------v----------+
27  * +------------> |
28  * | E |
29  * +------------------+
30  */
31 
32 namespace Dcp\Pu;
33 /**
34  * @author Anakeen
35  * @package Dcp\Pu
36  */
37 
38 require_once 'PU_testcase_dcp_commonfamily.php';
39 
41 {
42  protected static $outputDir;
43 
44  /**
45  * import TST_FAMSETVALUE family
46  * @static
47  * @return string
48  */
49  protected static function getCommonImportFile()
50  {
51  return array(
52  "PU_data_dcp_role_move.csv"
53  );
54  }
55 
56  /**
57  * @dataProvider dataInitGroup
58  */
59  public function testInitGroup($group)
60  {
61  $this->analyzeGroupUserAndRole($group);
62  }
63 
64  /**
65  * @dataProvider dataInitUser
66  */
67  public function testInitUser($user)
68  {
70  }
71 
72  /**
73  * @dataProvider dataAddUserGToGroupA
74  */
75  public function testAddUserGToGroupA($user)
76  {
77  $gUser = new_Doc(self::$dbaccess, "IUSER_G");
78  $aGroup = new_Doc(self::$dbaccess, "GROUP_A");
79  /* @var $aGroup \_IGROUP */
80  $aGroup->insertDocument($gUser->getPropertyValue("id"));
82  }
83 
84  /**
85  * @dataProvider dataRemoveGUser
86  */
88  {
89  $gUser = new_Doc(self::$dbaccess, "IUSER_G");
90  $eGroup = new_Doc(self::$dbaccess, "GROUP_E");
91  $gGroup = new_Doc(self::$dbaccess, "GROUP_G");
92  /* @var $eGroup \_IGROUP */
93  /* @var $gGroup \_IGROUP */
94  $eGroup->insertDocument($gUser->getPropertyValue("id"));
95  $gGroup->removeDocument($gUser->getPropertyValue("id"));
97  $this->analyzeGroupUserAndRole($group);
98  }
99 
100  /**
101  * @dataProvider addGroupGToGroupE
102  */
103  public function testAddGroupGToGroupE($user, $group)
104  {
105  $eGroup = new_Doc(self::$dbaccess, "GROUP_E");
106  $gGroup = new_Doc(self::$dbaccess, "GROUP_G");
107  /* @var $eGroup \_IGROUP */
108  /* @var $gGroup \_IGROUP */
109  $eGroup->insertDocument($gGroup->getPropertyValue("id"));
110  $eTogGroup = new \Group(self::$dbaccess, array($eGroup->getRawValue("us_whatid")));
111  $eTogGroup->resetAccountMemberOf(true);
113  $this->analyzeGroupUserAndRole($group);
114  }
115 
116  /**
117  * @dataProvider dataRemoveCFromA
118  */
119  public function testRemoveCFromA($user, $group)
120  {
121  $cGroup = new_Doc(self::$dbaccess, "GROUP_C");
122  $aGroup = new_Doc(self::$dbaccess, "GROUP_A");
123  /* @var $cGroup \_IGROUP */
124  /* @var $aGroup \_IGROUP */
125  $aGroup->removeDocument($cGroup->getPropertyValue("id"));
126  $cInternalGroup = new \Group(self::$dbaccess, array($cGroup->getRawValue("us_whatid")));
127  $cInternalGroup->resetAccountMemberOf(true);
129  $this->analyzeGroupUserAndRole($group);
130  }
131 
132  /**
133  * Analyze a user against the role and group definition
134  *
135  * @param array $user contains "name" user logical name, roles : array of role logical name, groups array of group logical name
136  * @return void
137  */
138  protected function analyzeUserGroupAndRole($user)
139  {
141  $userDoc = new_doc(self::$dbaccess, $user["name"]);
142  /* @var $userDoc \_IUSER */
143  $currentRoles = $userDoc->getAccount()->getAllRoles();
144  $currentRoles = array_map(function ($role) {
145  return $role["login"];
146  }, $currentRoles);
147  $this->assertEmpty(array_diff($user["roles"], $currentRoles), sprintf("User %s have not all needed roles (%s instead of %s)",
148  $user["name"], var_export($currentRoles, true), var_export($user["roles"], true)));
149  $this->assertEmpty(array_diff($currentRoles, $user["roles"]), sprintf("User %s have more than all needed roles (%s instead of %s)",
150  $user["name"], var_export($currentRoles, true), var_export($user["roles"], true)));
151  $groups = $user["groups"];
152  $groups = array_map(function ($groupName) use($dbaccess) {
153  return array("name" => $groupName, "id" => getIdFromName($dbaccess, $groupName));
154  }, $groups);
155  $userGroups = $userDoc->getAllUserGroups();
156  foreach ($groups as $currentGroupId) {
157  $this->assertTrue(in_array($currentGroupId["id"], $userGroups), "User {$user["name"]} should be in {$currentGroupId['name']}");
158  }
159  }
160 
161  /**
162  * Analyze a user against the role and users definition
163  *
164  * @param array $user contains "name" user logical name, roles : array of role logical name, users array of user logical name
165  * @return void
166  */
167  protected function analyzeGroupUserAndRole($group)
168  {
169  $currentGroup = new_doc(self::$dbaccess, $group["name"]);
170  /* @var $currentGroup \_IGROUP */
171  $currentRoles = $currentGroup->getAccount()->getAllRoles();
172  $currentRoles = array_map(function ($role) {
173  return $role["login"];
174  }, $currentRoles);
175  $this->assertEmpty(array_diff($group["roles"], $currentRoles), sprintf("Group %s have not all needed roles (%s instead of %s)",
176  $group["name"], var_export($currentRoles, true), var_export($group["roles"], true)));
177  $this->assertEmpty(array_diff($currentRoles, $group["roles"]), sprintf("Group %s have more than all needed roles (%s instead of %s)",
178  $group["name"], var_export($currentRoles, true), var_export($group["roles"], true)));
179  $usersName = $group["users"];
180  /* @var $userDoc \_IUSER */
181  foreach ($usersName as $userName) {
182  $userDoc = new_doc(self::$dbaccess, $userName);
183  $groups = $userDoc->getAllUserGroups();
184  $this->assertTrue(in_array($currentGroup->getPropertyValue("id"), $groups), "User $userName should be in {$group['name']}");
185  }
186  }
187 
188  public function dataInitGroup()
189  {
190  $groups = <<<'JSON'
191 [
192  {
193  "group" : {
194  "name" : "GROUP_A",
195  "users" : ["IUSER_A", "IUSER_B", "IUSER_C", "IUSER_D", "IUSER_E", "IUSER_F"],
196  "roles" : ["role_a", "role_a1"]
197  }
198  },
199  {
200  "group" : {
201  "name" : "GROUP_B",
202  "users" : ["IUSER_B", "IUSER_D", "IUSER_E"],
203  "roles" : ["role_a", "role_a1", "role_b"]
204  }
205  },
206  {
207  "group" : {
208  "name" : "GROUP_C",
209  "users" : ["IUSER_C", "IUSER_D", "IUSER_E"],
210  "roles" : ["role_a", "role_a1", "role_c"]
211  }
212  },
213  {
214  "group" : {
215  "name" : "GROUP_D",
216  "users" : ["IUSER_D", "IUSER_E"],
217  "roles" : ["role_a", "role_a1", "role_b", "role_c", "role_d"]
218  }
219  },
220  {
221  "group" : {
222  "name" : "GROUP_E",
223  "users" : ["IUSER_E"],
224  "roles" : ["role_a", "role_a1", "role_b", "role_c", "role_d", "role_e"]
225  }
226  },
227  {
228  "group" : {
229  "name" : "GROUP_F",
230  "users" : ["IUSER_F"],
231  "roles" : ["role_a", "role_a1", "role_f"]
232  }
233  },
234  {
235  "group" : {
236  "name" : "GROUP_G",
237  "users" : ["IUSER_G"],
238  "roles" : ["role_g"]
239  }
240  }
241 ]
242 JSON;
243  return json_decode($groups, true);
244  }
245 
246  public function dataInitUser()
247  {
248  $users = <<<'JSON'
249 [
250  {
251  "user" : {
252  "name" : "IUSER_A",
253  "groups" : ["GROUP_A"],
254  "roles" : ["role_user_a", "role_a", "role_a1"]
255  }
256  },
257  {
258  "user" : {
259  "name" : "IUSER_B",
260  "groups" : ["GROUP_A", "GROUP_B"],
261  "roles" : ["role_user_b", "role_a", "role_a1", "role_b"]
262  }
263  },
264  {
265  "user" : {
266  "name" : "IUSER_C",
267  "groups" : ["GROUP_A", "GROUP_C"],
268  "roles" : ["role_user_c", "role_a", "role_a1", "role_c"]
269  }
270  },
271  {
272  "user" : {
273  "name" : "IUSER_D",
274  "groups" : ["GROUP_A", "GROUP_B", "GROUP_D"],
275  "roles" : ["role_user_d", "role_a", "role_a1", "role_b", "role_c", "role_d"]
276  }
277  },
278  {
279  "user" : {
280  "name" : "IUSER_E",
281  "groups" : ["GROUP_A", "GROUP_B", "GROUP_D", "GROUP_E", "GROUP_C"],
282  "roles" : ["role_user_e", "role_a", "role_a1", "role_b", "role_c", "role_d", "role_e"]
283  }
284  },
285  {
286  "user" : {
287  "name" : "IUSER_F",
288  "groups" : ["GROUP_A", "GROUP_F"],
289  "roles" : ["role_user_f", "role_a", "role_a1", "role_f"]
290  }
291  },
292  {
293  "user" : {
294  "name" : "IUSER_G",
295  "groups" : ["GROUP_G"],
296  "roles" : ["role_user_g", "role_g"]
297  }
298  }
299 ]
300 JSON;
301  return json_decode($users, true);
302  }
303 
304  public function dataAddUserGToGroupA()
305  {
306  $users = <<<'JSON'
307 [
308  {
309  "user" : {
310  "name" : "IUSER_G",
311  "groups" : ["GROUP_G", "GROUP_A"],
312  "roles" : ["role_user_g", "role_g", "role_a", "role_a1"]
313  }
314  }
315 ]
316 JSON;
317  return json_decode($users, true);
318  }
319 
320  public function dataRemoveGUser()
321  {
322  $users = <<<'JSON'
323 [
324  {
325  "user" : {
326  "name" : "IUSER_G",
327  "groups" : ["GROUP_A", "GROUP_B", "GROUP_D", "GROUP_E"],
328  "roles" : ["role_user_g", "role_a", "role_a1", "role_b", "role_c", "role_d", "role_e"]
329  },
330  "group" : {
331  "name" : "GROUP_A",
332  "users" : ["IUSER_A", "IUSER_B", "IUSER_C", "IUSER_D", "IUSER_E", "IUSER_F", "IUSER_G"],
333  "roles" : ["role_a", "role_a1"]
334  }
335  }
336 ]
337 JSON;
338  return json_decode($users, true);
339  }
340 
341  public function addGroupGToGroupE()
342  {
343  $users = <<<'JSON'
344 [
345  {
346  "user" : {
347  "name" : "IUSER_G",
348  "groups" : ["GROUP_A", "GROUP_B", "GROUP_C", "GROUP_D", "GROUP_E", "GROUP_G"],
349  "roles" : ["role_user_g", "role_a", "role_a1", "role_b", "role_c", "role_d", "role_e", "role_g"]
350  },
351  "group" : {
352  "name" : "GROUP_G",
353  "users" : ["IUSER_G"],
354  "roles" : ["role_g", "role_a", "role_a1", "role_b", "role_c", "role_d", "role_e"]
355  }
356  },
357  {
358  "user" : {
359  "name" : "IUSER_G",
360  "groups" : ["GROUP_A", "GROUP_B", "GROUP_C", "GROUP_D", "GROUP_E", "GROUP_G"],
361  "roles" : ["role_user_g", "role_a", "role_a1", "role_b", "role_c", "role_d", "role_e", "role_g"]
362  },
363  "group" : {
364  "name" : "GROUP_E",
365  "users" : ["IUSER_G", "IUSER_E"],
366  "roles" : ["role_a", "role_a1", "role_b", "role_c", "role_d", "role_e"]
367  }
368  }
369 ]
370 JSON;
371  return json_decode($users, true);
372  }
373 
374  public function dataRemoveCFromA()
375  {
376  $users = <<<'JSON'
377 [
378  {
379  "user" : {
380  "name" : "IUSER_C",
381  "groups" : ["GROUP_C"],
382  "roles" : ["role_user_c", "role_c"]
383  },
384  "group" : {
385  "name" : "GROUP_C",
386  "users" : ["IUSER_C"],
387  "roles" : ["role_c"]
388  }
389  },
390  {
391  "user" : {
392  "name" : "IUSER_E",
393  "groups" : ["GROUP_A", "GROUP_B", "GROUP_D", "GROUP_E"],
394  "roles" : ["role_user_e", "role_a", "role_a1", "role_b", "role_d", "role_e", "role_c"]
395  },
396  "group" : {
397  "name" : "GROUP_A",
398  "users" : ["IUSER_A", "IUSER_B", "IUSER_D", "IUSER_E", "IUSER_F"],
399  "roles" : ["role_a", "role_a1"]
400  }
401  }
402 ]
403 JSON;
404  return json_decode($users, true);
405  }
406 
407 
408 }
print $fam getTitle() $fam name
new_Doc($dbaccess, $id= '', $latest=false)
$dbaccess
Definition: checkVault.php:17
getIdFromName($dbaccess, $name)
testAddGroupGToGroupE($user, $group)
testRemoveUserGFromGroupGAndAddItToGroupE($user, $group)
← centre documentaire © anakeen