pictcode / lib / Cake / Test / Case / Console / Command / AclShellTest.php @ 0b1b8047
履歴 | 表示 | アノテート | ダウンロード (9.367 KB)
1 |
<?php
|
---|---|
2 |
/**
|
3 |
* AclShell Test file
|
4 |
*
|
5 |
* CakePHP : Rapid Development Framework (http://cakephp.org)
|
6 |
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
7 |
*
|
8 |
* Licensed under The MIT License
|
9 |
* For full copyright and license information, please see the LICENSE.txt
|
10 |
* Redistributions of files must retain the above copyright notice.
|
11 |
*
|
12 |
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
13 |
* @link http://cakephp.org CakePHP Project
|
14 |
* @package Cake.Test.Case.Console.Command
|
15 |
* @since CakePHP v 1.2.0.7726
|
16 |
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
17 |
*/
|
18 |
|
19 |
App::uses('ConsoleOutput', 'Console'); |
20 |
App::uses('ConsoleInput', 'Console'); |
21 |
App::uses('ShellDispatcher', 'Console'); |
22 |
App::uses('Shell', 'Console'); |
23 |
App::uses('AclShell', 'Console/Command'); |
24 |
App::uses('ComponentCollection', 'Controller'); |
25 |
|
26 |
/**
|
27 |
* AclShellTest class
|
28 |
*
|
29 |
* @package Cake.Test.Case.Console.Command
|
30 |
*/
|
31 |
class AclShellTest extends CakeTestCase { |
32 |
|
33 |
/**
|
34 |
* Fixtures
|
35 |
*
|
36 |
* @var array
|
37 |
*/
|
38 |
public $fixtures = array('core.aco', 'core.aro', 'core.aros_aco'); |
39 |
|
40 |
/**
|
41 |
* setUp method
|
42 |
*
|
43 |
* @return void
|
44 |
*/
|
45 |
public function setUp() { |
46 |
parent::setUp();
|
47 |
Configure::write('Acl.database', 'test'); |
48 |
Configure::write('Acl.classname', 'DbAcl'); |
49 |
|
50 |
$out = $this->getMock('ConsoleOutput', array(), array(), '', false); |
51 |
$in = $this->getMock('ConsoleInput', array(), array(), '', false); |
52 |
|
53 |
$this->Task = $this->getMock( |
54 |
'AclShell',
|
55 |
array('in', 'out', 'hr', 'createFile', 'error', 'err', 'clear', 'dispatchShell'), |
56 |
array($out, $out, $in) |
57 |
); |
58 |
$collection = new ComponentCollection(); |
59 |
$this->Task->Acl = new AclComponent($collection); |
60 |
$this->Task->params['datasource'] = 'test'; |
61 |
} |
62 |
|
63 |
/**
|
64 |
* test that model.foreign_key output works when looking at acl rows
|
65 |
*
|
66 |
* @return void
|
67 |
*/
|
68 |
public function testViewWithModelForeignKeyOutput() { |
69 |
$this->Task->command = 'view'; |
70 |
$this->Task->startup(); |
71 |
$data = array( |
72 |
'parent_id' => null, |
73 |
'model' => 'MyModel', |
74 |
'foreign_key' => 2, |
75 |
); |
76 |
$this->Task->Acl->Aro->create($data); |
77 |
$this->Task->Acl->Aro->save(); |
78 |
$this->Task->args[0] = 'aro'; |
79 |
|
80 |
$this->Task->expects($this->at(0))->method('out')->with('Aro tree:'); |
81 |
$this->Task->expects($this->at(2))->method('out') |
82 |
->with($this->stringContains('[1] ROOT')); |
83 |
|
84 |
$this->Task->expects($this->at(4))->method('out') |
85 |
->with($this->stringContains('[3] Gandalf')); |
86 |
|
87 |
$this->Task->expects($this->at(6))->method('out') |
88 |
->with($this->stringContains('[5] MyModel.2')); |
89 |
|
90 |
$this->Task->view(); |
91 |
} |
92 |
|
93 |
/**
|
94 |
* test view with an argument
|
95 |
*
|
96 |
* @return void
|
97 |
*/
|
98 |
public function testViewWithArgument() { |
99 |
$this->Task->args = array('aro', 'admins'); |
100 |
|
101 |
$this->Task->expects($this->at(0))->method('out')->with('Aro tree:'); |
102 |
$this->Task->expects($this->at(2))->method('out')->with(' [2] admins'); |
103 |
$this->Task->expects($this->at(3))->method('out')->with(' [3] Gandalf'); |
104 |
$this->Task->expects($this->at(4))->method('out')->with(' [4] Elrond'); |
105 |
|
106 |
$this->Task->view(); |
107 |
} |
108 |
|
109 |
/**
|
110 |
* test the method that splits model.foreign key. and that it returns an array.
|
111 |
*
|
112 |
* @return void
|
113 |
*/
|
114 |
public function testParsingModelAndForeignKey() { |
115 |
$result = $this->Task->parseIdentifier('Model.foreignKey'); |
116 |
$expected = array('model' => 'Model', 'foreign_key' => 'foreignKey'); |
117 |
$this->assertEquals($expected, $result); |
118 |
|
119 |
$result = $this->Task->parseIdentifier('mySuperUser'); |
120 |
$this->assertEquals('mySuperUser', $result); |
121 |
|
122 |
$result = $this->Task->parseIdentifier('111234'); |
123 |
$this->assertEquals('111234', $result); |
124 |
} |
125 |
|
126 |
/**
|
127 |
* test creating aro/aco nodes
|
128 |
*
|
129 |
* @return void
|
130 |
*/
|
131 |
public function testCreate() { |
132 |
$this->Task->args = array('aro', 'root', 'User.1'); |
133 |
$this->Task->expects($this->at(0))->method('out')->with("<success>New Aro</success> 'User.1' created.", 2); |
134 |
$this->Task->expects($this->at(1))->method('out')->with("<success>New Aro</success> 'User.3' created.", 2); |
135 |
$this->Task->expects($this->at(2))->method('out')->with("<success>New Aro</success> 'somealias' created.", 2); |
136 |
|
137 |
$this->Task->create(); |
138 |
|
139 |
$Aro = ClassRegistry::init('Aro'); |
140 |
$Aro->cacheQueries = false; |
141 |
$result = $Aro->read(); |
142 |
$this->assertEquals('User', $result['Aro']['model']); |
143 |
$this->assertEquals(1, $result['Aro']['foreign_key']); |
144 |
$this->assertEquals(null, $result['Aro']['parent_id']); |
145 |
$id = $result['Aro']['id']; |
146 |
|
147 |
$this->Task->args = array('aro', 'User.1', 'User.3'); |
148 |
$this->Task->create(); |
149 |
|
150 |
$Aro = ClassRegistry::init('Aro'); |
151 |
$result = $Aro->read(); |
152 |
$this->assertEquals('User', $result['Aro']['model']); |
153 |
$this->assertEquals(3, $result['Aro']['foreign_key']); |
154 |
$this->assertEquals($id, $result['Aro']['parent_id']); |
155 |
|
156 |
$this->Task->args = array('aro', 'root', 'somealias'); |
157 |
$this->Task->create(); |
158 |
|
159 |
$Aro = ClassRegistry::init('Aro'); |
160 |
$result = $Aro->read(); |
161 |
$this->assertEquals('somealias', $result['Aro']['alias']); |
162 |
$this->assertEquals(null, $result['Aro']['model']); |
163 |
$this->assertEquals(null, $result['Aro']['foreign_key']); |
164 |
$this->assertEquals(null, $result['Aro']['parent_id']); |
165 |
} |
166 |
|
167 |
/**
|
168 |
* test the delete method with different node types.
|
169 |
*
|
170 |
* @return void
|
171 |
*/
|
172 |
public function testDelete() { |
173 |
$this->Task->args = array('aro', 'AuthUser.1'); |
174 |
$this->Task->expects($this->at(0))->method('out') |
175 |
->with("<success>Aro deleted.</success>", 2); |
176 |
$this->Task->delete(); |
177 |
|
178 |
$Aro = ClassRegistry::init('Aro'); |
179 |
$result = $Aro->findById(3); |
180 |
$this->assertSame(array(), $result); |
181 |
} |
182 |
|
183 |
/**
|
184 |
* test setParent method.
|
185 |
*
|
186 |
* @return void
|
187 |
*/
|
188 |
public function testSetParent() { |
189 |
$this->Task->args = array('aro', 'AuthUser.2', 'root'); |
190 |
$this->Task->setParent(); |
191 |
|
192 |
$Aro = ClassRegistry::init('Aro'); |
193 |
$result = $Aro->read(null, 4); |
194 |
$this->assertEquals(null, $result['Aro']['parent_id']); |
195 |
} |
196 |
|
197 |
/**
|
198 |
* test grant
|
199 |
*
|
200 |
* @return void
|
201 |
*/
|
202 |
public function testGrant() { |
203 |
$this->Task->args = array('AuthUser.2', 'ROOT/Controller1', 'create'); |
204 |
$this->Task->expects($this->at(0))->method('out') |
205 |
->with($this->matchesRegularExpression('/granted/'), true); |
206 |
$this->Task->grant(); |
207 |
$node = $this->Task->Acl->Aro->node(array('model' => 'AuthUser', 'foreign_key' => 2)); |
208 |
$node = $this->Task->Acl->Aro->read(null, $node[0]['Aro']['id']); |
209 |
|
210 |
$this->assertFalse(empty($node['Aco'][0])); |
211 |
$this->assertEquals(1, $node['Aco'][0]['Permission']['_create']); |
212 |
} |
213 |
|
214 |
/**
|
215 |
* test deny
|
216 |
*
|
217 |
* @return void
|
218 |
*/
|
219 |
public function testDeny() { |
220 |
$this->Task->args = array('AuthUser.2', 'ROOT/Controller1', 'create'); |
221 |
$this->Task->expects($this->at(0))->method('out') |
222 |
->with($this->stringContains('Permission denied'), true); |
223 |
|
224 |
$this->Task->deny(); |
225 |
|
226 |
$node = $this->Task->Acl->Aro->node(array('model' => 'AuthUser', 'foreign_key' => 2)); |
227 |
$node = $this->Task->Acl->Aro->read(null, $node[0]['Aro']['id']); |
228 |
$this->assertFalse(empty($node['Aco'][0])); |
229 |
$this->assertEquals(-1, $node['Aco'][0]['Permission']['_create']); |
230 |
} |
231 |
|
232 |
/**
|
233 |
* test checking allowed and denied perms
|
234 |
*
|
235 |
* @return void
|
236 |
*/
|
237 |
public function testCheck() { |
238 |
$this->Task->expects($this->at(0))->method('out') |
239 |
->with($this->matchesRegularExpression('/not allowed/'), true); |
240 |
$this->Task->expects($this->at(1))->method('out') |
241 |
->with($this->matchesRegularExpression('/granted/'), true); |
242 |
$this->Task->expects($this->at(2))->method('out') |
243 |
->with($this->matchesRegularExpression('/is.*allowed/'), true); |
244 |
$this->Task->expects($this->at(3))->method('out') |
245 |
->with($this->matchesRegularExpression('/not.*allowed/'), true); |
246 |
|
247 |
$this->Task->args = array('AuthUser.2', 'ROOT/Controller1', '*'); |
248 |
$this->Task->check(); |
249 |
|
250 |
$this->Task->args = array('AuthUser.2', 'ROOT/Controller1', 'create'); |
251 |
$this->Task->grant(); |
252 |
|
253 |
$this->Task->args = array('AuthUser.2', 'ROOT/Controller1', 'create'); |
254 |
$this->Task->check(); |
255 |
|
256 |
$this->Task->args = array('AuthUser.2', 'ROOT/Controller1', '*'); |
257 |
$this->Task->check(); |
258 |
} |
259 |
|
260 |
/**
|
261 |
* test inherit and that it 0's the permission fields.
|
262 |
*
|
263 |
* @return void
|
264 |
*/
|
265 |
public function testInherit() { |
266 |
$this->Task->expects($this->at(0))->method('out') |
267 |
->with($this->matchesRegularExpression('/Permission .*granted/'), true); |
268 |
$this->Task->expects($this->at(1))->method('out') |
269 |
->with($this->matchesRegularExpression('/Permission .*inherited/'), true); |
270 |
|
271 |
$this->Task->args = array('AuthUser.2', 'ROOT/Controller1', 'create'); |
272 |
$this->Task->grant(); |
273 |
|
274 |
$this->Task->args = array('AuthUser.2', 'ROOT/Controller1', 'all'); |
275 |
$this->Task->inherit(); |
276 |
|
277 |
$node = $this->Task->Acl->Aro->node(array('model' => 'AuthUser', 'foreign_key' => 2)); |
278 |
$node = $this->Task->Acl->Aro->read(null, $node[0]['Aro']['id']); |
279 |
$this->assertFalse(empty($node['Aco'][0])); |
280 |
$this->assertEquals(0, $node['Aco'][0]['Permission']['_create']); |
281 |
} |
282 |
|
283 |
/**
|
284 |
* test getting the path for an aro/aco
|
285 |
*
|
286 |
* @return void
|
287 |
*/
|
288 |
public function testGetPath() { |
289 |
$this->Task->args = array('aro', 'AuthUser.2'); |
290 |
$node = $this->Task->Acl->Aro->node(array('model' => 'AuthUser', 'foreign_key' => 2)); |
291 |
$first = $node[0]['Aro']['id']; |
292 |
$second = $node[1]['Aro']['id']; |
293 |
$last = $node[2]['Aro']['id']; |
294 |
$this->Task->expects($this->at(2))->method('out')->with('[' . $last . '] ROOT'); |
295 |
$this->Task->expects($this->at(3))->method('out')->with(' [' . $second . '] admins'); |
296 |
$this->Task->expects($this->at(4))->method('out')->with(' [' . $first . '] Elrond'); |
297 |
$this->Task->getPath(); |
298 |
} |
299 |
|
300 |
/**
|
301 |
* test that initdb makes the correct call.
|
302 |
*
|
303 |
* @return void
|
304 |
*/
|
305 |
public function testInitDb() { |
306 |
$this->Task->expects($this->once())->method('dispatchShell') |
307 |
->with('schema create DbAcl');
|
308 |
|
309 |
$this->Task->initdb(); |
310 |
} |
311 |
} |