1<?php
2// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
3//
4// All Rights Reserved. See copyright.txt for details and a complete list of authors.
5// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
6// $Id$
7
8/**
9 * @group unit
10 *
11 */
12
13class Perms_Reflection_QuickTest extends TikiTestCase
14{
15	function testUnconfigured()
16	{
17		$quick = new Perms_Reflection_Quick;
18
19		$obtained = $quick->getPermissions(
20			new Perms_Reflection_PermissionSet,
21			[
22				'Anonymous' => 'basic',
23				'Registered' => 'editor',
24			]
25		);
26		$this->assertEquals(new Perms_Reflection_PermissionSet, $obtained);
27	}
28
29	function testSimpleConfigurations()
30	{
31		$quick = new Perms_Reflection_Quick;
32		$quick->configure('tester', ['view', 'edit', 'comment']);
33		$quick->configure('basic', ['view']);
34
35		$obtained = $quick->getPermissions(
36			new Perms_Reflection_PermissionSet,
37			[
38				'Anonymous' => 'basic',
39				'Registered' => 'editor',
40				'Tester' => 'tester',
41			]
42		);
43
44		$expect = new Perms_Reflection_PermissionSet;
45		$expect->add('Anonymous', 'view');
46		$expect->add('Tester', 'view');
47		$expect->add('Tester', 'edit');
48		$expect->add('Tester', 'comment');
49
50		$this->assertEquals($expect, $obtained);
51	}
52
53	function testInheritance()
54	{
55		$quick = new Perms_Reflection_Quick;
56		$quick->configure('basic', ['view']);
57		$quick->configure('registered', ['edit']);
58		$quick->configure('editors', ['remove']);
59
60		$obtained = $quick->getPermissions(
61			new Perms_Reflection_PermissionSet,
62			[
63				'Anonymous' => 'basic',
64				'Registered' => 'registered',
65				'Editor' => 'editors',
66			]
67		);
68
69		$expect = new Perms_Reflection_PermissionSet;
70		$expect->add('Anonymous', 'view');
71		$expect->add('Registered', 'view');
72		$expect->add('Registered', 'edit');
73		$expect->add('Editor', 'view');
74		$expect->add('Editor', 'edit');
75		$expect->add('Editor', 'remove');
76
77		$this->assertEquals($expect, $obtained);
78	}
79
80	function testAssignNone()
81	{
82		$quick = new Perms_Reflection_Quick;
83		$current = new Perms_Reflection_PermissionSet;
84		$current->add('Anonymous', 'view');
85
86		$obtained = $quick->getPermissions(
87			$current,
88			['Anonymous' => 'none',]
89		);
90
91		$expect = new Perms_Reflection_PermissionSet;
92
93		$this->assertEquals($expect, $obtained);
94	}
95
96	function testOnbtainUserdefined()
97	{
98		$quick = new Perms_Reflection_Quick;
99		$current = new Perms_Reflection_PermissionSet;
100		$current->add('Anonymous', 'view');
101
102		$obtained = $quick->getPermissions(
103			$current,
104			['Anonymous' => 'userdefined',]
105		);
106
107		$expect = new Perms_Reflection_PermissionSet;
108		$expect->add('Anonymous', 'view');
109
110		$this->assertEquals($expect, $obtained);
111	}
112
113	function testDefaultRetrieveGroups()
114	{
115		$quick = new Perms_Reflection_Quick;
116
117		$permissions = new Perms_Reflection_PermissionSet;
118		$permissions->add('Registered', 'view');
119
120		$expect = [
121			'Anonymous' => 'none',
122			'Registered' => 'userdefined',
123		];
124
125		$obtained = $quick->getAppliedPermissions($permissions, ['Anonymous', 'Registered']);
126
127		$this->assertEquals($expect, $obtained);
128	}
129
130	function testMatch()
131	{
132		$quick = new Perms_Reflection_Quick;
133		$quick->configure('basic', ['view']);
134
135		$permissions = new Perms_Reflection_PermissionSet;
136		$permissions->add('Registered', 'view');
137
138		$expect = ['Registered' => 'basic'];
139
140		$obtained = $quick->getAppliedPermissions($permissions, ['Registered']);
141
142		$this->assertEquals($expect, $obtained);
143	}
144
145	function testNoMatchOnExtra()
146	{
147		$quick = new Perms_Reflection_Quick;
148		$quick->configure('basic', ['view']);
149
150		$permissions = new Perms_Reflection_PermissionSet;
151		$permissions->add('Registered', 'view');
152		$permissions->add('Registered', 'edit');
153
154		$expect = ['Registered' => 'userdefined'];
155
156		$obtained = $quick->getAppliedPermissions($permissions, ['Registered']);
157
158		$this->assertEquals($expect, $obtained);
159	}
160
161	function testNoMatchOnMissing()
162	{
163		$quick = new Perms_Reflection_Quick;
164		$quick->configure('basic', ['view', 'edit']);
165
166		$permissions = new Perms_Reflection_PermissionSet;
167		$permissions->add('Registered', 'view');
168
169		$expect = ['Registered' => 'userdefined'];
170
171		$obtained = $quick->getAppliedPermissions($permissions, ['Registered']);
172
173		$this->assertEquals($expect, $obtained);
174	}
175
176	function testInheritenceAppiesInMatching()
177	{
178		$quick = new Perms_Reflection_Quick;
179		$quick->configure('basic', ['view']);
180		$quick->configure('registered', ['edit']);
181
182		$permissions = new Perms_Reflection_PermissionSet;
183		$permissions->add('Registered', 'view');
184		$permissions->add('Registered', 'edit');
185
186		$expect = ['Registered' => 'registered'];
187
188		$obtained = $quick->getAppliedPermissions($permissions, ['Registered']);
189
190		$this->assertEquals($expect, $obtained);
191	}
192
193	function testRegisterNoneIsIgnored()
194	{
195		$quick = new Perms_Reflection_Quick;
196		$quick->configure('none', ['view']);
197
198		$expect = new Perms_Reflection_Quick;
199		$this->assertEquals($expect, $quick);
200	}
201
202	function testRegisterUserDefinedIsIgnored()
203	{
204		$quick = new Perms_Reflection_Quick;
205		$quick->configure('userdefined', ['view']);
206
207		$expect = new Perms_Reflection_Quick;
208		$this->assertEquals($expect, $quick);
209	}
210}
211