mirror of
				https://github.com/brmlab/brmsklad.git
				synced 2025-10-31 00:03:58 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			484 lines
		
	
	
	
		
			9.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			484 lines
		
	
	
	
		
			9.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * AclBehaviorTest file
 | |
|  *
 | |
|  * Test the Acl Behavior
 | |
|  *
 | |
|  * CakePHP : Rapid Development Framework (http://cakephp.org)
 | |
|  * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 | |
|  *
 | |
|  * Licensed under The MIT License
 | |
|  * For full copyright and license information, please see the LICENSE.txt
 | |
|  * Redistributions of files must retain the above copyright notice.
 | |
|  *
 | |
|  * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 | |
|  * @link          http://cakephp.org CakePHP Project
 | |
|  * @package       Cake.Test.Case.Model.Behavior
 | |
|  * @since         CakePHP v 1.2.0.4487
 | |
|  * @license       http://www.opensource.org/licenses/mit-license.php MIT License
 | |
|  */
 | |
| 
 | |
| App::uses('AclBehavior', 'Model/Behavior');
 | |
| App::uses('Aco', 'Model');
 | |
| App::uses('Aro', 'Model');
 | |
| App::uses('AclNode', 'Model');
 | |
| App::uses('DbAcl', 'Model');
 | |
| 
 | |
| /**
 | |
|  * Test Person class - self joined model
 | |
|  *
 | |
|  * @package       Cake.Test.Case.Model.Behavior
 | |
|  */
 | |
| class AclPerson extends CakeTestModel {
 | |
| 
 | |
| /**
 | |
|  * useTable property
 | |
|  *
 | |
|  * @var string
 | |
|  */
 | |
| 	public $useTable = 'people';
 | |
| 
 | |
| /**
 | |
|  * actsAs property
 | |
|  *
 | |
|  * @var array
 | |
|  */
 | |
| 	public $actsAs = array('Acl' => 'both');
 | |
| 
 | |
| /**
 | |
|  * belongsTo property
 | |
|  *
 | |
|  * @var array
 | |
|  */
 | |
| 	public $belongsTo = array(
 | |
| 		'Mother' => array(
 | |
| 			'className' => 'AclPerson',
 | |
| 			'foreignKey' => 'mother_id',
 | |
| 		)
 | |
| 	);
 | |
| 
 | |
| /**
 | |
|  * hasMany property
 | |
|  *
 | |
|  * @var array
 | |
|  */
 | |
| 	public $hasMany = array(
 | |
| 		'Child' => array(
 | |
| 			'className' => 'AclPerson',
 | |
| 			'foreignKey' => 'mother_id'
 | |
| 		)
 | |
| 	);
 | |
| 
 | |
| /**
 | |
|  * parentNode method
 | |
|  *
 | |
|  * @return void
 | |
|  */
 | |
| 	public function parentNode() {
 | |
| 		if (!$this->id && empty($this->data)) {
 | |
| 			return null;
 | |
| 		}
 | |
| 		if (isset($this->data['AclPerson']['mother_id'])) {
 | |
| 			$motherId = $this->data['AclPerson']['mother_id'];
 | |
| 		} else {
 | |
| 			$motherId = $this->field('mother_id');
 | |
| 		}
 | |
| 		if (!$motherId) {
 | |
| 			return null;
 | |
| 		}
 | |
| 		return array('AclPerson' => array('id' => $motherId));
 | |
| 	}
 | |
| 
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * AclUser class
 | |
|  *
 | |
|  * @package       Cake.Test.Case.Model.Behavior
 | |
|  */
 | |
| class AclUser extends CakeTestModel {
 | |
| 
 | |
| /**
 | |
|  * name property
 | |
|  *
 | |
|  * @var string
 | |
|  */
 | |
| 	public $name = 'User';
 | |
| 
 | |
| /**
 | |
|  * useTable property
 | |
|  *
 | |
|  * @var string
 | |
|  */
 | |
| 	public $useTable = 'users';
 | |
| 
 | |
| /**
 | |
|  * actsAs property
 | |
|  *
 | |
|  * @var array
 | |
|  */
 | |
| 	public $actsAs = array('Acl' => array('type' => 'requester'));
 | |
| 
 | |
| /**
 | |
|  * parentNode
 | |
|  *
 | |
|  * @return null
 | |
|  */
 | |
| 	public function parentNode() {
 | |
| 		return null;
 | |
| 	}
 | |
| 
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * AclPost class
 | |
|  *
 | |
|  * @package       Cake.Test.Case.Model.Behavior
 | |
|  */
 | |
| class AclPost extends CakeTestModel {
 | |
| 
 | |
| /**
 | |
|  * name property
 | |
|  *
 | |
|  * @var string
 | |
|  */
 | |
| 	public $name = 'Post';
 | |
| 
 | |
| /**
 | |
|  * useTable property
 | |
|  *
 | |
|  * @var string
 | |
|  */
 | |
| 	public $useTable = 'posts';
 | |
| 
 | |
| /**
 | |
|  * actsAs property
 | |
|  *
 | |
|  * @var array
 | |
|  */
 | |
| 	public $actsAs = array('Acl' => array('type' => 'Controlled'));
 | |
| 
 | |
| /**
 | |
|  * parentNode
 | |
|  *
 | |
|  * @return null
 | |
|  */
 | |
| 	public function parentNode() {
 | |
| 		return null;
 | |
| 	}
 | |
| 
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * AclBehaviorTest class
 | |
|  *
 | |
|  * @package       Cake.Test.Case.Model.Behavior
 | |
|  */
 | |
| class AclBehaviorTest extends CakeTestCase {
 | |
| 
 | |
| /**
 | |
|  * Aco property
 | |
|  *
 | |
|  * @var Aco
 | |
|  */
 | |
| 	public $Aco;
 | |
| 
 | |
| /**
 | |
|  * Aro property
 | |
|  *
 | |
|  * @var Aro
 | |
|  */
 | |
| 	public $Aro;
 | |
| 
 | |
| /**
 | |
|  * fixtures property
 | |
|  *
 | |
|  * @var array
 | |
|  */
 | |
| 	public $fixtures = array('core.person', 'core.user', 'core.post', 'core.aco', 'core.aro', 'core.aros_aco');
 | |
| 
 | |
| /**
 | |
|  * Set up the test
 | |
|  *
 | |
|  * @return void
 | |
|  */
 | |
| 	public function setUp() {
 | |
| 		parent::setUp();
 | |
| 		Configure::write('Acl.database', 'test');
 | |
| 
 | |
| 		$this->Aco = new Aco();
 | |
| 		$this->Aro = new Aro();
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * tearDown method
 | |
|  *
 | |
|  * @return void
 | |
|  */
 | |
| 	public function tearDown() {
 | |
| 		parent::tearDown();
 | |
| 		unset($this->Aro, $this->Aco);
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Test Setup of AclBehavior
 | |
|  *
 | |
|  * @return void
 | |
|  */
 | |
| 	public function testSetup() {
 | |
| 		parent::setUp();
 | |
| 		$User = new AclUser();
 | |
| 		$this->assertTrue(isset($User->Behaviors->Acl->settings['User']));
 | |
| 		$this->assertEquals('requester', $User->Behaviors->Acl->settings['User']['type']);
 | |
| 		$this->assertTrue(is_object($User->Aro));
 | |
| 
 | |
| 		$Post = new AclPost();
 | |
| 		$this->assertTrue(isset($Post->Behaviors->Acl->settings['Post']));
 | |
| 		$this->assertEquals('controlled', $Post->Behaviors->Acl->settings['Post']['type']);
 | |
| 		$this->assertTrue(is_object($Post->Aco));
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Test Setup of AclBehavior as both requester and controlled
 | |
|  *
 | |
|  * @return void
 | |
|  */
 | |
| 	public function testSetupMulti() {
 | |
| 		$User = new AclPerson();
 | |
| 		$this->assertTrue(isset($User->Behaviors->Acl->settings['AclPerson']));
 | |
| 		$this->assertEquals('both', $User->Behaviors->Acl->settings['AclPerson']['type']);
 | |
| 		$this->assertTrue(is_object($User->Aro));
 | |
| 		$this->assertTrue(is_object($User->Aco));
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * test After Save
 | |
|  *
 | |
|  * @return void
 | |
|  */
 | |
| 	public function testAfterSave() {
 | |
| 		$Post = new AclPost();
 | |
| 		$data = array(
 | |
| 			'Post' => array(
 | |
| 				'author_id' => 1,
 | |
| 				'title' => 'Acl Post',
 | |
| 				'body' => 'post body',
 | |
| 				'published' => 1
 | |
| 			),
 | |
| 		);
 | |
| 		$Post->save($data);
 | |
| 		$result = $this->Aco->find('first', array(
 | |
| 			'conditions' => array('Aco.model' => 'Post', 'Aco.foreign_key' => $Post->id)
 | |
| 		));
 | |
| 		$this->assertTrue(is_array($result));
 | |
| 		$this->assertEquals('Post', $result['Aco']['model']);
 | |
| 		$this->assertEquals($Post->id, $result['Aco']['foreign_key']);
 | |
| 
 | |
| 		$aroData = array(
 | |
| 			'Aro' => array(
 | |
| 				'model' => 'AclPerson',
 | |
| 				'foreign_key' => 2,
 | |
| 				'parent_id' => null
 | |
| 			)
 | |
| 		);
 | |
| 		$this->Aro->save($aroData);
 | |
| 
 | |
| 		$acoData = array(
 | |
| 			'Aco' => array(
 | |
| 				'model' => 'AclPerson',
 | |
| 				'foreign_key' => 2,
 | |
| 				'parent_id' => null
 | |
| 			)
 | |
| 		);
 | |
| 		$this->Aco->save($acoData);
 | |
| 
 | |
| 		$Person = new AclPerson();
 | |
| 		$data = array(
 | |
| 			'AclPerson' => array(
 | |
| 				'name' => 'Trent',
 | |
| 				'mother_id' => 2,
 | |
| 				'father_id' => 3,
 | |
| 			),
 | |
| 		);
 | |
| 		$Person->save($data);
 | |
| 		$result = $this->Aro->find('first', array(
 | |
| 			'conditions' => array('Aro.model' => 'AclPerson', 'Aro.foreign_key' => $Person->id)
 | |
| 		));
 | |
| 		$this->assertTrue(is_array($result));
 | |
| 		$this->assertEquals(5, $result['Aro']['parent_id']);
 | |
| 
 | |
| 		$node = $Person->node(array('model' => 'AclPerson', 'foreign_key' => 8), 'Aro');
 | |
| 		$this->assertEquals(2, count($node));
 | |
| 		$this->assertEquals(5, $node[0]['Aro']['parent_id']);
 | |
| 		$this->assertEquals(null, $node[1]['Aro']['parent_id']);
 | |
| 
 | |
| 		$aroData = array(
 | |
| 			'Aro' => array(
 | |
| 			'model' => 'AclPerson',
 | |
| 				'foreign_key' => 1,
 | |
| 				'parent_id' => null
 | |
| 			)
 | |
| 		);
 | |
| 		$this->Aro->create();
 | |
| 		$this->Aro->save($aroData);
 | |
| 		$acoData = array(
 | |
| 			'Aco' => array(
 | |
| 				'model' => 'AclPerson',
 | |
| 				'foreign_key' => 1,
 | |
| 				'parent_id' => null
 | |
| 		));
 | |
| 		$this->Aco->create();
 | |
| 		$this->Aco->save($acoData);
 | |
| 		$Person->read(null, 8);
 | |
| 		$Person->set('mother_id', 1);
 | |
| 		$Person->save();
 | |
| 		$result = $this->Aro->find('first', array(
 | |
| 			'conditions' => array('Aro.model' => 'AclPerson', 'Aro.foreign_key' => $Person->id)
 | |
| 		));
 | |
| 		$this->assertTrue(is_array($result));
 | |
| 		$this->assertEquals(7, $result['Aro']['parent_id']);
 | |
| 
 | |
| 		$node = $Person->node(array('model' => 'AclPerson', 'foreign_key' => 8), 'Aro');
 | |
| 		$this->assertEquals(2, count($node));
 | |
| 		$this->assertEquals(7, $node[0]['Aro']['parent_id']);
 | |
| 		$this->assertEquals(null, $node[1]['Aro']['parent_id']);
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * test that an afterSave on an update does not cause parent_id to become null.
 | |
|  *
 | |
|  * @return void
 | |
|  */
 | |
| 	public function testAfterSaveUpdateParentIdNotNull() {
 | |
| 		$aroData = array(
 | |
| 			'Aro' => array(
 | |
| 				'model' => 'AclPerson',
 | |
| 				'foreign_key' => 2,
 | |
| 				'parent_id' => null
 | |
| 			)
 | |
| 		);
 | |
| 		$this->Aro->save($aroData);
 | |
| 
 | |
| 		$acoData = array(
 | |
| 			'Aco' => array(
 | |
| 				'model' => 'AclPerson',
 | |
| 				'foreign_key' => 2,
 | |
| 				'parent_id' => null
 | |
| 			)
 | |
| 		);
 | |
| 		$this->Aco->save($acoData);
 | |
| 
 | |
| 		$Person = new AclPerson();
 | |
| 		$data = array(
 | |
| 			'AclPerson' => array(
 | |
| 				'name' => 'Trent',
 | |
| 				'mother_id' => 2,
 | |
| 				'father_id' => 3,
 | |
| 			),
 | |
| 		);
 | |
| 		$Person->save($data);
 | |
| 		$result = $this->Aro->find('first', array(
 | |
| 			'conditions' => array('Aro.model' => 'AclPerson', 'Aro.foreign_key' => $Person->id)
 | |
| 		));
 | |
| 		$this->assertTrue(is_array($result));
 | |
| 		$this->assertEquals(5, $result['Aro']['parent_id']);
 | |
| 
 | |
| 		$Person->save(array('id' => $Person->id, 'name' => 'Bruce'));
 | |
| 		$result = $this->Aro->find('first', array(
 | |
| 			'conditions' => array('Aro.model' => 'AclPerson', 'Aro.foreign_key' => $Person->id)
 | |
| 		));
 | |
| 		$this->assertEquals(5, $result['Aro']['parent_id']);
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Test After Delete
 | |
|  *
 | |
|  * @return void
 | |
|  */
 | |
| 	public function testAfterDelete() {
 | |
| 		$aroData = array(
 | |
| 			'Aro' => array(
 | |
| 				'model' => 'AclPerson',
 | |
| 				'foreign_key' => 2,
 | |
| 				'parent_id' => null
 | |
| 			)
 | |
| 		);
 | |
| 		$this->Aro->save($aroData);
 | |
| 
 | |
| 		$acoData = array(
 | |
| 			'Aco' => array(
 | |
| 				'model' => 'AclPerson',
 | |
| 				'foreign_key' => 2,
 | |
| 				'parent_id' => null
 | |
| 			)
 | |
| 		);
 | |
| 		$this->Aco->save($acoData);
 | |
| 		$Person = new AclPerson();
 | |
| 
 | |
| 		$data = array(
 | |
| 			'AclPerson' => array(
 | |
| 				'name' => 'Trent',
 | |
| 				'mother_id' => 2,
 | |
| 				'father_id' => 3,
 | |
| 			),
 | |
| 		);
 | |
| 		$Person->save($data);
 | |
| 		$id = $Person->id;
 | |
| 		$node = $Person->node(null, 'Aro');
 | |
| 		$this->assertEquals(2, count($node));
 | |
| 		$this->assertEquals(5, $node[0]['Aro']['parent_id']);
 | |
| 		$this->assertEquals(null, $node[1]['Aro']['parent_id']);
 | |
| 
 | |
| 		$Person->delete($id);
 | |
| 		$result = $this->Aro->find('first', array(
 | |
| 			'conditions' => array('Aro.model' => 'AclPerson', 'Aro.foreign_key' => $id)
 | |
| 		));
 | |
| 		$this->assertTrue(empty($result));
 | |
| 		$result = $this->Aro->find('first', array(
 | |
| 			'conditions' => array('Aro.model' => 'AclPerson', 'Aro.foreign_key' => 2)
 | |
| 		));
 | |
| 		$this->assertFalse(empty($result));
 | |
| 
 | |
| 		$data = array(
 | |
| 			'AclPerson' => array(
 | |
| 				'name' => 'Trent',
 | |
| 				'mother_id' => 2,
 | |
| 				'father_id' => 3,
 | |
| 			),
 | |
| 		);
 | |
| 		$Person->save($data);
 | |
| 		$id = $Person->id;
 | |
| 		$Person->delete(2);
 | |
| 		$result = $this->Aro->find('first', array(
 | |
| 			'conditions' => array('Aro.model' => 'AclPerson', 'Aro.foreign_key' => $id)
 | |
| 		));
 | |
| 		$this->assertTrue(empty($result));
 | |
| 
 | |
| 		$result = $this->Aro->find('first', array(
 | |
| 			'conditions' => array('Aro.model' => 'AclPerson', 'Aro.foreign_key' => 2)
 | |
| 		));
 | |
| 		$this->assertTrue(empty($result));
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Test Node()
 | |
|  *
 | |
|  * @return void
 | |
|  */
 | |
| 	public function testNode() {
 | |
| 		$Person = new AclPerson();
 | |
| 		$aroData = array(
 | |
| 			'Aro' => array(
 | |
| 				'model' => 'AclPerson',
 | |
| 				'foreign_key' => 2,
 | |
| 				'parent_id' => null
 | |
| 			)
 | |
| 		);
 | |
| 		$this->Aro->save($aroData);
 | |
| 
 | |
| 		$Person->id = 2;
 | |
| 		$result = $Person->node(null, 'Aro');
 | |
| 		$this->assertTrue(is_array($result));
 | |
| 		$this->assertEquals(1, count($result));
 | |
| 	}
 | |
| }
 | 
