2008-05-30 11:40:08 +00:00
< ? php
/* SVN FILE: $Id$ */
/**
2009-03-18 17:55:58 +00:00
* TreeBehaviorTest file
2008-05-30 11:40:08 +00:00
*
2009-03-18 17:55:58 +00:00
* Holds several Test Cases
2008-05-30 11:40:08 +00:00
*
* PHP versions 4 and 5
*
* CakePHP ( tm ) Tests < https :// trac . cakephp . org / wiki / Developement / TestSuite >
2008-10-30 17:30:26 +00:00
* Copyright 2005 - 2008 , Cake Software Foundation , Inc . ( http :// www . cakefoundation . org )
2008-05-30 11:40:08 +00:00
*
* Licensed under The Open Group Test Suite License
* Redistributions of files must retain the above copyright notice .
*
* @ filesource
2008-10-30 17:30:26 +00:00
* @ copyright Copyright 2005 - 2008 , Cake Software Foundation , Inc . ( http :// www . cakefoundation . org )
* @ link https :// trac . cakephp . org / wiki / Developement / TestSuite CakePHP ( tm ) Tests
2009-03-18 17:55:58 +00:00
* @ package cake
2008-10-30 17:30:26 +00:00
* @ subpackage cake . tests . cases . libs . model . behaviors
* @ since CakePHP ( tm ) v 1.2 . 0.5330
* @ version $Revision $
* @ modifiedby $LastChangedBy $
* @ lastmodified $Date $
* @ license http :// www . opensource . org / licenses / opengroup . php The Open Group Test Suite License
2008-05-30 11:40:08 +00:00
*/
2008-06-24 03:16:28 +00:00
App :: import ( 'Core' , array ( 'AppModel' , 'Model' ));
require_once ( dirname ( dirname ( __FILE__ )) . DS . 'models.php' );
2008-06-02 19:22:55 +00:00
/**
2009-03-18 17:55:58 +00:00
* NumberTreeTest class
2008-06-24 03:16:28 +00:00
*
2008-10-30 17:30:26 +00:00
* @ package cake
* @ subpackage cake . tests . cases . libs . model . behaviors
2008-06-02 19:22:55 +00:00
*/
2009-03-18 17:55:58 +00:00
class NumberTreeTest extends CakeTestCase {
2008-06-02 19:22:55 +00:00
/**
2008-11-20 13:57:44 +00:00
* settings property
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ var array
* @ access public
*/
2008-11-20 13:57:44 +00:00
var $settings = array (
'modelClass' => 'NumberTree' ,
'leftField' => 'lft' ,
'rightField' => 'rght' ,
'parentField' => 'parent_id'
2008-06-20 20:17:23 +00:00
);
2008-06-02 19:22:55 +00:00
/**
2008-11-20 13:57:44 +00:00
* fixtures property
2008-06-24 03:16:28 +00:00
*
2008-11-20 13:57:44 +00:00
* @ var array
2008-06-02 19:22:55 +00:00
* @ access public
*/
2008-11-20 13:57:44 +00:00
var $fixtures = array ( 'core.number_tree' );
2008-06-02 19:22:55 +00:00
/**
2008-11-20 13:57:44 +00:00
* testInitialize method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-11-20 13:57:44 +00:00
function testInitialize () {
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> find ( 'count' );
$this -> assertEqual ( $result , 7 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$validTree = $this -> Tree -> verify ();
$this -> assertIdentical ( $validTree , true );
2008-05-30 11:40:08 +00:00
}
2008-06-02 19:22:55 +00:00
/**
* testDetectInvalidLeft method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testDetectInvalidLeft () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> findByName ( '1.1' );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$save [ $modelClass ][ 'id' ] = $result [ $modelClass ][ 'id' ];
$save [ $modelClass ][ $leftField ] = 0 ;
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$this -> Tree -> save ( $save );
$result = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertNotIdentical ( $result , true );
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> recover ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , true );
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , true );
}
2008-06-02 19:22:55 +00:00
/**
* testDetectInvalidRight method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testDetectInvalidRight () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> findByName ( '1.1' );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$save [ $modelClass ][ 'id' ] = $result [ $modelClass ][ 'id' ];
$save [ $modelClass ][ $rightField ] = 0 ;
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$this -> Tree -> save ( $save );
$result = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertNotIdentical ( $result , true );
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> recover ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , true );
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , true );
}
2008-06-02 19:22:55 +00:00
/**
* testDetectInvalidParent method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testDetectInvalidParent () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> findByName ( '1.1' );
2008-05-30 11:40:08 +00:00
// Bypass behavior and any other logic
2008-11-20 13:57:44 +00:00
$this -> Tree -> updateAll ( array ( $parentField => null ), array ( 'id' => $result [ $modelClass ][ 'id' ]));
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertNotIdentical ( $result , true );
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> recover ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , true );
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , true );
}
2008-06-02 19:22:55 +00:00
/**
* testDetectNoneExistantParent method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testDetectNoneExistantParent () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> findByName ( '1.1' );
$this -> Tree -> updateAll ( array ( $parentField => 999999 ), array ( 'id' => $result [ $modelClass ][ 'id' ]));
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertNotIdentical ( $result , true );
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> recover ( 'MPTT' );
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , true );
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , true );
}
2008-06-02 19:22:55 +00:00
/**
* testRecoverFromMissingParent method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testRecoverFromMissingParent () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> findByName ( '1.1' );
$this -> Tree -> updateAll ( array ( $parentField => 999999 ), array ( 'id' => $result [ $modelClass ][ 'id' ]));
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertNotIdentical ( $result , true );
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> recover ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , true );
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , true );
}
2008-06-02 19:22:55 +00:00
/**
* testDetectInvalidParents method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testDetectInvalidParents () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$this -> Tree -> updateAll ( array ( $parentField => null ));
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertNotIdentical ( $result , true );
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> recover ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , true );
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , true );
}
2008-06-02 19:22:55 +00:00
/**
* testDetectInvalidLftsRghts method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testDetectInvalidLftsRghts () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$this -> Tree -> updateAll ( array ( $leftField => 0 , $rightField => 0 ));
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertNotIdentical ( $result , true );
2008-11-20 13:57:44 +00:00
$this -> Tree -> recover ();
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , true );
}
2008-06-22 12:27:54 +00:00
/**
2008-11-20 13:57:44 +00:00
* Reproduces a situation where a single node has lft = rght , and all other lft and rght fields follow sequentially
2008-06-24 03:16:28 +00:00
*
2008-06-22 12:27:54 +00:00
* @ access public
* @ return void
*/
function testDetectEqualLftsRghts () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 1 , 3 );
$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 ();
2008-06-22 12:27:54 +00:00
$this -> assertNotIdentical ( $result , true );
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> recover ();
2008-06-22 12:27:54 +00:00
$this -> assertTrue ( $result );
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> verify ();
2008-06-22 12:27:54 +00:00
$this -> assertTrue ( $result );
}
2008-06-02 19:22:55 +00:00
/**
* testAddOrphan method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testAddOrphan () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$this -> Tree -> save ( array ( $modelClass => array ( 'name' => 'testAddOrphan' , $parentField => null )));
$result = $this -> Tree -> find ( null , array ( 'name' , $parentField ), $modelClass . '.' . $leftField . ' desc' );
$expected = array ( $modelClass => array ( 'name' => 'testAddOrphan' , $parentField => null ));
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $result , $expected );
2008-11-20 13:57:44 +00:00
$validTree = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $validTree , true );
}
2008-06-02 19:22:55 +00:00
/**
* testAddMiddle method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testAddMiddle () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1.1' ), array ( 'id' ));
$initialCount = $this -> Tree -> find ( 'count' );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$this -> Tree -> create ();
$result = $this -> Tree -> save ( array ( $modelClass => array ( 'name' => 'testAddMiddle' , $parentField => $data [ $modelClass ][ 'id' ])));
$expected = array_merge ( array ( $modelClass => array ( 'name' => 'testAddMiddle' , $parentField => '2' )), $result );
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , $expected );
2008-11-20 13:57:44 +00:00
$laterCount = $this -> Tree -> find ( 'count' );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$laterCount = $this -> Tree -> find ( 'count' );
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $initialCount + 1 , $laterCount );
2008-11-20 13:57:44 +00:00
$children = $this -> Tree -> children ( $data [ $modelClass ][ 'id' ], true , array ( 'name' ));
$expects = array ( array ( $modelClass => array ( 'name' => '1.1.1' )),
2009-01-15 00:50:01 +00:00
array ( $modelClass => array ( 'name' => '1.1.2' )),
array ( $modelClass => array ( 'name' => 'testAddMiddle' )));
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $children , $expects );
2008-11-20 13:57:44 +00:00
$validTree = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $validTree , true );
}
2008-06-02 19:22:55 +00:00
/**
* testAddInvalid method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testAddInvalid () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
$this -> Tree -> id = null ;
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$initialCount = $this -> Tree -> find ( 'count' );
2008-05-30 11:40:08 +00:00
//$this->expectError('Trying to save a node under a none-existant node in TreeBehavior::beforeSave');
2008-11-20 13:57:44 +00:00
$saveSuccess = $this -> Tree -> save ( array ( $modelClass => array ( 'name' => 'testAddInvalid' , $parentField => 99999 )));
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $saveSuccess , false );
2008-11-20 13:57:44 +00:00
$laterCount = $this -> Tree -> find ( 'count' );
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $initialCount , $laterCount );
2008-11-20 13:57:44 +00:00
$validTree = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $validTree , true );
}
2009-01-21 01:17:51 +00:00
/**
* testAddNotIndexedByModel method
*
* @ access public
* @ return void
*/
function testAddNotIndexedByModel () {
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
$this -> Tree -> save ( array ( 'name' => 'testAddNotIndexed' , $parentField => null ));
$result = $this -> Tree -> find ( null , array ( 'name' , $parentField ), $modelClass . '.' . $leftField . ' desc' );
$expected = array ( $modelClass => array ( 'name' => 'testAddNotIndexed' , $parentField => null ));
$this -> assertEqual ( $result , $expected );
$validTree = $this -> Tree -> verify ();
$this -> assertIdentical ( $validTree , true );
}
2008-06-02 19:22:55 +00:00
/**
* testMovePromote method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testMovePromote () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
$this -> Tree -> id = null ;
$parent = $this -> Tree -> find ( array ( $modelClass . '.name' => '1. Root' ));
$parent_id = $parent [ $modelClass ][ 'id' ];
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1.1.1' ), array ( 'id' ));
$this -> Tree -> id = $data [ $modelClass ][ 'id' ];
$this -> Tree -> saveField ( $parentField , $parent_id );
$direct = $this -> Tree -> children ( $parent_id , true , array ( 'id' , 'name' , $parentField , $leftField , $rightField ));
$expects = array ( array ( $modelClass => array ( 'id' => 2 , 'name' => '1.1' , $parentField => 1 , $leftField => 2 , $rightField => 5 )),
2009-01-15 00:50:01 +00:00
array ( $modelClass => array ( 'id' => 5 , 'name' => '1.2' , $parentField => 1 , $leftField => 6 , $rightField => 11 )),
array ( $modelClass => array ( 'id' => 3 , 'name' => '1.1.1' , $parentField => 1 , $leftField => 12 , $rightField => 13 )));
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $direct , $expects );
2008-11-20 13:57:44 +00:00
$validTree = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $validTree , true );
}
2008-06-02 19:22:55 +00:00
/**
* testMoveWithWhitelist method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testMoveWithWhitelist () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
$this -> Tree -> id = null ;
$parent = $this -> Tree -> find ( array ( $modelClass . '.name' => '1. Root' ));
$parent_id = $parent [ $modelClass ][ 'id' ];
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1.1.1' ), array ( 'id' ));
$this -> Tree -> id = $data [ $modelClass ][ 'id' ];
$this -> Tree -> whitelist = array ( $parentField , 'name' , 'description' );
$this -> Tree -> saveField ( $parentField , $parent_id );
$result = $this -> Tree -> children ( $parent_id , true , array ( 'id' , 'name' , $parentField , $leftField , $rightField ));
$expected = array ( array ( $modelClass => array ( 'id' => 2 , 'name' => '1.1' , $parentField => 1 , $leftField => 2 , $rightField => 5 )),
2009-01-15 00:50:01 +00:00
array ( $modelClass => array ( 'id' => 5 , 'name' => '1.2' , $parentField => 1 , $leftField => 6 , $rightField => 11 )),
array ( $modelClass => array ( 'id' => 3 , 'name' => '1.1.1' , $parentField => 1 , $leftField => 12 , $rightField => 13 )));
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $result , $expected );
2008-11-20 13:57:44 +00:00
$this -> assertTrue ( $this -> Tree -> verify ());
2008-05-30 11:40:08 +00:00
}
2008-06-02 19:22:55 +00:00
/**
* testInsertWithWhitelist method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testInsertWithWhitelist () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
$this -> Tree -> whitelist = array ( 'name' , $parentField );
$this -> Tree -> save ( array ( $modelClass => array ( 'name' => 'testAddOrphan' , $parentField => null )));
$result = $this -> Tree -> findByName ( 'testAddOrphan' , array ( 'name' , $parentField , $leftField , $rightField ));
$expected = array ( 'name' => 'testAddOrphan' , $parentField => null , $leftField => '15' , $rightField => 16 );
$this -> assertEqual ( $result [ $modelClass ], $expected );
$this -> assertIdentical ( $this -> Tree -> verify (), true );
2008-05-30 11:40:08 +00:00
}
2008-06-02 19:22:55 +00:00
/**
* testMoveBefore method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testMoveBefore () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
$this -> Tree -> id = null ;
$parent = $this -> Tree -> find ( array ( $modelClass . '.name' => '1.1' ));
$parent_id = $parent [ $modelClass ][ 'id' ];
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1.2' ), array ( 'id' ));
$this -> Tree -> id = $data [ $modelClass ][ 'id' ];
$this -> Tree -> saveField ( $parentField , $parent_id );
$result = $this -> Tree -> children ( $parent_id , true , array ( 'name' ));
$expects = array ( array ( $modelClass => array ( 'name' => '1.1.1' )),
2009-01-15 00:50:01 +00:00
array ( $modelClass => array ( 'name' => '1.1.2' )),
array ( $modelClass => array ( 'name' => '1.2' )));
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $result , $expects );
2008-11-20 13:57:44 +00:00
$validTree = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $validTree , true );
}
2008-06-02 19:22:55 +00:00
/**
* testMoveAfter method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testMoveAfter () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
$this -> Tree -> id = null ;
$parent = $this -> Tree -> find ( array ( $modelClass . '.name' => '1.2' ));
$parent_id = $parent [ $modelClass ][ 'id' ];
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1.1' ), array ( 'id' ));
$this -> Tree -> id = $data [ $modelClass ][ 'id' ];
$this -> Tree -> saveField ( $parentField , $parent_id );
$result = $this -> Tree -> children ( $parent_id , true , array ( 'name' ));
$expects = array ( array ( $modelClass => array ( 'name' => '1.2.1' )),
2009-01-15 00:50:01 +00:00
array ( $modelClass => array ( 'name' => '1.2.2' )),
array ( $modelClass => array ( 'name' => '1.1' )));
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $result , $expects );
2008-11-20 13:57:44 +00:00
$validTree = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $validTree , true );
}
2008-06-02 19:22:55 +00:00
/**
* testMoveDemoteInvalid method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testMoveDemoteInvalid () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
$this -> Tree -> id = null ;
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$parent = $this -> Tree -> find ( array ( $modelClass . '.name' => '1. Root' ));
$parent_id = $parent [ $modelClass ][ 'id' ];
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1.1.1' ), array ( 'id' ));
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$expects = $this -> Tree -> find ( 'all' );
$before = $this -> Tree -> read ( null , $data [ $modelClass ][ 'id' ]);
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$this -> Tree -> id = $parent_id ;
2008-05-30 11:40:08 +00:00
//$this->expectError('Trying to save a node under itself in TreeBehavior::beforeSave');
2008-11-20 13:57:44 +00:00
$this -> Tree -> saveField ( $parentField , $data [ $modelClass ][ 'id' ]);
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$results = $this -> Tree -> find ( 'all' );
$after = $this -> Tree -> read ( null , $data [ $modelClass ][ 'id' ]);
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $results , $expects );
$this -> assertEqual ( $before , $after );
2008-11-20 13:57:44 +00:00
$validTree = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $validTree , true );
}
2008-06-02 19:22:55 +00:00
/**
* testMoveInvalid method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testMoveInvalid () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
$this -> Tree -> id = null ;
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$initialCount = $this -> Tree -> find ( 'count' );
$data = $this -> Tree -> findByName ( '1.1' );
2008-05-30 11:40:08 +00:00
//$this->expectError('Trying to save a node under a none-existant node in TreeBehavior::beforeSave');
2008-11-20 13:57:44 +00:00
$this -> Tree -> id = $data [ $modelClass ][ 'id' ];
$this -> Tree -> saveField ( $parentField , 999999 );
2008-05-30 11:40:08 +00:00
//$this->assertIdentical($saveSuccess, false);
2008-11-20 13:57:44 +00:00
$laterCount = $this -> Tree -> find ( 'count' );
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $initialCount , $laterCount );
2008-11-20 13:57:44 +00:00
$validTree = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $validTree , true );
}
2008-06-02 19:22:55 +00:00
/**
* testMoveSelfInvalid method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testMoveSelfInvalid () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
$this -> Tree -> id = null ;
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$initialCount = $this -> Tree -> find ( 'count' );
$data = $this -> Tree -> findByName ( '1.1' );
2008-05-30 11:40:08 +00:00
//$this->expectError('Trying to set a node to be the parent of itself in TreeBehavior::beforeSave');
2008-11-20 13:57:44 +00:00
$this -> Tree -> id = $data [ $modelClass ][ 'id' ];
$saveSuccess = $this -> Tree -> saveField ( $parentField , $this -> Tree -> id );
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $saveSuccess , false );
2008-11-20 13:57:44 +00:00
$laterCount = $this -> Tree -> find ( 'count' );
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $initialCount , $laterCount );
2008-11-20 13:57:44 +00:00
$validTree = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $validTree , true );
}
2008-06-02 19:22:55 +00:00
/**
* testMoveUpSuccess method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testMoveUpSuccess () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1.2' ), array ( 'id' ));
$this -> Tree -> moveUp ( $data [ $modelClass ][ 'id' ]);
$parent = $this -> Tree -> findByName ( '1. Root' , array ( 'id' ));
$this -> Tree -> id = $parent [ $modelClass ][ 'id' ];
$result = $this -> Tree -> children ( null , true , array ( 'name' ));
$expected = array ( array ( $modelClass => array ( 'name' => '1.2' , )),
2009-01-15 00:50:01 +00:00
array ( $modelClass => array ( 'name' => '1.1' , )));
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , $expected );
}
2008-06-02 19:22:55 +00:00
/**
* testMoveUpFail method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testMoveUpFail () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1.1' ));
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$this -> Tree -> moveUp ( $data [ $modelClass ][ 'id' ]);
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$parent = $this -> Tree -> findByName ( '1. Root' , array ( 'id' ));
$this -> Tree -> id = $parent [ $modelClass ][ 'id' ];
$result = $this -> Tree -> children ( null , true , array ( 'name' ));
$expected = array ( array ( $modelClass => array ( 'name' => '1.1' , )),
2009-01-15 00:50:01 +00:00
array ( $modelClass => array ( 'name' => '1.2' , )));
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , $expected );
}
2008-06-02 19:22:55 +00:00
/**
* testMoveUp2 method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testMoveUp2 () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 1 , 10 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1.5' ), array ( 'id' ));
$this -> Tree -> moveUp ( $data [ $modelClass ][ 'id' ], 2 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$parent = $this -> Tree -> findByName ( '1. Root' , array ( 'id' ));
$this -> Tree -> id = $parent [ $modelClass ][ 'id' ];
$result = $this -> Tree -> children ( null , true , array ( 'name' ));
2008-05-30 11:40:08 +00:00
$expected = array (
2009-01-15 00:50:01 +00:00
array ( $modelClass => array ( 'name' => '1.1' , )),
array ( $modelClass => array ( 'name' => '1.2' , )),
array ( $modelClass => array ( 'name' => '1.5' , )),
array ( $modelClass => array ( 'name' => '1.3' , )),
array ( $modelClass => array ( 'name' => '1.4' , )),
array ( $modelClass => array ( 'name' => '1.6' , )),
array ( $modelClass => array ( 'name' => '1.7' , )),
array ( $modelClass => array ( 'name' => '1.8' , )),
array ( $modelClass => array ( 'name' => '1.9' , )),
array ( $modelClass => array ( 'name' => '1.10' , )));
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , $expected );
}
2008-06-02 19:22:55 +00:00
/**
* testMoveUpFirst method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testMoveUpFirst () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 1 , 10 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1.5' ), array ( 'id' ));
$this -> Tree -> moveUp ( $data [ $modelClass ][ 'id' ], true );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$parent = $this -> Tree -> findByName ( '1. Root' , array ( 'id' ));
$this -> Tree -> id = $parent [ $modelClass ][ 'id' ];
$result = $this -> Tree -> children ( null , true , array ( 'name' ));
2008-05-30 11:40:08 +00:00
$expected = array (
2009-01-15 00:50:01 +00:00
array ( $modelClass => array ( 'name' => '1.5' , )),
array ( $modelClass => array ( 'name' => '1.1' , )),
array ( $modelClass => array ( 'name' => '1.2' , )),
array ( $modelClass => array ( 'name' => '1.3' , )),
array ( $modelClass => array ( 'name' => '1.4' , )),
array ( $modelClass => array ( 'name' => '1.6' , )),
array ( $modelClass => array ( 'name' => '1.7' , )),
array ( $modelClass => array ( 'name' => '1.8' , )),
array ( $modelClass => array ( 'name' => '1.9' , )),
array ( $modelClass => array ( 'name' => '1.10' , )));
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , $expected );
}
2008-06-02 19:22:55 +00:00
/**
* testMoveDownSuccess method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testMoveDownSuccess () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1.1' ), array ( 'id' ));
$this -> Tree -> moveDown ( $data [ $modelClass ][ 'id' ]);
$parent = $this -> Tree -> findByName ( '1. Root' , array ( 'id' ));
$this -> Tree -> id = $parent [ $modelClass ][ 'id' ];
$result = $this -> Tree -> children ( null , true , array ( 'name' ));
$expected = array ( array ( $modelClass => array ( 'name' => '1.2' , )),
2009-01-15 00:50:01 +00:00
array ( $modelClass => array ( 'name' => '1.1' , )));
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , $expected );
}
2008-06-02 19:22:55 +00:00
/**
* testMoveDownFail method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testMoveDownFail () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1.2' ));
$this -> Tree -> moveDown ( $data [ $modelClass ][ 'id' ]);
$parent = $this -> Tree -> findByName ( '1. Root' , array ( 'id' ));
$this -> Tree -> id = $parent [ $modelClass ][ 'id' ];
$result = $this -> Tree -> children ( null , true , array ( 'name' ));
$expected = array ( array ( $modelClass => array ( 'name' => '1.1' , )),
2009-01-15 00:50:01 +00:00
array ( $modelClass => array ( 'name' => '1.2' , )));
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , $expected );
}
2008-06-02 19:22:55 +00:00
/**
* testMoveDownLast method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testMoveDownLast () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 1 , 10 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1.5' ), array ( 'id' ));
$this -> Tree -> moveDown ( $data [ $modelClass ][ 'id' ], true );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$parent = $this -> Tree -> findByName ( '1. Root' , array ( 'id' ));
$this -> Tree -> id = $parent [ $modelClass ][ 'id' ];
$result = $this -> Tree -> children ( null , true , array ( 'name' ));
2008-05-30 11:40:08 +00:00
$expected = array (
2009-01-15 00:50:01 +00:00
array ( $modelClass => array ( 'name' => '1.1' , )),
array ( $modelClass => array ( 'name' => '1.2' , )),
array ( $modelClass => array ( 'name' => '1.3' , )),
array ( $modelClass => array ( 'name' => '1.4' , )),
array ( $modelClass => array ( 'name' => '1.6' , )),
array ( $modelClass => array ( 'name' => '1.7' , )),
array ( $modelClass => array ( 'name' => '1.8' , )),
array ( $modelClass => array ( 'name' => '1.9' , )),
array ( $modelClass => array ( 'name' => '1.10' , )),
array ( $modelClass => array ( 'name' => '1.5' , )));
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , $expected );
}
2008-06-02 19:22:55 +00:00
/**
* testMoveDown2 method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testMoveDown2 () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 1 , 10 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1.5' ), array ( 'id' ));
$this -> Tree -> moveDown ( $data [ $modelClass ][ 'id' ], 2 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$parent = $this -> Tree -> findByName ( '1. Root' , array ( 'id' ));
$this -> Tree -> id = $parent [ $modelClass ][ 'id' ];
$result = $this -> Tree -> children ( null , true , array ( 'name' ));
2008-05-30 11:40:08 +00:00
$expected = array (
2009-01-15 00:50:01 +00:00
array ( $modelClass => array ( 'name' => '1.1' , )),
array ( $modelClass => array ( 'name' => '1.2' , )),
array ( $modelClass => array ( 'name' => '1.3' , )),
array ( $modelClass => array ( 'name' => '1.4' , )),
array ( $modelClass => array ( 'name' => '1.6' , )),
array ( $modelClass => array ( 'name' => '1.7' , )),
array ( $modelClass => array ( 'name' => '1.5' , )),
array ( $modelClass => array ( 'name' => '1.8' , )),
array ( $modelClass => array ( 'name' => '1.9' , )),
array ( $modelClass => array ( 'name' => '1.10' , )));
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , $expected );
}
2008-06-02 19:22:55 +00:00
/**
* testSaveNoMove method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testSaveNoMove () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 1 , 10 );
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1.5' ), array ( 'id' ));
$this -> Tree -> id = $data [ $modelClass ][ 'id' ];
$this -> Tree -> saveField ( 'name' , 'renamed' );
$parent = $this -> Tree -> findByName ( '1. Root' , array ( 'id' ));
$this -> Tree -> id = $parent [ $modelClass ][ 'id' ];
$result = $this -> Tree -> children ( null , true , array ( 'name' ));
2008-05-30 11:40:08 +00:00
$expected = array (
2009-01-15 00:50:01 +00:00
array ( $modelClass => array ( 'name' => '1.1' , )),
array ( $modelClass => array ( 'name' => '1.2' , )),
array ( $modelClass => array ( 'name' => '1.3' , )),
array ( $modelClass => array ( 'name' => '1.4' , )),
array ( $modelClass => array ( 'name' => 'renamed' , )),
array ( $modelClass => array ( 'name' => '1.6' , )),
array ( $modelClass => array ( 'name' => '1.7' , )),
array ( $modelClass => array ( 'name' => '1.8' , )),
array ( $modelClass => array ( 'name' => '1.9' , )),
array ( $modelClass => array ( 'name' => '1.10' , )));
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , $expected );
}
2008-06-02 19:22:55 +00:00
/**
* testMoveToRootAndMoveUp method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-06-20 20:17:23 +00:00
function testMoveToRootAndMoveUp () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 1 , 1 );
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1.1' ), array ( 'id' ));
$this -> Tree -> id = $data [ $modelClass ][ 'id' ];
$this -> Tree -> save ( array ( $parentField => null ));
$result = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , true );
2008-11-20 13:57:44 +00:00
$this -> Tree -> moveup ();
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> find ( 'all' , array ( 'fields' => 'name' , 'order' => $modelClass . '.' . $leftField . ' ASC' ));
$expected = array ( array ( $modelClass => array ( 'name' => '1.1' )),
2009-01-15 00:50:01 +00:00
array ( $modelClass => array ( 'name' => '1. Root' )));
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , $expected );
}
2008-06-02 19:22:55 +00:00
/**
* testDelete method
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testDelete () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$initialCount = $this -> Tree -> find ( 'count' );
$result = $this -> Tree -> findByName ( '1.1.1' );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$return = $this -> Tree -> delete ( $result [ $modelClass ][ 'id' ]);
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $return , true );
2008-11-20 13:57:44 +00:00
$laterCount = $this -> Tree -> find ( 'count' );
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $initialCount - 1 , $laterCount );
2008-11-20 13:57:44 +00:00
$validTree = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $validTree , true );
2008-11-20 13:57:44 +00:00
$initialCount = $this -> Tree -> find ( 'count' );
$result = $this -> Tree -> findByName ( '1.1' );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$return = $this -> Tree -> delete ( $result [ $modelClass ][ 'id' ]);
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $return , true );
2008-11-20 13:57:44 +00:00
$laterCount = $this -> Tree -> find ( 'count' );
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $initialCount - 2 , $laterCount );
2008-11-20 13:57:44 +00:00
$validTree = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $validTree , true );
}
2008-06-05 15:20:45 +00:00
/**
* testRemove method
2008-06-24 03:16:28 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testRemove () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
$initialCount = $this -> Tree -> find ( 'count' );
$result = $this -> Tree -> findByName ( '1.1' );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$this -> Tree -> removeFromTree ( $result [ $modelClass ][ 'id' ]);
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$laterCount = $this -> Tree -> find ( 'count' );
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $initialCount , $laterCount );
2008-11-20 13:57:44 +00:00
$children = $this -> Tree -> children ( $result [ $modelClass ][ $parentField ], true , array ( 'name' ));
$expects = array ( array ( $modelClass => array ( 'name' => '1.1.1' )),
2009-01-15 00:50:01 +00:00
array ( $modelClass => array ( 'name' => '1.1.2' )),
array ( $modelClass => array ( 'name' => '1.2' )));
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $children , $expects );
2008-11-20 13:57:44 +00:00
$topNodes = $this -> Tree -> children ( false , true , array ( 'name' ));
$expects = array ( array ( $modelClass => array ( 'name' => '1. Root' )),
2009-01-15 00:50:01 +00:00
array ( $modelClass => array ( 'name' => '1.1' )));
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $topNodes , $expects );
2008-11-20 13:57:44 +00:00
$validTree = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $validTree , true );
}
2008-06-05 15:20:45 +00:00
/**
* testRemoveLastTopParent method
2008-06-24 03:16:28 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testRemoveLastTopParent () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$initialCount = $this -> Tree -> find ( 'count' );
$initialTopNodes = $this -> Tree -> childCount ( false );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> findByName ( '1. Root' );
$this -> Tree -> removeFromTree ( $result [ $modelClass ][ 'id' ]);
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$laterCount = $this -> Tree -> find ( 'count' );
$laterTopNodes = $this -> Tree -> childCount ( false );
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $initialCount , $laterCount );
$this -> assertEqual ( $initialTopNodes , $laterTopNodes );
2008-11-20 13:57:44 +00:00
$topNodes = $this -> Tree -> children ( false , true , array ( 'name' ));
$expects = array ( array ( $modelClass => array ( 'name' => '1.1' )),
2009-01-15 00:50:01 +00:00
array ( $modelClass => array ( 'name' => '1.2' )),
array ( $modelClass => array ( 'name' => '1. Root' )));
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $topNodes , $expects );
2008-11-20 13:57:44 +00:00
$validTree = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $validTree , true );
}
2008-06-05 15:20:45 +00:00
/**
2008-08-11 15:54:54 +00:00
* testRemoveNoChildren method
*
* @ return void
* @ access public
*/
function testRemoveNoChildren () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
$initialCount = $this -> Tree -> find ( 'count' );
2008-08-11 15:54:54 +00:00
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> findByName ( '1.1.1' );
$this -> Tree -> removeFromTree ( $result [ $modelClass ][ 'id' ]);
2008-08-11 15:54:54 +00:00
2008-11-20 13:57:44 +00:00
$laterCount = $this -> Tree -> find ( 'count' );
2008-08-11 15:54:54 +00:00
$this -> assertEqual ( $initialCount , $laterCount );
2008-11-20 13:57:44 +00:00
$nodes = $this -> Tree -> find ( 'list' , array ( 'order' => $leftField ));
2008-08-11 15:54:54 +00:00
$expects = array (
1 => '1. Root' ,
2 => '1.1' ,
4 => '1.1.2' ,
5 => '1.2' ,
6 => '1.2.1' ,
7 => '1.2.2' ,
3 => '1.1.1' ,
);
$this -> assertEqual ( $nodes , $expects );
2008-11-20 13:57:44 +00:00
$validTree = $this -> Tree -> verify ();
2008-08-11 15:54:54 +00:00
$this -> assertIdentical ( $validTree , true );
}
/**
2008-06-05 15:20:45 +00:00
* testRemoveAndDelete method
2008-06-24 03:16:28 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testRemoveAndDelete () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$initialCount = $this -> Tree -> find ( 'count' );
$result = $this -> Tree -> findByName ( '1.1' );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$this -> Tree -> removeFromTree ( $result [ $modelClass ][ 'id' ], true );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$laterCount = $this -> Tree -> find ( 'count' );
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $initialCount - 1 , $laterCount );
2008-11-20 13:57:44 +00:00
$children = $this -> Tree -> children ( $result [ $modelClass ][ $parentField ], true , array ( 'name' ), $leftField . ' asc' );
$expects = array ( array ( $modelClass => array ( 'name' => '1.1.1' )),
2009-01-15 00:50:01 +00:00
array ( $modelClass => array ( 'name' => '1.1.2' )),
array ( $modelClass => array ( 'name' => '1.2' )));
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $children , $expects );
2008-11-20 13:57:44 +00:00
$topNodes = $this -> Tree -> children ( false , true , array ( 'name' ));
$expects = array ( array ( $modelClass => array ( 'name' => '1. Root' )));
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $topNodes , $expects );
2008-11-20 13:57:44 +00:00
$validTree = $this -> Tree -> verify ();
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $validTree , true );
}
2008-08-11 15:54:54 +00:00
/**
* testRemoveAndDeleteNoChildren method
*
* @ return void
* @ access public
*/
function testRemoveAndDeleteNoChildren () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
$initialCount = $this -> Tree -> find ( 'count' );
2008-08-11 15:54:54 +00:00
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> findByName ( '1.1.1' );
$this -> Tree -> removeFromTree ( $result [ $modelClass ][ 'id' ], true );
2008-08-11 15:54:54 +00:00
2008-11-20 13:57:44 +00:00
$laterCount = $this -> Tree -> find ( 'count' );
2008-08-11 15:54:54 +00:00
$this -> assertEqual ( $initialCount - 1 , $laterCount );
2008-11-20 13:57:44 +00:00
$nodes = $this -> Tree -> find ( 'list' , array ( 'order' => $leftField ));
2008-08-11 15:54:54 +00:00
$expects = array (
1 => '1. Root' ,
2 => '1.1' ,
4 => '1.1.2' ,
5 => '1.2' ,
6 => '1.2.1' ,
7 => '1.2.2' ,
);
$this -> assertEqual ( $nodes , $expects );
2008-11-20 13:57:44 +00:00
$validTree = $this -> Tree -> verify ();
2008-08-11 15:54:54 +00:00
$this -> assertIdentical ( $validTree , true );
}
2008-06-05 15:20:45 +00:00
/**
* testChildren method
2008-06-24 03:16:28 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testChildren () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1. Root' ));
$this -> Tree -> id = $data [ $modelClass ][ 'id' ];
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$direct = $this -> Tree -> children ( null , true , array ( 'id' , 'name' , $parentField , $leftField , $rightField ));
$expects = array ( array ( $modelClass => array ( 'id' => 2 , 'name' => '1.1' , $parentField => 1 , $leftField => 2 , $rightField => 7 )),
2009-01-15 00:50:01 +00:00
array ( $modelClass => array ( 'id' => 5 , 'name' => '1.2' , $parentField => 1 , $leftField => 8 , $rightField => 13 )));
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $direct , $expects );
2008-11-20 13:57:44 +00:00
$total = $this -> Tree -> children ( null , null , array ( 'id' , 'name' , $parentField , $leftField , $rightField ));
$expects = array ( array ( $modelClass => array ( 'id' => 2 , 'name' => '1.1' , $parentField => 1 , $leftField => 2 , $rightField => 7 )),
2009-01-15 00:50:01 +00:00
array ( $modelClass => array ( 'id' => 3 , 'name' => '1.1.1' , $parentField => 2 , $leftField => 3 , $rightField => 4 )),
array ( $modelClass => array ( 'id' => 4 , 'name' => '1.1.2' , $parentField => 2 , $leftField => 5 , $rightField => 6 )),
array ( $modelClass => array ( 'id' => 5 , 'name' => '1.2' , $parentField => 1 , $leftField => 8 , $rightField => 13 )),
array ( $modelClass => array ( 'id' => 6 , 'name' => '1.2.1' , $parentField => 5 , $leftField => 9 , $rightField => 10 )),
array ( $modelClass => array ( 'id' => 7 , 'name' => '1.2.2' , $parentField => 5 , $leftField => 11 , $rightField => 12 )));
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $total , $expects );
}
2008-06-05 15:20:45 +00:00
/**
* testCountChildren method
2008-06-24 03:16:28 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testCountChildren () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1. Root' ));
$this -> Tree -> id = $data [ $modelClass ][ 'id' ];
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$direct = $this -> Tree -> childCount ( null , true );
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $direct , 2 );
2008-11-20 13:57:44 +00:00
$total = $this -> Tree -> childCount ();
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $total , 6 );
}
2008-06-05 15:20:45 +00:00
/**
* testGetParentNode method
2008-06-24 03:16:28 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testGetParentNode () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1.2.2' ));
$this -> Tree -> id = $data [ $modelClass ][ 'id' ];
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> getparentNode ( null , array ( 'name' ));
$expects = array ( $modelClass => array ( 'name' => '1.2' ));
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , $expects );
}
2008-06-05 15:20:45 +00:00
/**
* testGetPath method
2008-06-24 03:16:28 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testGetPath () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1.2.2' ));
$this -> Tree -> id = $data [ $modelClass ][ 'id' ];
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> getPath ( null , array ( 'name' ));
$expects = array ( array ( $modelClass => array ( 'name' => '1. Root' )),
2009-01-15 00:50:01 +00:00
array ( $modelClass => array ( 'name' => '1.2' )),
array ( $modelClass => array ( 'name' => '1.2.2' )));
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $result , $expects );
}
2008-06-05 15:20:45 +00:00
/**
* testNoAmbiguousColumn method
2008-06-24 03:16:28 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testNoAmbiguousColumn () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> bindModel ( array ( 'belongsTo' => array ( 'Dummy' =>
2009-01-15 00:50:01 +00:00
array ( 'className' => $modelClass , 'foreignKey' => $parentField , 'conditions' => array ( 'Dummy.id' => null )))), false );
2008-11-20 13:57:44 +00:00
$this -> Tree -> initialize ( 2 , 2 );
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1. Root' ));
$this -> Tree -> id = $data [ $modelClass ][ 'id' ];
2009-09-10 01:15:22 +00:00
$direct = $this -> Tree -> children ( null , true , array ( 'id' , 'name' , $parentField , $leftField , $rightField ));
2008-11-20 13:57:44 +00:00
$expects = array ( array ( $modelClass => array ( 'id' => 2 , 'name' => '1.1' , $parentField => 1 , $leftField => 2 , $rightField => 7 )),
2009-01-15 00:50:01 +00:00
array ( $modelClass => array ( 'id' => 5 , 'name' => '1.2' , $parentField => 1 , $leftField => 8 , $rightField => 13 )));
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $direct , $expects );
2009-09-10 01:15:22 +00:00
$total = $this -> Tree -> children ( null , null , array ( 'id' , 'name' , $parentField , $leftField , $rightField ));
2008-05-30 11:40:08 +00:00
$expects = array (
2008-11-20 13:57:44 +00:00
array ( $modelClass => array ( 'id' => 2 , 'name' => '1.1' , $parentField => 1 , $leftField => 2 , $rightField => 7 )),
array ( $modelClass => array ( 'id' => 3 , 'name' => '1.1.1' , $parentField => 2 , $leftField => 3 , $rightField => 4 )),
array ( $modelClass => array ( 'id' => 4 , 'name' => '1.1.2' , $parentField => 2 , $leftField => 5 , $rightField => 6 )),
array ( $modelClass => array ( 'id' => 5 , 'name' => '1.2' , $parentField => 1 , $leftField => 8 , $rightField => 13 )),
array ( $modelClass => array ( 'id' => 6 , 'name' => '1.2.1' , $parentField => 5 , $leftField => 9 , $rightField => 10 )),
array ( $modelClass => array ( 'id' => 7 , 'name' => '1.2.2' , $parentField => 5 , $leftField => 11 , $rightField => 12 ))
2008-05-30 11:40:08 +00:00
);
$this -> assertEqual ( $total , $expects );
}
2008-06-05 15:20:45 +00:00
/**
* testReorderTree method
2008-06-24 03:16:28 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testReorderTree () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 3 , 3 );
$nodes = $this -> Tree -> find ( 'list' , array ( 'order' => $leftField ));
2008-06-24 03:16:28 +00:00
2008-11-20 13:57:44 +00:00
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1.1' ), array ( 'id' ));
$this -> Tree -> moveDown ( $data [ $modelClass ][ 'id' ]);
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1.2.1' ), array ( 'id' ));
$this -> Tree -> moveDown ( $data [ $modelClass ][ 'id' ]);
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1.3.2.2' ), array ( 'id' ));
$this -> Tree -> moveDown ( $data [ $modelClass ][ 'id' ]);
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$unsortedNodes = $this -> Tree -> find ( 'list' , array ( 'order' => $leftField ));
2008-05-30 11:40:08 +00:00
$this -> assertNotIdentical ( $nodes , $unsortedNodes );
2008-11-20 13:57:44 +00:00
$this -> Tree -> reorder ();
$sortedNodes = $this -> Tree -> find ( 'list' , array ( 'order' => $leftField ));
2008-05-30 11:40:08 +00:00
$this -> assertIdentical ( $nodes , $sortedNodes );
}
2008-06-05 15:20:45 +00:00
/**
* testGenerateTreeListWithSelfJoin method
2008-06-24 03:16:28 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testGenerateTreeListWithSelfJoin () {
2008-11-20 13:57:44 +00:00
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> bindModel ( array ( 'belongsTo' => array ( 'Dummy' =>
array ( 'className' => $modelClass , 'foreignKey' => $parentField , 'conditions' => array ( 'Dummy.id' => null )))), false );
$this -> Tree -> initialize ( 2 , 2 );
2008-05-30 11:40:08 +00:00
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> generateTreeList ();
2008-05-30 11:40:08 +00:00
$expected = array ( 1 => '1. Root' , 2 => '_1.1' , 3 => '__1.1.1' , 4 => '__1.1.2' , 5 => '_1.2' , 6 => '__1.2.1' , 7 => '__1.2.2' );
$this -> assertIdentical ( $result , $expected );
}
2008-11-20 13:57:44 +00:00
/**
* testArraySyntax method
*
* @ access public
* @ return void
*/
function testArraySyntax () {
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 3 , 3 );
$this -> assertIdentical ( $this -> Tree -> childCount ( 2 ), $this -> Tree -> childCount ( array ( 'id' => 2 )));
$this -> assertIdentical ( $this -> Tree -> getParentNode ( 2 ), $this -> Tree -> getParentNode ( array ( 'id' => 2 )));
$this -> assertIdentical ( $this -> Tree -> getPath ( 4 ), $this -> Tree -> getPath ( array ( 'id' => 4 )));
}
}
/**
2009-03-18 17:55:58 +00:00
* ScopedTreeTest class
2008-11-20 13:57:44 +00:00
*
* @ package cake
* @ subpackage cake . tests . cases . libs . model . behaviors
*/
2009-03-18 17:55:58 +00:00
class ScopedTreeTest extends NumberTreeTest {
2008-11-20 13:57:44 +00:00
/**
* settings property
*
* @ var array
* @ access public
*/
var $settings = array (
'modelClass' => 'FlagTree' ,
'leftField' => 'lft' ,
'rightField' => 'rght' ,
'parentField' => 'parent_id'
);
/**
* fixtures property
*
* @ var array
* @ access public
*/
2009-05-26 17:17:57 +00:00
var $fixtures = array ( 'core.flag_tree' , 'core.ad' , 'core.campaign' , 'core.translate' , 'core.number_tree_two' );
2008-11-20 13:57:44 +00:00
/**
* testStringScope method
*
* @ access public
* @ return void
*/
function testStringScope () {
$this -> Tree =& new FlagTree ();
$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 -> assertEqual ( $result , $expected );
$this -> Tree -> Behaviors -> attach ( 'Tree' , array ( 'scope' => 'FlagTree.flag = 1' ));
$this -> assertEqual ( $this -> Tree -> children (), array ());
$this -> Tree -> id = 1 ;
$this -> Tree -> Behaviors -> attach ( '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 -> assertEqual ( $result , $expected );
$this -> assertTrue ( $this -> Tree -> delete ());
$this -> assertEqual ( $this -> Tree -> find ( 'count' ), 11 );
}
/**
* testArrayScope method
*
* @ access public
* @ return void
*/
function testArrayScope () {
$this -> Tree =& new FlagTree ();
$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 -> assertEqual ( $result , $expected );
$this -> Tree -> Behaviors -> attach ( 'Tree' , array ( 'scope' => array ( 'FlagTree.flag' => 1 )));
$this -> assertEqual ( $this -> Tree -> children (), array ());
$this -> Tree -> id = 1 ;
$this -> Tree -> Behaviors -> attach ( '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 -> assertEqual ( $result , $expected );
$this -> assertTrue ( $this -> Tree -> delete ());
$this -> assertEqual ( $this -> Tree -> find ( 'count' ), 11 );
}
2008-06-05 15:20:45 +00:00
/**
* testMoveUpWithScope method
2008-06-24 03:16:28 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testMoveUpWithScope () {
$this -> Ad =& new Ad ();
$this -> Ad -> Behaviors -> attach ( 'Tree' , array ( 'scope' => 'Campaign' ));
$this -> Ad -> moveUp ( 6 );
2008-06-24 03:16:28 +00:00
2008-05-30 11:40:08 +00:00
$this -> Ad -> id = 4 ;
$result = $this -> Ad -> children ();
$this -> assertEqual ( Set :: extract ( '/Ad/id' , $result ), array ( 6 , 5 ));
$this -> assertEqual ( Set :: extract ( '/Campaign/id' , $result ), array ( 2 , 2 ));
}
2008-06-05 15:20:45 +00:00
/**
* testMoveDownWithScope method
2008-06-24 03:16:28 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testMoveDownWithScope () {
$this -> Ad =& new Ad ();
2008-06-20 20:17:23 +00:00
$this -> Ad -> Behaviors -> attach ( 'Tree' , array ( 'scope' => 'Campaign' ));
2008-05-30 11:40:08 +00:00
$this -> Ad -> moveDown ( 6 );
$this -> Ad -> id = 4 ;
$result = $this -> Ad -> children ();
$this -> assertEqual ( Set :: extract ( '/Ad/id' , $result ), array ( 5 , 6 ));
$this -> assertEqual ( Set :: extract ( '/Campaign/id' , $result ), array ( 2 , 2 ));
}
2008-06-20 20:17:23 +00:00
/**
* Tests the interaction ( non - interference ) between TreeBehavior and other behaviors with respect
* to callback hooks
2008-06-24 03:16:28 +00:00
*
2008-06-20 20:17:23 +00:00
* @ access public
* @ return void
*/
function testTranslatingTree () {
2008-11-20 13:57:44 +00:00
$this -> Tree =& new FlagTree ();
$this -> Tree -> cacheQueries = false ;
$this -> Tree -> translateModel = 'TranslateTreeTestModel' ;
$this -> Tree -> Behaviors -> attach ( 'Translate' , array ( 'name' ));
2008-06-20 20:17:23 +00:00
//Save
2008-11-20 13:57:44 +00:00
$this -> Tree -> locale = 'eng' ;
2008-06-20 20:17:23 +00:00
$data = array ( 'FlagTree' => array (
'name' => 'name #1' ,
'locale' => 'eng' ,
'parent_id' => null ,
));
2008-11-20 13:57:44 +00:00
$this -> Tree -> save ( $data );
$result = $this -> Tree -> find ( 'all' );
2008-06-20 20:17:23 +00:00
$expected = array ( array ( 'FlagTree' => array (
'id' => 1 ,
'name' => 'name #1' ,
'parent_id' => null ,
'lft' => 1 ,
'rght' => 2 ,
'flag' => 0 ,
'locale' => 'eng' ,
)));
$this -> assertEqual ( $result , $expected );
//update existing record, same locale
2008-11-20 13:57:44 +00:00
$this -> Tree -> create ();
2008-06-20 20:17:23 +00:00
$data [ 'FlagTree' ][ 'name' ] = 'Named 2' ;
2008-11-20 13:57:44 +00:00
$this -> Tree -> id = 1 ;
$this -> Tree -> save ( $data );
$result = $this -> Tree -> find ( 'all' );
2008-06-20 20:17:23 +00:00
$expected = array ( array ( 'FlagTree' => array (
'id' => 1 ,
'name' => 'Named 2' ,
'parent_id' => null ,
'lft' => 1 ,
'rght' => 2 ,
'flag' => 0 ,
'locale' => 'eng' ,
)));
$this -> assertEqual ( $result , $expected );
//update different locale, same record
2008-11-20 13:57:44 +00:00
$this -> Tree -> create ();
$this -> Tree -> locale = 'deu' ;
$this -> Tree -> id = 1 ;
2008-06-20 20:17:23 +00:00
$data = array ( 'FlagTree' => array (
'id' => 1 ,
'parent_id' => null ,
'name' => 'namen #1' ,
'locale' => 'deu' ,
));
2008-11-20 13:57:44 +00:00
$this -> Tree -> save ( $data );
2008-06-20 20:17:23 +00:00
2008-11-20 13:57:44 +00:00
$this -> Tree -> locale = 'deu' ;
$result = $this -> Tree -> find ( 'all' );
2008-06-20 20:17:23 +00:00
$expected = array ( array ( 'FlagTree' => array (
'id' => 1 ,
'name' => 'namen #1' ,
'parent_id' => null ,
'lft' => 1 ,
'rght' => 2 ,
'flag' => 0 ,
'locale' => 'deu' ,
)));
$this -> assertEqual ( $result , $expected );
//Save with bindTranslation
2008-11-20 13:57:44 +00:00
$this -> Tree -> locale = 'eng' ;
2008-06-20 20:17:23 +00:00
$data = array (
'name' => array ( 'eng' => 'New title' , 'spa' => 'Nuevo leyenda' ),
'parent_id' => null
);
2008-11-20 13:57:44 +00:00
$this -> Tree -> create ( $data );
$this -> Tree -> save ();
2008-06-20 20:17:23 +00:00
2008-11-20 13:57:44 +00:00
$this -> Tree -> unbindTranslation ();
2008-06-20 20:17:23 +00:00
$translations = array ( 'name' => 'Name' );
2008-11-20 13:57:44 +00:00
$this -> Tree -> bindTranslation ( $translations , false );
$this -> Tree -> locale = array ( 'eng' , 'spa' );
2008-06-20 20:17:23 +00:00
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> read ();
2008-06-20 20:17:23 +00:00
$expected = array (
2008-06-21 02:33:04 +00:00
'FlagTree' => array ( 'id' => 2 , 'parent_id' => null , 'locale' => 'eng' , 'name' => 'New title' , 'flag' => 0 , 'lft' => 3 , 'rght' => 4 ),
2008-06-20 20:17:23 +00:00
'Name' => array (
2009-01-15 00:50:01 +00:00
array ( 'id' => 21 , 'locale' => 'eng' , 'model' => 'FlagTree' , 'foreign_key' => 2 , 'field' => 'name' , 'content' => 'New title' ),
array ( 'id' => 22 , 'locale' => 'spa' , 'model' => 'FlagTree' , 'foreign_key' => 2 , 'field' => 'name' , 'content' => 'Nuevo leyenda' )
2008-06-20 20:17:23 +00:00
),
);
$this -> assertEqual ( $result , $expected );
2008-05-30 11:40:08 +00:00
}
2009-05-26 17:17:57 +00:00
/**
* testGenerateTreeListWithSelfJoin method
*
* @ return void
* @ access public
*/
function testAliasesWithScopeInTwoTreeAssociations () {
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
$this -> TreeTwo =& new NumberTreeTwo ();
$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 -> attach ( 'Tree' , array (
'scope' => 'FirstTree'
));
$data = array (
'NumberTreeTwo' => array (
'name' => 'First' ,
'number_tree_id' => $record [ 'FlagTree' ][ 'id' ]
)
);
$this -> TreeTwo -> create ();
$this -> assertTrue ( $this -> TreeTwo -> save ( $data ));
$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 -> assertEqual ( $result , $expected );
}
2008-11-20 13:57:44 +00:00
}
/**
2009-03-18 17:55:58 +00:00
* AfterTreeTest class
2008-11-20 13:57:44 +00:00
*
* @ package cake
* @ subpackage cake . tests . cases . libs . model . behaviors
*/
2009-03-18 17:55:58 +00:00
class AfterTreeTest extends NumberTreeTest {
2008-11-20 13:57:44 +00:00
/**
* settings property
*
* @ var array
* @ access public
*/
var $settings = array (
'modelClass' => 'AfterTree' ,
'leftField' => 'lft' ,
'rightField' => 'rght' ,
'parentField' => 'parent_id'
);
/**
* fixtures property
*
* @ var array
* @ access public
*/
var $fixtures = array ( 'core.after_tree' );
2008-09-09 18:42:18 +00:00
/**
* Tests the afterSave callback in the model
*
* @ access public
* @ return void
*/
function testAftersaveCallback () {
2008-11-20 13:57:44 +00:00
$this -> Tree =& new AfterTree ();
2008-09-09 18:42:18 +00:00
$expected = array ( 'AfterTree' => array ( 'name' => 'Six and One Half Changed in AfterTree::afterSave() but not in database' , 'parent_id' => 6 , 'lft' => 11 , 'rght' => 12 ));
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> save ( array ( 'AfterTree' => array ( 'name' => 'Six and One Half' , 'parent_id' => 6 )));
2008-09-09 18:42:18 +00:00
$this -> assertEqual ( $result , $expected );
$expected = array ( 'AfterTree' => array ( 'name' => 'Six and One Half' , 'parent_id' => 6 , 'lft' => 11 , 'rght' => 12 , 'id' => 8 ));
2008-11-20 13:57:44 +00:00
$result = $this -> Tree -> find ( 'all' );
2008-09-09 18:42:18 +00:00
$this -> assertEqual ( $result [ 7 ], $expected );
}
2008-05-30 11:40:08 +00:00
}
2008-11-20 13:57:44 +00:00
/**
2009-03-18 17:55:58 +00:00
* UnconventionalTreeTest class
2008-11-20 13:57:44 +00:00
*
* @ package cake
* @ subpackage cake . tests . cases . libs . model . behaviors
*/
2009-03-18 17:55:58 +00:00
class UnconventionalTreeTest extends NumberTreeTest {
2008-11-20 13:57:44 +00:00
/**
* settings property
*
* @ var array
* @ access public
*/
var $settings = array (
'modelClass' => 'UnconventionalTree' ,
'leftField' => 'left' ,
'rightField' => 'right' ,
'parentField' => 'join'
);
/**
* fixtures property
*
* @ var array
* @ access public
*/
var $fixtures = array ( 'core.unconventional_tree' );
2008-11-20 14:03:41 +00:00
}
2009-01-14 23:40:47 +00:00
/**
2009-03-18 17:55:58 +00:00
* UuidTreeTest class
2009-01-14 23:40:47 +00:00
*
* @ package cake
* @ subpackage cake . tests . cases . libs . model . behaviors
*/
2009-03-18 17:55:58 +00:00
class UuidTreeTest extends NumberTreeTest {
2009-01-14 23:40:47 +00:00
/**
* settings property
*
* @ var array
* @ access public
*/
var $settings = array (
'modelClass' => 'UuidTree' ,
'leftField' => 'lft' ,
'rightField' => 'rght' ,
'parentField' => 'parent_id'
);
/**
* fixtures property
*
* @ var array
* @ access public
*/
var $fixtures = array ( 'core.uuid_tree' );
2009-01-15 00:50:01 +00:00
/**
* testMovePromote method
*
* @ return void
* @ access public
*/
function testMovePromote () {
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
$this -> Tree -> id = null ;
$parent = $this -> Tree -> find ( array ( $modelClass . '.name' => '1. Root' ));
$parent_id = $parent [ $modelClass ][ 'id' ];
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1.1.1' ), array ( 'id' ));
$this -> Tree -> id = $data [ $modelClass ][ 'id' ];
$this -> Tree -> saveField ( $parentField , $parent_id );
$direct = $this -> Tree -> children ( $parent_id , true , array ( 'name' , $leftField , $rightField ));
$expects = 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 -> assertEqual ( $direct , $expects );
$validTree = $this -> Tree -> verify ();
$this -> assertIdentical ( $validTree , true );
}
/**
* testMoveWithWhitelist method
*
* @ return void
* @ access public
*/
function testMoveWithWhitelist () {
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
$this -> Tree -> id = null ;
$parent = $this -> Tree -> find ( array ( $modelClass . '.name' => '1. Root' ));
$parent_id = $parent [ $modelClass ][ 'id' ];
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1.1.1' ), array ( 'id' ));
$this -> Tree -> id = $data [ $modelClass ][ 'id' ];
$this -> Tree -> whitelist = array ( $parentField , 'name' , 'description' );
$this -> Tree -> saveField ( $parentField , $parent_id );
$result = $this -> Tree -> children ( $parent_id , 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 -> assertEqual ( $result , $expected );
$this -> assertTrue ( $this -> Tree -> verify ());
}
/**
* testRemoveNoChildren method
*
* @ return void
* @ access public
*/
function testRemoveNoChildren () {
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$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 -> assertEqual ( $initialCount , $laterCount );
$nodes = $this -> Tree -> find ( 'list' , array ( 'order' => $leftField ));
$expects = array (
'1. Root' ,
'1.1' ,
'1.1.2' ,
'1.2' ,
'1.2.1' ,
'1.2.2' ,
'1.1.1' ,
);
$this -> assertEqual ( array_values ( $nodes ), $expects );
$validTree = $this -> Tree -> verify ();
$this -> assertIdentical ( $validTree , true );
}
/**
* testRemoveAndDeleteNoChildren method
*
* @ return void
* @ access public
*/
function testRemoveAndDeleteNoChildren () {
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$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 -> assertEqual ( $initialCount - 1 , $laterCount );
$nodes = $this -> Tree -> find ( 'list' , array ( 'order' => $leftField ));
$expects = array (
'1. Root' ,
'1.1' ,
'1.1.2' ,
'1.2' ,
'1.2.1' ,
'1.2.2' ,
);
$this -> assertEqual ( array_values ( $nodes ), $expects );
$validTree = $this -> Tree -> verify ();
$this -> assertIdentical ( $validTree , true );
}
/**
* testChildren method
*
* @ return void
* @ access public
*/
function testChildren () {
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$this -> Tree -> initialize ( 2 , 2 );
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1. Root' ));
2009-09-10 01:15:22 +00:00
$this -> Tree -> id = $data [ $modelClass ][ 'id' ];
2009-01-15 00:50:01 +00:00
$direct = $this -> Tree -> children ( null , true , array ( 'name' , $leftField , $rightField ));
$expects = array ( array ( $modelClass => array ( 'name' => '1.1' , $leftField => 2 , $rightField => 7 )),
array ( $modelClass => array ( 'name' => '1.2' , $leftField => 8 , $rightField => 13 )));
$this -> assertEqual ( $direct , $expects );
$total = $this -> Tree -> children ( null , null , array ( 'name' , $leftField , $rightField ));
$expects = 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 -> assertEqual ( $total , $expects );
}
/**
* testNoAmbiguousColumn method
*
* @ return void
* @ access public
*/
function testNoAmbiguousColumn () {
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
2009-09-10 01:15:22 +00:00
$this -> Tree -> initialize ( 2 , 2 );
2009-01-15 00:50:01 +00:00
$this -> Tree -> bindModel ( array ( 'belongsTo' => array ( 'Dummy' =>
array ( 'className' => $modelClass , 'foreignKey' => $parentField , 'conditions' => array ( 'Dummy.id' => null )))), false );
$data = $this -> Tree -> find ( array ( $modelClass . '.name' => '1. Root' ));
2009-09-10 01:15:22 +00:00
$this -> Tree -> id = $data [ $modelClass ][ 'id' ];
2009-01-15 00:50:01 +00:00
2009-09-10 01:15:22 +00:00
$direct = $this -> Tree -> children ( null , true , array ( 'name' , $leftField , $rightField ));
2009-01-15 00:50:01 +00:00
$expects = array ( array ( $modelClass => array ( 'name' => '1.1' , $leftField => 2 , $rightField => 7 )),
array ( $modelClass => array ( 'name' => '1.2' , $leftField => 8 , $rightField => 13 )));
$this -> assertEqual ( $direct , $expects );
2009-09-10 01:15:22 +00:00
$total = $this -> Tree -> children ( null , null , array ( 'name' , $leftField , $rightField ));
2009-01-15 00:50:01 +00:00
$expects = 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 -> assertEqual ( $total , $expects );
}
/**
* testGenerateTreeListWithSelfJoin method
*
* @ return void
* @ access public
*/
function testGenerateTreeListWithSelfJoin () {
extract ( $this -> settings );
$this -> Tree =& new $modelClass ();
$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 -> assertIdentical ( array_values ( $result ), $expected );
}
2009-01-14 23:40:47 +00:00
}
2008-11-20 14:03:41 +00:00
?>