mirror of
				https://github.com/brmlab/brmbiolab_sklad.git
				synced 2025-10-30 23:14:01 +01:00 
			
		
		
		
	Initial commit
This commit is contained in:
		
						commit
						3b93da31de
					
				
					 1004 changed files with 265840 additions and 0 deletions
				
			
		
							
								
								
									
										484
									
								
								lib/Cake/Test/Case/Model/Behavior/AclBehaviorTest.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										484
									
								
								lib/Cake/Test/Case/Model/Behavior/AclBehaviorTest.php
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,484 @@ | |||
| <?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)); | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										3767
									
								
								lib/Cake/Test/Case/Model/Behavior/ContainableBehaviorTest.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3767
									
								
								lib/Cake/Test/Case/Model/Behavior/ContainableBehaviorTest.php
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										1375
									
								
								lib/Cake/Test/Case/Model/Behavior/TranslateBehaviorTest.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1375
									
								
								lib/Cake/Test/Case/Model/Behavior/TranslateBehaviorTest.php
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										75
									
								
								lib/Cake/Test/Case/Model/Behavior/TreeBehaviorAfterTest.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								lib/Cake/Test/Case/Model/Behavior/TreeBehaviorAfterTest.php
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,75 @@ | |||
| <?php | ||||
| /** | ||||
|  * TreeBehaviorAfterTest file | ||||
|  * | ||||
|  * CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html> | ||||
|  * 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://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests | ||||
|  * @package       Cake.Test.Case.Model.Behavior | ||||
|  * @since         CakePHP(tm) v 1.2.0.5330 | ||||
|  * @license       http://www.opensource.org/licenses/mit-license.php MIT License | ||||
|  */ | ||||
| 
 | ||||
| App::uses('Model', 'Model'); | ||||
| App::uses('AppModel', 'Model'); | ||||
| 
 | ||||
| require_once dirname(dirname(__FILE__)) . DS . 'models.php'; | ||||
| 
 | ||||
