Mercurial > hg > Members > shoshi > webvirt
diff cake/tests/cases/libs/model/behaviors/acl.test.php @ 0:261e66bd5a0c
hg init
author | Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 24 Jul 2011 21:08:31 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cake/tests/cases/libs/model/behaviors/acl.test.php Sun Jul 24 21:08:31 2011 +0900 @@ -0,0 +1,462 @@ +<?php +/** + * AclBehaviorTest file + * + * Test the Acl Behavior + * + * PHP versions 4 and 5 + * + * CakePHP : Rapid Development Framework (http://cakephp.org) + * Copyright 2006-2010, Cake Software Foundation, Inc. + * + * Licensed under The MIT License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2006-2010, Cake Software Foundation, Inc. + * @link http://cakephp.org CakePHP Project + * @package cake + * @subpackage cake.cake.libs.tests.model.behaviors.acl + * @since CakePHP v 1.2.0.4487 + * @license MIT License (http://www.opensource.org/licenses/mit-license.php) + */ +App::import('Behavior', 'Acl'); +App::import('Core', 'db_acl'); + +/** +* Test Person class - self joined model +* +* @package cake +* @subpackage cake.tests.cases.libs.model.behaviors +*/ +class AclPerson extends CakeTestModel { + +/** + * name property + * + * @var string + * @access public + */ + var $name = 'AclPerson'; + +/** + * useTable property + * + * @var string + * @access public + */ + var $useTable = 'people'; + +/** + * actsAs property + * + * @var array + * @access public + */ + var $actsAs = array('Acl' => 'requester'); + +/** + * belongsTo property + * + * @var array + * @access public + */ + var $belongsTo = array( + 'Mother' => array( + 'className' => 'AclPerson', + 'foreignKey' => 'mother_id', + ) + ); + +/** + * hasMany property + * + * @var array + * @access public + */ + var $hasMany = array( + 'Child' => array( + 'className' => 'AclPerson', + 'foreignKey' => 'mother_id' + ) + ); + +/** + * parentNode method + * + * @return void + * @access 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; + } else { + return array('AclPerson' => array('id' => $motherId)); + } + } +} + +/** +* AclUser class +* +* @package cake +* @subpackage cake.tests.cases.libs.model.behaviors +*/ +class AclUser extends CakeTestModel { + +/** + * name property + * + * @var string + * @access public + */ + var $name = 'User'; + +/** + * useTable property + * + * @var string + * @access public + */ + var $useTable = 'users'; + +/** + * actsAs property + * + * @var array + * @access public + */ + var $actsAs = array('Acl'); + +/** + * parentNode + * + * @access public + */ + function parentNode() { + return null; + } +} + +/** +* AclPost class +* +* @package cake +* @subpackage cake.tests.cases.libs.model.behaviors +*/ +class AclPost extends CakeTestModel { + +/** + * name property + * + * @var string + * @access public + */ + var $name = 'Post'; + +/** + * useTable property + * + * @var string + * @access public + */ + var $useTable = 'posts'; + +/** + * actsAs property + * + * @var array + * @access public + */ + var $actsAs = array('Acl' => 'Controlled'); + +/** + * parentNode + * + * @access public + */ + function parentNode() { + return null; + } +} + +/** +* AclBehaviorTest class +* +* @package cake +* @subpackage cake.tests.cases.libs.controller.components +*/ +class AclBehaviorTestCase extends CakeTestCase { + +/** + * Aco property + * + * @var Aco + * @access public + */ + var $Aco; + +/** + * Aro property + * + * @var Aro + * @access public + */ + var $Aro; + +/** + * fixtures property + * + * @var array + * @access public + */ + var $fixtures = array('core.person', 'core.user', 'core.post', 'core.aco', 'core.aro', 'core.aros_aco'); + +/** + * Set up the test + * + * @return void + * @access public + */ + function startTest() { + Configure::write('Acl.database', 'test_suite'); + + $this->Aco =& new Aco(); + $this->Aro =& new Aro(); + } + +/** + * tearDown method + * + * @return void + * @access public + */ + function tearDown() { + ClassRegistry::flush(); + unset($this->Aro, $this->Aco); + } + +/** + * Test Setup of AclBehavior + * + * @return void + * @access public + */ + function testSetup() { + $User =& new AclUser(); + $this->assertTrue(isset($User->Behaviors->Acl->settings['User'])); + $this->assertEqual($User->Behaviors->Acl->settings['User']['type'], 'requester'); + $this->assertTrue(is_object($User->Aro)); + + $Post =& new AclPost(); + $this->assertTrue(isset($Post->Behaviors->Acl->settings['Post'])); + $this->assertEqual($Post->Behaviors->Acl->settings['Post']['type'], 'controlled'); + $this->assertTrue(is_object($Post->Aco)); + } + +/** + * test After Save + * + * @return void + * @access 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->assertEqual($result['Aco']['model'], 'Post'); + $this->assertEqual($result['Aco']['foreign_key'], $Post->id); + + $aroData = array( + 'Aro' => array( + 'model' => 'AclPerson', + 'foreign_key' => 2, + 'parent_id' => null + ) + ); + $this->Aro->save($aroData); + + $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->assertEqual($result['Aro']['parent_id'], 5); + + $node = $Person->node(array('model' => 'AclPerson', 'foreign_key' => 8)); + $this->assertEqual(count($node), 2); + $this->assertEqual($node[0]['Aro']['parent_id'], 5); + $this->assertEqual($node[1]['Aro']['parent_id'], null); + + $aroData = array( + 'Aro' => array( + 'model' => 'AclPerson', + 'foreign_key' => 1, + 'parent_id' => null + ) + ); + $this->Aro->create(); + $this->Aro->save($aroData); + + $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->assertEqual($result['Aro']['parent_id'], 7); + + $node = $Person->node(array('model' => 'AclPerson', 'foreign_key' => 8)); + $this->assertEqual(sizeof($node), 2); + $this->assertEqual($node[0]['Aro']['parent_id'], 7); + $this->assertEqual($node[1]['Aro']['parent_id'], null); + } + +/** + * test that an afterSave on an update does not cause parent_id to become null. + * + * @return void + */ + function testAfterSaveUpdateParentIdNotNull() { + $aroData = array( + 'Aro' => array( + 'model' => 'AclPerson', + 'foreign_key' => 2, + 'parent_id' => null + ) + ); + $this->Aro->save($aroData); + + $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->assertEqual($result['Aro']['parent_id'], 5); + + $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->assertEqual($result['Aro']['parent_id'], 5); + } + +/** + * Test After Delete + * + * @return void + * @access public + */ + function testAfterDelete() { + $aroData = array( + 'Aro' => array( + 'model' => 'AclPerson', + 'foreign_key' => 2, + 'parent_id' => null + ) + ); + $this->Aro->save($aroData); + $Person =& new AclPerson(); + $data = array( + 'AclPerson' => array( + 'name' => 'Trent', + 'mother_id' => 2, + 'father_id' => 3, + ), + ); + $Person->save($data); + $id = $Person->id; + $node = $Person->node(); + $this->assertEqual(count($node), 2); + $this->assertEqual($node[0]['Aro']['parent_id'], 5); + $this->assertEqual($node[1]['Aro']['parent_id'], null); + + $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 + * @access 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(); + $this->assertTrue(is_array($result)); + $this->assertEqual(count($result), 1); + } +}