| /** | ||||
|  * TreeBehaviorAfterTest class | ||||
|  * | ||||
|  * @package       Cake.Test.Case.Model.Behavior | ||||
|  */ | ||||
| class TreeBehaviorAfterTest extends CakeTestCase { | ||||
| 
 | ||||
| /** | ||||
|  * Whether backup global state for each test method or not | ||||
|  * | ||||
|  * @var bool | ||||
|  */ | ||||
| 	public $backupGlobals = false; | ||||
| 
 | ||||
| /** | ||||
|  * settings property | ||||
|  * | ||||
|  * @var array | ||||
|  */ | ||||
| 	public $settings = array( | ||||
| 		'modelClass' => 'AfterTree', | ||||
| 		'leftField' => 'lft', | ||||
| 		'rightField' => 'rght', | ||||
| 		'parentField' => 'parent_id' | ||||
| 	); | ||||
| 
 | ||||
| /** | ||||
|  * fixtures property | ||||
|  * | ||||
|  * @var array | ||||
|  */ | ||||
| 	public $fixtures = array('core.after_tree'); | ||||
| 
 | ||||
| /** | ||||
|  * Tests the afterSave callback in the model | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testAftersaveCallback() { | ||||
| 		$this->Tree = new AfterTree(); | ||||
| 		$this->Tree->order = null; | ||||
| 
 | ||||
| 		$expected = array('AfterTree' => array('name' => 'Six and One Half Changed in AfterTree::afterSave() but not in database', 'parent_id' => 6, 'lft' => 11, 'rght' => 12)); | ||||
| 		$result = $this->Tree->save(array('AfterTree' => array('name' => 'Six and One Half', 'parent_id' => 6))); | ||||
| 		$expected['AfterTree']['id'] = $this->Tree->id; | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 
 | ||||
| 		$expected = array('AfterTree' => array('name' => 'Six and One Half', 'parent_id' => 6, 'lft' => 11, 'rght' => 12, 'id' => 8)); | ||||
| 		$result = $this->Tree->find('all'); | ||||
| 		$this->assertEquals($expected, $result[7]); | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										1561
									
								
								lib/Cake/Test/Case/Model/Behavior/TreeBehaviorNumberTest.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1561
									
								
								lib/Cake/Test/Case/Model/Behavior/TreeBehaviorNumberTest.php
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										591
									
								
								lib/Cake/Test/Case/Model/Behavior/TreeBehaviorScopedTest.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										591
									
								
								lib/Cake/Test/Case/Model/Behavior/TreeBehaviorScopedTest.php
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,591 @@ | |||
| <?php | ||||
| /** | ||||
|  * TreeBehaviorScopedTest file | ||||
|  * | ||||
|  * A tree test using scope | ||||
|  * | ||||
|  * CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html> | ||||
|  * 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://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests | ||||
|  * @package       Cake.Test.Case.Model.Behavior | ||||
|  * @since         CakePHP(tm) v 1.2.0.5330 | ||||
|  * @license       http://www.opensource.org/licenses/mit-license.php MIT License | ||||
|  */ | ||||
| 
 | ||||
| App::uses('Model', 'Model'); | ||||
| App::uses('AppModel', 'Model'); | ||||
| 
 | ||||
| require_once dirname(dirname(__FILE__)) . DS . 'models.php'; | ||||
| 
 | ||||
| /** | ||||
|  * TreeBehaviorScopedTest class | ||||
|  * | ||||
|  * @package       Cake.Test.Case.Model.Behavior | ||||
|  */ | ||||
| class TreeBehaviorScopedTest extends CakeTestCase { | ||||
| 
 | ||||
| /** | ||||
|  * Whether backup global state for each test method or not | ||||
|  * | ||||
|  * @var bool | ||||
|  */ | ||||
| 	public $backupGlobals = false; | ||||
| 
 | ||||
| /** | ||||
|  * settings property | ||||
|  * | ||||
|  * @var array | ||||
|  */ | ||||
| 	public $settings = array( | ||||
| 		'modelClass' => 'FlagTree', | ||||
| 		'leftField' => 'lft', | ||||
| 		'rightField' => 'rght', | ||||
| 		'parentField' => 'parent_id' | ||||
| 	); | ||||
| 
 | ||||
| /** | ||||
|  * fixtures property | ||||
|  * | ||||
|  * @var array | ||||
|  */ | ||||
| 	public $fixtures = array('core.flag_tree', 'core.ad', 'core.campaign', 'core.translate', 'core.number_tree_two'); | ||||
| 
 | ||||
| /** | ||||
|  * testStringScope method | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testStringScope() { | ||||
| 		$this->Tree = new FlagTree(); | ||||
| 		$this->Tree->order = null; | ||||
| 		$this->Tree->initialize(2, 3); | ||||
| 
 | ||||
| 		$this->Tree->id = 1; | ||||
| 		$this->Tree->saveField('flag', 1); | ||||
| 		$this->Tree->id = 2; | ||||
| 		$this->Tree->saveField('flag', 1); | ||||
| 
 | ||||
| 		$result = $this->Tree->children(); | ||||
| 		$expected = array( | ||||
| 			array('FlagTree' => array('id' => '3', 'name' => '1.1.1', 'parent_id' => '2', 'lft' => '3', 'rght' => '4', 'flag' => '0')), | ||||
| 			array('FlagTree' => array('id' => '4', 'name' => '1.1.2', 'parent_id' => '2', 'lft' => '5', 'rght' => '6', 'flag' => '0')), | ||||
| 			array('FlagTree' => array('id' => '5', 'name' => '1.1.3', 'parent_id' => '2', 'lft' => '7', 'rght' => '8', 'flag' => '0')) | ||||
| 		); | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 
 | ||||
| 		$this->Tree->Behaviors->load('Tree', array('scope' => 'FlagTree.flag = 1')); | ||||
| 		$this->assertEquals(array(), $this->Tree->children()); | ||||
| 
 | ||||
| 		$this->Tree->id = 1; | ||||
| 		$this->Tree->Behaviors->load('Tree', array('scope' => 'FlagTree.flag = 1')); | ||||
| 
 | ||||
| 		$result = $this->Tree->children(); | ||||
| 		$expected = array(array('FlagTree' => array('id' => '2', 'name' => '1.1', 'parent_id' => '1', 'lft' => '2', 'rght' => '9', 'flag' => '1'))); | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 
 | ||||
| 		$this->assertTrue($this->Tree->delete()); | ||||
| 		$this->assertEquals(11, $this->Tree->find('count')); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * testArrayScope method | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testArrayScope() { | ||||
| 		$this->Tree = new FlagTree(); | ||||
| 		$this->Tree->order = null; | ||||
| 		$this->Tree->initialize(2, 3); | ||||
| 
 | ||||
| 		$this->Tree->id = 1; | ||||
| 		$this->Tree->saveField('flag', 1); | ||||
| 		$this->Tree->id = 2; | ||||
| 		$this->Tree->saveField('flag', 1); | ||||
| 
 | ||||
| 		$result = $this->Tree->children(); | ||||
| 		$expected = array( | ||||
| 			array('FlagTree' => array('id' => '3', 'name' => '1.1.1', 'parent_id' => '2', 'lft' => '3', 'rght' => '4', 'flag' => '0')), | ||||
| 			array('FlagTree' => array('id' => '4', 'name' => '1.1.2', 'parent_id' => '2', 'lft' => '5', 'rght' => '6', 'flag' => '0')), | ||||
| 			array('FlagTree' => array('id' => '5', 'name' => '1.1.3', 'parent_id' => '2', 'lft' => '7', 'rght' => '8', 'flag' => '0')) | ||||
| 		); | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 
 | ||||
| 		$this->Tree->Behaviors->load('Tree', array('scope' => array('FlagTree.flag' => 1))); | ||||
| 		$this->assertEquals(array(), $this->Tree->children()); | ||||
| 
 | ||||
| 		$this->Tree->id = 1; | ||||
| 		$this->Tree->Behaviors->load('Tree', array('scope' => array('FlagTree.flag' => 1))); | ||||
| 
 | ||||
| 		$result = $this->Tree->children(); | ||||
| 		$expected = array(array('FlagTree' => array('id' => '2', 'name' => '1.1', 'parent_id' => '1', 'lft' => '2', 'rght' => '9', 'flag' => '1'))); | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 
 | ||||
| 		$this->assertTrue($this->Tree->delete()); | ||||
| 		$this->assertEquals(11, $this->Tree->find('count')); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * testSaveWithParentAndInvalidScope method | ||||
|  * | ||||
|  * Attempting to save an invalid data should not trigger an `Undefined offset` | ||||
|  * error | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testSaveWithParentAndInvalidScope() { | ||||
| 		$this->Tree = new FlagTree(); | ||||
| 		$this->Tree->order = null; | ||||
| 		$data = $this->Tree->create(array( | ||||
| 			'name' => 'Flag', | ||||
| 		)); | ||||
| 		$tree = $this->Tree->save($data); | ||||
| 		$this->Tree->Behaviors->load('Tree', array( | ||||
| 			'scope' => array('FlagTree.flag' => 100) | ||||
| 		)); | ||||
| 		$tree['FlagTree']['parent_id'] = 1; | ||||
| 		$result = $this->Tree->save($tree); | ||||
| 		$this->assertFalse($result); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * testMoveUpWithScope method | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testMoveUpWithScope() { | ||||
| 		$this->Ad = new Ad(); | ||||
| 		$this->Ad->order = null; | ||||
| 		$this->Ad->Behaviors->load('Tree', array('scope' => 'Campaign')); | ||||
| 		$this->Ad->moveUp(6); | ||||
| 
 | ||||
| 		$this->Ad->id = 4; | ||||
| 		$result = $this->Ad->children(); | ||||
| 		$this->assertEquals(array(6, 5), Hash::extract($result, '{n}.Ad.id')); | ||||
| 		$this->assertEquals(array(2, 2), Hash::extract($result, '{n}.Campaign.id')); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * testMoveDownWithScope method | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testMoveDownWithScope() { | ||||
| 		$this->Ad = new Ad(); | ||||
| 		$this->Ad->order = null; | ||||
| 		$this->Ad->Behaviors->load('Tree', array('scope' => 'Campaign')); | ||||
| 		$this->Ad->moveDown(6); | ||||
| 
 | ||||
| 		$this->Ad->id = 4; | ||||
| 		$result = $this->Ad->children(); | ||||
| 		$this->assertEquals(array(5, 6), Hash::extract($result, '{n}.Ad.id')); | ||||
| 		$this->assertEquals(array(2, 2), Hash::extract($result, '{n}.Campaign.id')); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * Tests the interaction (non-interference) between TreeBehavior and other behaviors with respect | ||||
|  * to callback hooks | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testTranslatingTree() { | ||||
| 		$this->Tree = new FlagTree(); | ||||
| 		$this->Tree->order = null; | ||||
| 		$this->Tree->cacheQueries = false; | ||||
| 		$this->Tree->Behaviors->load('Translate', array('title')); | ||||
| 
 | ||||
| 		//Save
 | ||||
| 		$this->Tree->create(); | ||||
| 		$this->Tree->locale = 'eng'; | ||||
| 		$data = array('FlagTree' => array( | ||||
| 			'title' => 'name #1', | ||||
| 			'name' => 'test', | ||||
| 			'locale' => 'eng', | ||||
| 			'parent_id' => null, | ||||
| 		)); | ||||
| 		$this->Tree->save($data); | ||||
| 		$result = $this->Tree->find('all'); | ||||
| 		$expected = array(array('FlagTree' => array( | ||||
| 			'id' => 1, | ||||
| 			'title' => 'name #1', | ||||
| 			'name' => 'test', | ||||
| 			'parent_id' => null, | ||||
| 			'lft' => 1, | ||||
| 			'rght' => 2, | ||||
| 			'flag' => 0, | ||||
| 			'locale' => 'eng', | ||||
| 		))); | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 
 | ||||
| 		// update existing record, same locale
 | ||||
| 		$this->Tree->create(); | ||||
| 		$data['FlagTree']['title'] = 'Named 2'; | ||||
| 		$this->Tree->id = 1; | ||||
| 		$this->Tree->save($data); | ||||
| 		$result = $this->Tree->find('all'); | ||||
| 		$expected = array(array('FlagTree' => array( | ||||
| 			'id' => 1, | ||||
| 			'title' => 'Named 2', | ||||
| 			'name' => 'test', | ||||
| 			'parent_id' => null, | ||||
| 			'lft' => 1, | ||||
| 			'rght' => 2, | ||||
| 			'flag' => 0, | ||||
| 			'locale' => 'eng', | ||||
| 		))); | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 
 | ||||
| 		// update different locale, same record
 | ||||
| 		$this->Tree->create(); | ||||
| 		$this->Tree->locale = 'deu'; | ||||
| 		$this->Tree->id = 1; | ||||
| 		$data = array('FlagTree' => array( | ||||
| 			'id' => 1, | ||||
| 			'parent_id' => null, | ||||
| 			'title' => 'namen #1', | ||||
| 			'name' => 'test', | ||||
| 			'locale' => 'deu', | ||||
| 		)); | ||||
| 		$this->Tree->save($data); | ||||
| 
 | ||||
| 		$this->Tree->locale = 'deu'; | ||||
| 		$result = $this->Tree->find('all'); | ||||
| 		$expected = array( | ||||
| 			array( | ||||
| 				'FlagTree' => array( | ||||
| 					'id' => 1, | ||||
| 					'title' => 'namen #1', | ||||
| 					'name' => 'test', | ||||
| 					'parent_id' => null, | ||||
| 					'lft' => 1, | ||||
| 					'rght' => 2, | ||||
| 					'flag' => 0, | ||||
| 					'locale' => 'deu', | ||||
| 				) | ||||
| 			) | ||||
| 		); | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 
 | ||||
| 		// Save with bindTranslation
 | ||||
| 		$this->Tree->locale = 'eng'; | ||||
| 		$data = array( | ||||
| 			'title' => array('eng' => 'New title', 'spa' => 'Nuevo leyenda'), | ||||
| 			'name' => 'test', | ||||
| 			'parent_id' => null | ||||
| 		); | ||||
| 		$this->Tree->create($data); | ||||
| 		$this->Tree->save(); | ||||
| 
 | ||||
| 		$this->Tree->unbindTranslation(); | ||||
| 		$translations = array('title' => 'Title'); | ||||
| 		$this->Tree->bindTranslation($translations, false); | ||||
| 		$this->Tree->locale = array('eng', 'spa'); | ||||
| 
 | ||||
| 		$result = $this->Tree->read(); | ||||
| 		$expected = array( | ||||
| 			'FlagTree' => array( | ||||
| 				'id' => 2, | ||||
| 				'parent_id' => null, | ||||
| 				'locale' => 'eng', | ||||
| 				'name' => 'test', | ||||
| 				'title' => 'New title', | ||||
| 				'flag' => 0, | ||||
| 				'lft' => 3, | ||||
| 				'rght' => 4 | ||||
| 			), | ||||
| 			'Title' => array( | ||||
| 				array('id' => 21, 'locale' => 'eng', 'model' => 'FlagTree', 'foreign_key' => 2, 'field' => 'title', 'content' => 'New title'), | ||||
| 				array('id' => 22, 'locale' => 'spa', 'model' => 'FlagTree', 'foreign_key' => 2, 'field' => 'title', 'content' => 'Nuevo leyenda') | ||||
| 			), | ||||
| 		); | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * testGenerateTreeListWithSelfJoin method | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testAliasesWithScopeInTwoTreeAssociations() { | ||||
| 		extract($this->settings); | ||||
| 		$this->Tree = new $modelClass(); | ||||
| 		$this->Tree->order = null; | ||||
| 		$this->Tree->initialize(2, 2); | ||||
| 
 | ||||
| 		$this->TreeTwo = new NumberTreeTwo(); | ||||
| 		$this->TreeTwo->order = null; | ||||
| 
 | ||||
| 		$record = $this->Tree->find('first'); | ||||
| 
 | ||||
| 		$this->Tree->bindModel(array( | ||||
| 			'hasMany' => array( | ||||
| 				'SecondTree' => array( | ||||
| 					'className' => 'NumberTreeTwo', | ||||
| 					'foreignKey' => 'number_tree_id' | ||||
| 				) | ||||
| 			) | ||||
| 		)); | ||||
| 		$this->TreeTwo->bindModel(array( | ||||
| 			'belongsTo' => array( | ||||
| 				'FirstTree' => array( | ||||
| 					'className' => $modelClass, | ||||
| 					'foreignKey' => 'number_tree_id' | ||||
| 				) | ||||
| 			) | ||||
| 		)); | ||||
| 		$this->TreeTwo->Behaviors->load('Tree', array( | ||||
| 			'scope' => 'FirstTree' | ||||
| 		)); | ||||
| 
 | ||||
| 		$data = array( | ||||
| 			'NumberTreeTwo' => array( | ||||
| 				'name' => 'First', | ||||
| 				'number_tree_id' => $record['FlagTree']['id'] | ||||
| 			) | ||||
| 		); | ||||
| 		$this->TreeTwo->create(); | ||||
| 		$result = $this->TreeTwo->save($data); | ||||
| 		$this->assertFalse(empty($result)); | ||||
| 
 | ||||
| 		$result = $this->TreeTwo->find('first'); | ||||
| 		$expected = array('NumberTreeTwo' => array( | ||||
| 			'id' => 1, | ||||
| 			'name' => 'First', | ||||
| 			'number_tree_id' => $record['FlagTree']['id'], | ||||
| 			'parent_id' => null, | ||||
| 			'lft' => 1, | ||||
| 			'rght' => 2 | ||||
| 		)); | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * testGenerateTreeListWithScope method | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testGenerateTreeListWithScope() { | ||||
| 		extract($this->settings); | ||||
| 		$this->Tree = new $modelClass(); | ||||
| 		$this->Tree->order = null; | ||||
| 		$this->Tree->initialize(2, 3); | ||||
| 
 | ||||
| 		$this->Tree->id = 1; | ||||
| 		$this->Tree->saveField('flag', 1); | ||||
| 		$this->Tree->id = 2; | ||||
| 		$this->Tree->saveField('flag', 1); | ||||
| 
 | ||||
| 		$this->Tree->Behaviors->load('Tree', array('scope' => array('FlagTree.flag' => 1))); | ||||
| 
 | ||||
| 		$result = $this->Tree->generateTreeList(); | ||||
| 		$expected = array( | ||||
| 			1 => '1. Root', | ||||
| 			2 => '_1.1' | ||||
| 		); | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 
 | ||||
| 		// As string.
 | ||||
| 		$this->Tree->Behaviors->load('Tree', array('scope' => 'FlagTree.flag = 1')); | ||||
| 
 | ||||
| 		$result = $this->Tree->generateTreeList(); | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 
 | ||||
| 		// Merging conditions.
 | ||||
| 		$result = $this->Tree->generateTreeList(array('FlagTree.id >' => 1)); | ||||
| 		$expected = array( | ||||
| 			2 => '1.1' | ||||
| 		); | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * testRecoverUsingParentMode method | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testRecoverUsingParentMode() { | ||||
| 		extract($this->settings); | ||||
| 		$this->Tree = new $modelClass(); | ||||
| 		$this->Tree->order = null; | ||||
| 		$this->Tree->initialize(2, 3); | ||||
| 
 | ||||
| 		$this->Tree->Behaviors->load('Tree', array('scope' => 'FlagTree.flag = 1')); | ||||
| 		$this->Tree->Behaviors->disable('Tree'); | ||||
| 
 | ||||
| 		$this->Tree->create(); | ||||
| 		$this->Tree->save(array('name' => 'Main', $parentField => null, $leftField => 0, $rightField => 0, 'flag' => 1)); | ||||
| 		$node1 = $this->Tree->id; | ||||
| 
 | ||||
| 		$this->Tree->create(); | ||||
| 		$this->Tree->save(array('name' => 'About Us', $parentField => $node1, $leftField => 0, $rightField => 0, 'flag' => 1)); | ||||
| 		$node11 = $this->Tree->id; | ||||
| 
 | ||||
| 		$this->Tree->create(); | ||||
| 		$this->Tree->save(array('name' => 'Programs', $parentField => $node1, $leftField => 0, $rightField => 0, 'flag' => 1)); | ||||
| 		$node12 = $this->Tree->id; | ||||
| 
 | ||||
| 		$this->Tree->create(); | ||||
| 		$this->Tree->save(array('name' => 'Mission and History', $parentField => $node11, $leftField => 0, $rightField => 0, 'flag' => 1)); | ||||
| 
 | ||||
| 		$this->Tree->create(); | ||||
| 		$this->Tree->save(array('name' => 'Overview', $parentField => $node12, $leftField => 0, $rightField => 0, 'flag' => 1)); | ||||
| 
 | ||||
| 		$this->Tree->Behaviors->enable('Tree'); | ||||
| 
 | ||||
| 		$result = $this->Tree->verify(); | ||||
| 		$this->assertNotSame($result, true); | ||||
| 
 | ||||
| 		$result = $this->Tree->recover(); | ||||
| 		$this->assertTrue($result); | ||||
| 
 | ||||
| 		$result = $this->Tree->verify(); | ||||
| 		$this->assertTrue($result); | ||||
| 
 | ||||
| 		$result = $this->Tree->find('first', array( | ||||
| 			'fields' => array('name', $parentField, $leftField, $rightField, 'flag'), | ||||
| 			'conditions' => array('name' => 'Main'), | ||||
| 			'recursive' => -1 | ||||
| 		)); | ||||
| 		$expected = array( | ||||
| 			$modelClass => array( | ||||
| 				'name' => 'Main', | ||||
| 				$parentField => null, | ||||
| 				$leftField => 1, | ||||
| 				$rightField => 10, | ||||
| 				'flag' => 1 | ||||
| 			) | ||||
| 		); | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * testRecoverFromMissingParent method | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testRecoverFromMissingParent() { | ||||
| 		extract($this->settings); | ||||
| 		$this->Tree = new $modelClass(); | ||||
| 		$this->Tree->order = null; | ||||
| 		$this->Tree->initialize(2, 2); | ||||
| 
 | ||||
| 		$this->Tree->id = 1; | ||||
| 		$this->Tree->saveField('flag', 1); | ||||
| 		$this->Tree->id = 2; | ||||
| 		$this->Tree->saveField('flag', 1); | ||||
| 
 | ||||
| 		$this->Tree->Behaviors->load('Tree', array('scope' => array('FlagTree.flag' => 1))); | ||||
| 
 | ||||
| 		$result = $this->Tree->findByName('1.1'); | ||||
| 		$this->Tree->updateAll(array($parentField => 999999), array('id' => $result[$modelClass]['id'])); | ||||
| 
 | ||||
| 		$result = $this->Tree->verify(); | ||||
| 		$this->assertNotSame($result, true); | ||||
| 
 | ||||
| 		$result = $this->Tree->recover(); | ||||
| 		$this->assertTrue($result); | ||||
| 
 | ||||
| 		$result = $this->Tree->verify(); | ||||
| 		$this->assertTrue($result); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * testDetectInvalidParents method | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testDetectInvalidParents() { | ||||
| 		extract($this->settings); | ||||
| 		$this->Tree = new $modelClass(); | ||||
| 		$this->Tree->order = null; | ||||
| 		$this->Tree->initialize(2, 2); | ||||
| 
 | ||||
| 		$this->Tree->id = 1; | ||||
| 		$this->Tree->saveField('flag', 1); | ||||
| 		$this->Tree->id = 2; | ||||
| 		$this->Tree->saveField('flag', 1); | ||||
| 
 | ||||
| 		$this->Tree->Behaviors->load('Tree', array('scope' => array('FlagTree.flag' => 1))); | ||||
| 
 | ||||
| 		$this->Tree->updateAll(array($parentField => null)); | ||||
| 
 | ||||
| 		$result = $this->Tree->verify(); | ||||
| 		$this->assertNotSame($result, true); | ||||
| 
 | ||||
| 		$result = $this->Tree->recover(); | ||||
| 		$this->assertTrue($result); | ||||
| 
 | ||||
| 		$result = $this->Tree->verify(); | ||||
| 		$this->assertTrue($result); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * testDetectInvalidLftsRghts method | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testDetectInvalidLftsRghts() { | ||||
| 		extract($this->settings); | ||||
| 		$this->Tree = new $modelClass(); | ||||
| 		$this->Tree->order = null; | ||||
| 		$this->Tree->initialize(2, 2); | ||||
| 
 | ||||
| 		$this->Tree->id = 1; | ||||
| 		$this->Tree->saveField('flag', 1); | ||||
| 		$this->Tree->id = 2; | ||||
| 		$this->Tree->saveField('flag', 1); | ||||
| 
 | ||||
| 		$this->Tree->Behaviors->load('Tree', array('scope' => array('FlagTree.flag' => 1))); | ||||
| 
 | ||||
| 		$this->Tree->updateAll(array($leftField => 0, $rightField => 0)); | ||||
| 
 | ||||
| 		$result = $this->Tree->verify(); | ||||
| 		$this->assertNotSame($result, true); | ||||
| 
 | ||||
| 		$this->Tree->recover(); | ||||
| 
 | ||||
| 		$result = $this->Tree->verify(); | ||||
| 		$this->assertTrue($result); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * Reproduces a situation where a single node has lft= rght, and all other lft and rght fields follow sequentially | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testDetectEqualLftsRghts() { | ||||
| 		extract($this->settings); | ||||
| 		$this->Tree = new $modelClass(); | ||||
| 		$this->Tree->order = null; | ||||
| 		$this->Tree->initialize(1, 3); | ||||
| 
 | ||||
| 		$this->Tree->id = 1; | ||||
| 		$this->Tree->saveField('flag', 1); | ||||
| 		$this->Tree->id = 2; | ||||
| 		$this->Tree->saveField('flag', 1); | ||||
| 
 | ||||
| 		$this->Tree->Behaviors->load('Tree', array('scope' => array('FlagTree.flag' => 1))); | ||||
| 
 | ||||
| 		$result = $this->Tree->findByName('1.1'); | ||||
| 		$this->Tree->updateAll(array($rightField => $result[$modelClass][$leftField]), array('id' => $result[$modelClass]['id'])); | ||||
| 		$this->Tree->updateAll(array($leftField => $this->Tree->escapeField($leftField) . ' -1'), | ||||
| 			array($leftField . ' >' => $result[$modelClass][$leftField])); | ||||
| 		$this->Tree->updateAll(array($rightField => $this->Tree->escapeField($rightField) . ' -1'), | ||||
| 			array($rightField . ' >' => $result[$modelClass][$leftField])); | ||||
| 
 | ||||
| 		$result = $this->Tree->verify(); | ||||
| 		$this->assertNotSame($result, true); | ||||
| 
 | ||||
| 		$result = $this->Tree->recover(); | ||||
| 		$this->assertTrue($result); | ||||
| 
 | ||||
| 		$result = $this->Tree->verify(); | ||||
| 		$this->assertTrue($result); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
							
								
								
									
										42
									
								
								lib/Cake/Test/Case/Model/Behavior/TreeBehaviorTest.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								lib/Cake/Test/Case/Model/Behavior/TreeBehaviorTest.php
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,42 @@ | |||
| <?php | ||||
| /** | ||||
|  * Tree Behavior test file - runs all the tree behavior tests | ||||
|  * | ||||
|  * CakePHP(tm) : 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(tm) Project | ||||
|  * @package       Cake.Test.Case.Model.Behavior | ||||
|  * @since         CakePHP(tm) v 2.0 | ||||
|  * @license       http://www.opensource.org/licenses/mit-license.php MIT License | ||||
|  */ | ||||
| 
 | ||||
| /** | ||||
|  * Tree Behavior test | ||||
|  * | ||||
|  * A test group to run all the component parts | ||||
|  * | ||||
|  * @package       Cake.Test.Case.Model.Behavior | ||||
|  */ | ||||
| class TreeBehaviorTest extends PHPUnit_Framework_TestSuite { | ||||
| 
 | ||||
| /** | ||||
|  * suite method, defines tests for this suite. | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public static function suite() { | ||||
| 		$suite = new CakeTestSuite('TreeBehavior tests'); | ||||
| 
 | ||||
| 		$suite->addTestFile(CORE_TEST_CASES . DS . 'Model' . DS . 'Behavior' . DS . 'TreeBehaviorNumberTest.php'); | ||||
| 		$suite->addTestFile(CORE_TEST_CASES . DS . 'Model' . DS . 'Behavior' . DS . 'TreeBehaviorScopedTest.php'); | ||||
| 		$suite->addTestFile(CORE_TEST_CASES . DS . 'Model' . DS . 'Behavior' . DS . 'TreeBehaviorAfterTest.php'); | ||||
| 		$suite->addTestFile(CORE_TEST_CASES . DS . 'Model' . DS . 'Behavior' . DS . 'TreeBehaviorUuidTest.php'); | ||||
| 		return $suite; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										298
									
								
								lib/Cake/Test/Case/Model/Behavior/TreeBehaviorUuidTest.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										298
									
								
								lib/Cake/Test/Case/Model/Behavior/TreeBehaviorUuidTest.php
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,298 @@ | |||
| <?php | ||||
| /** | ||||
|  * TreeBehaviorUuidTest file | ||||
|  * | ||||
|  * Tree test using UUIDs | ||||
|  * | ||||
|  * CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html> | ||||
|  * 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://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests | ||||
|  * @package       Cake.Test.Case.Model.Behavior | ||||
|  * @since         CakePHP(tm) v 1.2.0.5330 | ||||
|  * @license       http://www.opensource.org/licenses/mit-license.php MIT License | ||||
|  */ | ||||
| 
 | ||||
| App::uses('Model', 'Model'); | ||||
| App::uses('AppModel', 'Model'); | ||||
| App::uses('String', 'Utility'); | ||||
| 
 | ||||
| require_once dirname(dirname(__FILE__)) . DS . 'models.php'; | ||||
| 
 | ||||
| /** | ||||
|  * TreeBehaviorUuidTest class | ||||
|  * | ||||
|  * @package       Cake.Test.Case.Model.Behavior | ||||
|  */ | ||||
| class TreeBehaviorUuidTest extends CakeTestCase { | ||||
| 
 | ||||
| /** | ||||
|  * Whether backup global state for each test method or not | ||||
|  * | ||||
|  * @var bool | ||||
|  */ | ||||
| 	public $backupGlobals = false; | ||||
| 
 | ||||
| /** | ||||
|  * settings property | ||||
|  * | ||||
|  * @var array | ||||
|  */ | ||||
| 	public $settings = array( | ||||
| 		'modelClass' => 'UuidTree', | ||||
| 		'leftField' => 'lft', | ||||
| 		'rightField' => 'rght', | ||||
| 		'parentField' => 'parent_id' | ||||
| 	); | ||||
| 
 | ||||
| /** | ||||
|  * fixtures property | ||||
|  * | ||||
|  * @var array | ||||
|  */ | ||||
| 	public $fixtures = array('core.uuid_tree'); | ||||
| 
 | ||||
| /** | ||||
|  * testAddWithPreSpecifiedId method | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testAddWithPreSpecifiedId() { | ||||
| 		extract($this->settings); | ||||
| 		$this->Tree = new $modelClass(); | ||||
| 		$this->Tree->order = null; | ||||
| 		$this->Tree->initialize(2, 2); | ||||
| 
 | ||||
| 		$data = $this->Tree->find('first', array( | ||||
| 			'fields' => array('id'), | ||||
| 			'conditions' => array($modelClass . '.name' => '1.1') | ||||
| 		)); | ||||
| 
 | ||||
| 		$id = String::uuid(); | ||||
| 		$this->Tree->create(); | ||||
| 		$result = $this->Tree->save(array($modelClass => array( | ||||
| 			'id' => $id, | ||||
| 			'name' => 'testAddMiddle', | ||||
| 			$parentField => $data[$modelClass]['id']) | ||||
| 		)); | ||||
| 		$expected = array_merge( | ||||
| 			array($modelClass => array('id' => $id, 'name' => 'testAddMiddle', $parentField => '2')), | ||||
| 			$result | ||||
| 		); | ||||
| 		$this->assertSame($expected, $result); | ||||
| 
 | ||||
| 		$this->assertTrue($this->Tree->verify()); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * testMovePromote method | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testMovePromote() { | ||||
| 		extract($this->settings); | ||||
| 		$this->Tree = new $modelClass(); | ||||
| 		$this->Tree->order = null; | ||||
| 		$this->Tree->initialize(2, 2); | ||||
| 		$this->Tree->id = null; | ||||
| 
 | ||||
| 		$parent = $this->Tree->find('first', array('conditions' => array($modelClass . '.name' => '1. Root'))); | ||||
| 		$parentId = $parent[$modelClass]['id']; | ||||
| 
 | ||||
| 		$data = $this->Tree->find('first', array('fields' => array('id'), 'conditions' => array($modelClass . '.name' => '1.1.1'))); | ||||
| 		$this->Tree->id = $data[$modelClass]['id']; | ||||
| 		$this->Tree->saveField($parentField, $parentId); | ||||
| 		$direct = $this->Tree->children($parentId, true, array('name', $leftField, $rightField)); | ||||
| 		$expected = array(array($modelClass => array('name' => '1.1', $leftField => 2, $rightField => 5)), | ||||
| 			array($modelClass => array('name' => '1.2', $leftField => 6, $rightField => 11)), | ||||
| 			array($modelClass => array('name' => '1.1.1', $leftField => 12, $rightField => 13))); | ||||
| 		$this->assertEquals($expected, $direct); | ||||
| 		$validTree = $this->Tree->verify(); | ||||
| 		$this->assertTrue($validTree); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * testMoveWithWhitelist method | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testMoveWithWhitelist() { | ||||
| 		extract($this->settings); | ||||
| 		$this->Tree = new $modelClass(); | ||||
| 		$this->Tree->order = null; | ||||
| 		$this->Tree->initialize(2, 2); | ||||
| 		$this->Tree->id = null; | ||||
| 
 | ||||
| 		$parent = $this->Tree->find('first', array('conditions' => array($modelClass . '.name' => '1. Root'))); | ||||
| 		$parentId = $parent[$modelClass]['id']; | ||||
| 
 | ||||
| 		$data = $this->Tree->find('first', array('fields' => array('id'), 'conditions' => array($modelClass . '.name' => '1.1.1'))); | ||||
| 		$this->Tree->id = $data[$modelClass]['id']; | ||||
| 		$this->Tree->whitelist = array($parentField, 'name', 'description'); | ||||
| 		$this->Tree->saveField($parentField, $parentId); | ||||
| 
 | ||||
| 		$result = $this->Tree->children($parentId, true, array('name', $leftField, $rightField)); | ||||
| 		$expected = array(array($modelClass => array('name' => '1.1', $leftField => 2, $rightField => 5)), | ||||
| 			array($modelClass => array('name' => '1.2', $leftField => 6, $rightField => 11)), | ||||
| 			array($modelClass => array('name' => '1.1.1', $leftField => 12, $rightField => 13))); | ||||
| 		$this->assertEquals($expected, $result); | ||||
| 		$this->assertTrue($this->Tree->verify()); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * testRemoveNoChildren method | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testRemoveNoChildren() { | ||||
| 		extract($this->settings); | ||||
| 		$this->Tree = new $modelClass(); | ||||
| 		$this->Tree->order = null; | ||||
| 		$this->Tree->initialize(2, 2); | ||||
| 		$initialCount = $this->Tree->find('count'); | ||||
| 
 | ||||
| 		$result = $this->Tree->findByName('1.1.1'); | ||||
| 		$this->Tree->removeFromTree($result[$modelClass]['id']); | ||||
| 
 | ||||
| 		$laterCount = $this->Tree->find('count'); | ||||
| 		$this->assertEquals($initialCount, $laterCount); | ||||
| 
 | ||||
| 		$nodes = $this->Tree->find('list', array('order' => $leftField)); | ||||
| 		$expected = array( | ||||
| 			'1. Root', | ||||
| 			'1.1', | ||||
| 			'1.1.2', | ||||
| 			'1.2', | ||||
| 			'1.2.1', | ||||
| 			'1.2.2', | ||||
| 			'1.1.1', | ||||
| 		); | ||||
| 
 | ||||
| 		$this->assertEquals($expected, array_values($nodes)); | ||||
| 
 | ||||
| 		$validTree = $this->Tree->verify(); | ||||
| 		$this->assertTrue($validTree); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * testRemoveAndDeleteNoChildren method | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testRemoveAndDeleteNoChildren() { | ||||
| 		extract($this->settings); | ||||
| 		$this->Tree = new $modelClass(); | ||||
| 		$this->Tree->order = null; | ||||
| 		$this->Tree->initialize(2, 2); | ||||
| 		$initialCount = $this->Tree->find('count'); | ||||
| 
 | ||||
| 		$result = $this->Tree->findByName('1.1.1'); | ||||
| 		$this->Tree->removeFromTree($result[$modelClass]['id'], true); | ||||
| 
 | ||||
| 		$laterCount = $this->Tree->find('count'); | ||||
| 		$this->assertEquals($initialCount - 1, $laterCount); | ||||
| 
 | ||||
| 		$nodes = $this->Tree->find('list', array('order' => $leftField)); | ||||
| 		$expected = array( | ||||
| 			'1. Root', | ||||
| 			'1.1', | ||||
| 			'1.1.2', | ||||
| 			'1.2', | ||||
| 			'1.2.1', | ||||
| 			'1.2.2', | ||||
| 		); | ||||
| 		$this->assertEquals($expected, array_values($nodes)); | ||||
| 
 | ||||
| 		$validTree = $this->Tree->verify(); | ||||
| 		$this->assertTrue($validTree); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * testChildren method | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testChildren() { | ||||
| 		extract($this->settings); | ||||
| 		$this->Tree = new $modelClass(); | ||||
| 		$this->Tree->order = null; | ||||
| 		$this->Tree->initialize(2, 2); | ||||
| 
 | ||||
| 		$data = $this->Tree->find('first', array('conditions' => array($modelClass . '.name' => '1. Root'))); | ||||
| 		$this->Tree->id = $data[$modelClass]['id']; | ||||
| 
 | ||||
| 		$direct = $this->Tree->children(null, true, array('name', $leftField, $rightField)); | ||||
| 		$expected = array(array($modelClass => array('name' => '1.1', $leftField => 2, $rightField => 7)), | ||||
| 			array($modelClass => array('name' => '1.2', $leftField => 8, $rightField => 13))); | ||||
| 		$this->assertEquals($expected, $direct); | ||||
| 
 | ||||
| 		$total = $this->Tree->children(null, null, array('name', $leftField, $rightField)); | ||||
| 		$expected = array(array($modelClass => array('name' => '1.1', $leftField => 2, $rightField => 7)), | ||||
| 			array($modelClass => array('name' => '1.1.1', $leftField => 3, $rightField => 4)), | ||||
| 			array($modelClass => array('name' => '1.1.2', $leftField => 5, $rightField => 6)), | ||||
| 			array($modelClass => array('name' => '1.2', $leftField => 8, $rightField => 13)), | ||||
| 			array($modelClass => array('name' => '1.2.1', $leftField => 9, $rightField => 10)), | ||||
| 			array($modelClass => array('name' => '1.2.2', $leftField => 11, $rightField => 12))); | ||||
| 		$this->assertEquals($expected, $total); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * testNoAmbiguousColumn method | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testNoAmbiguousColumn() { | ||||
| 		extract($this->settings); | ||||
| 		$this->Tree = new $modelClass(); | ||||
| 		$this->Tree->order = null; | ||||
| 		$this->Tree->initialize(2, 2); | ||||
| 
 | ||||
| 		$this->Tree->bindModel(array('belongsTo' => array('Dummy' => | ||||
| 			array('className' => $modelClass, 'foreignKey' => $parentField, 'conditions' => array('Dummy.id' => null)))), false); | ||||
| 
 | ||||
| 		$data = $this->Tree->find('first', array( | ||||
| 			'conditions' => array($modelClass . '.name' => '1. Root'), | ||||
| 			'recursive' => -1 | ||||
| 		)); | ||||
| 		$this->Tree->id = $data[$modelClass]['id']; | ||||
| 
 | ||||
| 		$direct = $this->Tree->children(null, true, array('name', $leftField, $rightField)); | ||||
| 		$expected = array(array($modelClass => array('name' => '1.1', $leftField => 2, $rightField => 7)), | ||||
| 			array($modelClass => array('name' => '1.2', $leftField => 8, $rightField => 13))); | ||||
| 		$this->assertEquals($expected, $direct); | ||||
| 
 | ||||
| 		$total = $this->Tree->children(null, null, array('name', $leftField, $rightField)); | ||||
| 		$expected = array( | ||||
| 			array($modelClass => array('name' => '1.1', $leftField => 2, $rightField => 7)), | ||||
| 			array($modelClass => array('name' => '1.1.1', $leftField => 3, $rightField => 4)), | ||||
| 			array($modelClass => array('name' => '1.1.2', $leftField => 5, $rightField => 6)), | ||||
| 			array($modelClass => array('name' => '1.2', $leftField => 8, $rightField => 13)), | ||||
| 			array($modelClass => array('name' => '1.2.1', $leftField => 9, $rightField => 10)), | ||||
| 			array($modelClass => array('name' => '1.2.2', $leftField => 11, $rightField => 12)) | ||||
| 		); | ||||
| 		$this->assertEquals($expected, $total); | ||||
| 	} | ||||
| 
 | ||||
| /** | ||||
|  * testGenerateTreeListWithSelfJoin method | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| 	public function testGenerateTreeListWithSelfJoin() { | ||||
| 		extract($this->settings); | ||||
| 		$this->Tree = new $modelClass(); | ||||
| 		$this->Tree->order = null; | ||||
| 		$this->Tree->bindModel(array('belongsTo' => array('Dummy' => | ||||
| 			array('className' => $modelClass, 'foreignKey' => $parentField, 'conditions' => array('Dummy.id' => null)))), false); | ||||
| 		$this->Tree->initialize(2, 2); | ||||
| 
 | ||||
| 		$result = $this->Tree->generateTreeList(); | ||||
| 		$expected = array('1. Root', '_1.1', '__1.1.1', '__1.1.2', '_1.2', '__1.2.1', '__1.2.2'); | ||||
| 		$this->assertSame($expected, array_values($result)); | ||||
| 	} | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 mareksebera
						mareksebera