2008-05-30 11:40:08 +00:00
< ? php
/* SVN FILE: $Id$ */
/**
* Short description for file .
*
* Long description for file
*
* PHP versions 4 and 5
*
* CakePHP ( tm ) Tests < https :// trac . cakephp . org / wiki / Developement / TestSuite >
* Copyright 2005 - 2008 , Cake Software Foundation , Inc .
* 1785 E . Sahara Avenue , Suite 490 - 204
* Las Vegas , Nevada 89104
*
* Licensed under The Open Group Test Suite License
* Redistributions of files must retain the above copyright notice .
*
* @ filesource
* @ copyright Copyright 2005 - 2008 , Cake Software Foundation , Inc .
* @ link https :// trac . cakephp . org / wiki / Developement / TestSuite CakePHP ( tm ) Tests
* @ package cake . tests
* @ 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-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
/**
* NumberTreeCase class
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ package cake
* @ subpackage cake . tests . cases . libs . model . behaviors
*/
2008-05-30 11:40:08 +00:00
class NumberTreeCase extends CakeTestCase {
2008-06-02 19:22:55 +00:00
/**
* fixtures property
2008-06-24 03:16:28 +00:00
*
2008-06-02 19:22:55 +00:00
* @ var array
* @ access public
*/
2008-06-20 20:17:23 +00:00
var $fixtures = array (
2008-09-09 18:42:18 +00:00
'core.number_tree' , 'core.flag_tree' , 'core.campaign' , 'core.ad' , 'core.translate' , 'core.after_tree'
2008-06-20 20:17:23 +00:00
);
2008-06-02 19:22:55 +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-05-30 11:40:08 +00:00
function testInitialize () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
2008-06-24 03:16:28 +00:00
2008-05-30 11:40:08 +00:00
$result = $this -> NumberTree -> find ( 'count' );
$this -> assertEqual ( $result , 7 );
2008-06-24 03:16:28 +00:00
2008-05-30 11:40:08 +00:00
$validTree = $this -> NumberTree -> verify ();
$this -> assertIdentical ( $validTree , true );
}
2008-06-02 19:22:55 +00:00
/**
* testStringScope 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 testStringScope () {
$this -> FlagTree =& new FlagTree ();
$this -> FlagTree -> initialize ( 2 , 3 );
$this -> FlagTree -> id = 1 ;
$this -> FlagTree -> saveField ( 'flag' , 1 );
$this -> FlagTree -> id = 2 ;
$this -> FlagTree -> saveField ( 'flag' , 1 );
$result = $this -> FlagTree -> 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 -> FlagTree -> Behaviors -> attach ( 'Tree' , array ( 'scope' => 'FlagTree.flag = 1' ));
$this -> assertEqual ( $this -> FlagTree -> children (), array ());
$this -> FlagTree -> id = 1 ;
$this -> FlagTree -> Behaviors -> attach ( 'Tree' , array ( 'scope' => 'FlagTree.flag = 1' ));
$result = $this -> FlagTree -> 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 -> FlagTree -> delete ());
$this -> assertEqual ( $this -> FlagTree -> find ( 'count' ), 11 );
}
2008-06-02 19:22:55 +00:00
/**
* testArrayScope 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 testArrayScope () {
$this -> FlagTree =& new FlagTree ();
$this -> FlagTree -> initialize ( 2 , 3 );
$this -> FlagTree -> id = 1 ;
$this -> FlagTree -> saveField ( 'flag' , 1 );
$this -> FlagTree -> id = 2 ;
$this -> FlagTree -> saveField ( 'flag' , 1 );
$result = $this -> FlagTree -> 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 -> FlagTree -> Behaviors -> attach ( 'Tree' , array ( 'scope' => array ( 'FlagTree.flag' => 1 )));
$this -> assertEqual ( $this -> FlagTree -> children (), array ());
$this -> FlagTree -> id = 1 ;
$this -> FlagTree -> Behaviors -> attach ( 'Tree' , array ( 'scope' => array ( 'FlagTree.flag' => 1 )));
$result = $this -> FlagTree -> children ();
$expected = array ( array ( 'FlagTree' => array ( 'id' => '2' , 'name' => '1.1' , 'parent_id' => '1' , 'lft' => '2' , 'rght' => '9' , 'flag' => '1' )));
$this -> assertEqual ( $result , $expected );
2008-05-31 12:36:38 +00:00
$this -> assertTrue ( $this -> FlagTree -> delete ());
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $this -> FlagTree -> find ( 'count' ), 11 );
}
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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$result = $this -> NumberTree -> findByName ( '1.1' );
$save [ 'NumberTree' ][ 'id' ] = $result [ 'NumberTree' ][ 'id' ];
$save [ 'NumberTree' ][ 'lft' ] = 0 ;
$this -> NumberTree -> save ( $save );
$result = $this -> NumberTree -> verify ();
$this -> assertNotIdentical ( $result , true );
$result = $this -> NumberTree -> recover ();
$this -> assertIdentical ( $result , true );
$result = $this -> NumberTree -> verify ();
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$result = $this -> NumberTree -> findByName ( '1.1' );
$save [ 'NumberTree' ][ 'id' ] = $result [ 'NumberTree' ][ 'id' ];
$save [ 'NumberTree' ][ 'rght' ] = 0 ;
$this -> NumberTree -> save ( $save );
$result = $this -> NumberTree -> verify ();
$this -> assertNotIdentical ( $result , true );
$result = $this -> NumberTree -> recover ();
$this -> assertIdentical ( $result , true );
$result = $this -> NumberTree -> verify ();
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$result = $this -> NumberTree -> findByName ( '1.1' );
// Bypass behavior and any other logic
$this -> NumberTree -> updateAll ( array ( 'parent_id' => null ), array ( 'id' => $result [ 'NumberTree' ][ 'id' ]));
$result = $this -> NumberTree -> verify ();
$this -> assertNotIdentical ( $result , true );
$result = $this -> NumberTree -> recover ();
$this -> assertIdentical ( $result , true );
$result = $this -> NumberTree -> verify ();
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$result = $this -> NumberTree -> findByName ( '1.1' );
$this -> NumberTree -> updateAll ( array ( 'parent_id' => 999999 ), array ( 'id' => $result [ 'NumberTree' ][ 'id' ]));
$result = $this -> NumberTree -> verify ();
$this -> assertNotIdentical ( $result , true );
$result = $this -> NumberTree -> recover ( 'MPTT' );
$this -> assertIdentical ( $result , true );
$result = $this -> NumberTree -> verify ();
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$result = $this -> NumberTree -> findByName ( '1.1' );
$this -> NumberTree -> updateAll ( array ( 'parent_id' => 999999 ), array ( 'id' => $result [ 'NumberTree' ][ 'id' ]));
$result = $this -> NumberTree -> verify ();
$this -> assertNotIdentical ( $result , true );
$result = $this -> NumberTree -> recover ();
$this -> assertIdentical ( $result , true );
$result = $this -> NumberTree -> verify ();
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$this -> NumberTree -> updateAll ( array ( 'parent_id' => null ));
$result = $this -> NumberTree -> verify ();
$this -> assertNotIdentical ( $result , true );
$result = $this -> NumberTree -> recover ();
$this -> assertIdentical ( $result , true );
$result = $this -> NumberTree -> verify ();
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$this -> NumberTree -> updateAll ( array ( 'lft' => 0 , 'rght' => 0 ));
$result = $this -> NumberTree -> verify ();
$this -> assertNotIdentical ( $result , true );
$this -> NumberTree -> recover ();
$result = $this -> NumberTree -> verify ();
$this -> assertIdentical ( $result , true );
}
2008-06-22 12:27:54 +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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 1 , 3 );
$result = $this -> NumberTree -> findByName ( '1.1' );
$this -> NumberTree -> updateAll ( array ( 'rght' => $result [ 'NumberTree' ][ 'lft' ]), array ( 'id' => $result [ 'NumberTree' ][ 'id' ]));
$this -> NumberTree -> updateAll ( array ( 'lft' => 'lft-1' ), array ( 'lft >' => $result [ 'NumberTree' ][ 'lft' ]));
$this -> NumberTree -> updateAll ( array ( 'rght' => 'rght-1' ), array ( 'rght >' => $result [ 'NumberTree' ][ 'lft' ]));
$result = $this -> NumberTree -> verify ();
$this -> assertNotIdentical ( $result , true );
$result = $this -> NumberTree -> recover ();
$this -> assertTrue ( $result );
$result = $this -> NumberTree -> verify ();
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$this -> NumberTree -> save ( array ( 'NumberTree' => array ( 'name' => 'testAddOrphan' , 'parent_id' => null )));
$result = $this -> NumberTree -> find ( null , array ( 'name' , 'parent_id' ), 'NumberTree.lft desc' );
$expected = array ( 'NumberTree' => array ( 'name' => 'testAddOrphan' , 'parent_id' => null ));
$this -> assertEqual ( $result , $expected );
$validTree = $this -> NumberTree -> verify ();
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$data = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1.1' ), array ( 'id' ));
$initialCount = $this -> NumberTree -> find ( 'count' );
$this -> NumberTree -> create ();
$result = $this -> NumberTree -> save ( array ( 'NumberTree' => array ( 'name' => 'testAddMiddle' , 'parent_id' => $data [ 'NumberTree' ][ 'id' ])));
$expected = array_merge ( array ( 'NumberTree' => array ( 'name' => 'testAddMiddle' , 'parent_id' => '2' )), $result );
$this -> assertIdentical ( $result , $expected );
$laterCount = $this -> NumberTree -> find ( 'count' );
$laterCount = $this -> NumberTree -> find ( 'count' );
$this -> assertEqual ( $initialCount + 1 , $laterCount );
$children = $this -> NumberTree -> children ( $data [ 'NumberTree' ][ 'id' ], true , array ( 'name' ));
$expects = array ( array ( 'NumberTree' => array ( 'name' => '1.1.1' )),
array ( 'NumberTree' => array ( 'name' => '1.1.2' )),
array ( 'NumberTree' => array ( 'name' => 'testAddMiddle' )));
$this -> assertIdentical ( $children , $expects );
$validTree = $this -> NumberTree -> verify ();
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$this -> NumberTree -> id = null ;
$initialCount = $this -> NumberTree -> find ( 'count' );
//$this->expectError('Trying to save a node under a none-existant node in TreeBehavior::beforeSave');
$saveSuccess = $this -> NumberTree -> save ( array ( 'NumberTree' => array ( 'name' => 'testAddInvalid' , 'parent_id' => 99999 )));
$this -> assertIdentical ( $saveSuccess , false );
$laterCount = $this -> NumberTree -> find ( 'count' );
$this -> assertIdentical ( $initialCount , $laterCount );
$validTree = $this -> NumberTree -> 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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$this -> NumberTree -> id = null ;
$parent = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1. Root' ));
$parent_id = $parent [ 'NumberTree' ][ 'id' ];
$data = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1.1.1' ), array ( 'id' ));
$this -> NumberTree -> id = $data [ 'NumberTree' ][ 'id' ];
$this -> NumberTree -> saveField ( 'parent_id' , $parent_id );
$direct = $this -> NumberTree -> children ( $parent_id , true , array ( 'id' , 'name' , 'parent_id' , 'lft' , 'rght' ));
$expects = array ( array ( 'NumberTree' => array ( 'id' => 2 , 'name' => '1.1' , 'parent_id' => 1 , 'lft' => 2 , 'rght' => 5 )),
array ( 'NumberTree' => array ( 'id' => 5 , 'name' => '1.2' , 'parent_id' => 1 , 'lft' => 6 , 'rght' => 11 )),
array ( 'NumberTree' => array ( 'id' => 3 , 'name' => '1.1.1' , 'parent_id' => 1 , 'lft' => 12 , 'rght' => 13 )));
$this -> assertEqual ( $direct , $expects );
$validTree = $this -> NumberTree -> verify ();
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$this -> NumberTree -> id = null ;
$parent = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1. Root' ));
$parent_id = $parent [ 'NumberTree' ][ 'id' ];
$data = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1.1.1' ), array ( 'id' ));
$this -> NumberTree -> id = $data [ 'NumberTree' ][ 'id' ];
$this -> NumberTree -> whitelist = array ( 'parent_id' , 'name' , 'description' );
$this -> NumberTree -> saveField ( 'parent_id' , $parent_id );
$result = $this -> NumberTree -> children ( $parent_id , true , array ( 'id' , 'name' , 'parent_id' , 'lft' , 'rght' ));
$expected = array ( array ( 'NumberTree' => array ( 'id' => 2 , 'name' => '1.1' , 'parent_id' => 1 , 'lft' => 2 , 'rght' => 5 )),
array ( 'NumberTree' => array ( 'id' => 5 , 'name' => '1.2' , 'parent_id' => 1 , 'lft' => 6 , 'rght' => 11 )),
array ( 'NumberTree' => array ( 'id' => 3 , 'name' => '1.1.1' , 'parent_id' => 1 , 'lft' => 12 , 'rght' => 13 )));
$this -> assertEqual ( $result , $expected );
$this -> assertTrue ( $this -> NumberTree -> verify ());
}
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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$this -> NumberTree -> whitelist = array ( 'name' , 'parent_id' );
$this -> NumberTree -> save ( array ( 'NumberTree' => array ( 'name' => 'testAddOrphan' , 'parent_id' => null )));
$result = $this -> NumberTree -> findByName ( 'testAddOrphan' , array ( 'name' , 'parent_id' , 'lft' , 'rght' ));
$expected = array ( 'name' => 'testAddOrphan' , 'parent_id' => null , 'lft' => '15' , 'rght' => 16 );
$this -> assertEqual ( $result [ 'NumberTree' ], $expected );
$this -> assertIdentical ( $this -> NumberTree -> verify (), true );
}
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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$this -> NumberTree -> id = null ;
$parent = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1.1' ));
$parent_id = $parent [ 'NumberTree' ][ 'id' ];
$data = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1.2' ), array ( 'id' ));
$this -> NumberTree -> id = $data [ 'NumberTree' ][ 'id' ];
$this -> NumberTree -> saveField ( 'parent_id' , $parent_id );
//$this->NumberTree->setparent($parent_id);
$result = $this -> NumberTree -> children ( $parent_id , true , array ( 'name' ));
$expects = array ( array ( 'NumberTree' => array ( 'name' => '1.1.1' )),
array ( 'NumberTree' => array ( 'name' => '1.1.2' )),
array ( 'NumberTree' => array ( 'name' => '1.2' )));
$this -> assertEqual ( $result , $expects );
$validTree = $this -> NumberTree -> verify ();
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$this -> NumberTree -> id = null ;
$parent = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1.2' ));
$parent_id = $parent [ 'NumberTree' ][ 'id' ];
$data = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1.1' ), array ( 'id' ));
$this -> NumberTree -> id = $data [ 'NumberTree' ][ 'id' ];
$this -> NumberTree -> saveField ( 'parent_id' , $parent_id );
//$this->NumberTree->setparent($parent_id);
$result = $this -> NumberTree -> children ( $parent_id , true , array ( 'name' ));
$expects = array ( array ( 'NumberTree' => array ( 'name' => '1.2.1' )),
array ( 'NumberTree' => array ( 'name' => '1.2.2' )),
array ( 'NumberTree' => array ( 'name' => '1.1' )));
$this -> assertEqual ( $result , $expects );
$validTree = $this -> NumberTree -> verify ();
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$this -> NumberTree -> id = null ;
$parent = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1. Root' ));
$parent_id = $parent [ 'NumberTree' ][ 'id' ];
$data = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1.1.1' ), array ( 'id' ));
$expects = $this -> NumberTree -> find ( 'all' );
$before = $this -> NumberTree -> read ( null , $data [ 'NumberTree' ][ 'id' ]);
$this -> NumberTree -> id = $parent_id ;
//$this->expectError('Trying to save a node under itself in TreeBehavior::beforeSave');
$this -> NumberTree -> saveField ( 'parent_id' , $data [ 'NumberTree' ][ 'id' ]);
//$this->NumberTree->setparent($data['NumberTree']['id']);
$results = $this -> NumberTree -> find ( 'all' );
$after = $this -> NumberTree -> read ( null , $data [ 'NumberTree' ][ 'id' ]);
$this -> assertEqual ( $results , $expects );
$this -> assertEqual ( $before , $after );
$validTree = $this -> NumberTree -> verify ();
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$this -> NumberTree -> id = null ;
$initialCount = $this -> NumberTree -> find ( 'count' );
$data = $this -> NumberTree -> findByName ( '1.1' );
//$this->expectError('Trying to save a node under a none-existant node in TreeBehavior::beforeSave');
$this -> NumberTree -> id = $data [ 'NumberTree' ][ 'id' ];
$this -> NumberTree -> saveField ( 'parent_id' , 999999 );
//$saveSuccess = $this->NumberTree->setparent(999999);
//$this->assertIdentical($saveSuccess, false);
$laterCount = $this -> NumberTree -> find ( 'count' );
$this -> assertIdentical ( $initialCount , $laterCount );
$validTree = $this -> NumberTree -> verify ();
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$this -> NumberTree -> id = null ;
$initialCount = $this -> NumberTree -> find ( 'count' );
$data = $this -> NumberTree -> findByName ( '1.1' );
//$this->expectError('Trying to set a node to be the parent of itself in TreeBehavior::beforeSave');
$this -> NumberTree -> id = $data [ 'NumberTree' ][ 'id' ];
$saveSuccess = $this -> NumberTree -> saveField ( 'parent_id' , $this -> NumberTree -> id );
//$saveSuccess= $this->NumberTree->setparent($this->NumberTree->id);
$this -> assertIdentical ( $saveSuccess , false );
$laterCount = $this -> NumberTree -> find ( 'count' );
$this -> assertIdentical ( $initialCount , $laterCount );
$validTree = $this -> NumberTree -> verify ();
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$data = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1.2' ), array ( 'id' ));
$this -> NumberTree -> moveUp ( $data [ 'NumberTree' ][ 'id' ]);
$parent = $this -> NumberTree -> findByName ( '1. Root' , array ( 'id' ));
$this -> NumberTree -> id = $parent [ 'NumberTree' ][ 'id' ];
$result = $this -> NumberTree -> children ( null , true , array ( 'name' ));
$expected = array ( array ( 'NumberTree' => array ( 'name' => '1.2' ,)),
array ( 'NumberTree' => array ( 'name' => '1.1' ,)));
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$data = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1.1' ));
$this -> NumberTree -> moveUp ( $data [ 'NumberTree' ][ 'id' ]);
$parent = $this -> NumberTree -> findByName ( '1. Root' , array ( 'id' ));
$this -> NumberTree -> id = $parent [ 'NumberTree' ][ 'id' ];
$result = $this -> NumberTree -> children ( null , true , array ( 'name' ));
$expected = array ( array ( 'NumberTree' => array ( 'name' => '1.1' ,)),
array ( 'NumberTree' => array ( 'name' => '1.2' ,)));
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 1 , 10 );
$data = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1.5' ), array ( 'id' ));
$this -> NumberTree -> moveUp ( $data [ 'NumberTree' ][ 'id' ], 2 );
$parent = $this -> NumberTree -> findByName ( '1. Root' , array ( 'id' ));
$this -> NumberTree -> id = $parent [ 'NumberTree' ][ 'id' ];
$result = $this -> NumberTree -> children ( null , true , array ( 'name' ));
$expected = array (
array ( 'NumberTree' => array ( 'name' => '1.1' ,)),
array ( 'NumberTree' => array ( 'name' => '1.2' ,)),
array ( 'NumberTree' => array ( 'name' => '1.5' ,)),
array ( 'NumberTree' => array ( 'name' => '1.3' ,)),
array ( 'NumberTree' => array ( 'name' => '1.4' ,)),
array ( 'NumberTree' => array ( 'name' => '1.6' ,)),
array ( 'NumberTree' => array ( 'name' => '1.7' ,)),
array ( 'NumberTree' => array ( 'name' => '1.8' ,)),
array ( 'NumberTree' => array ( 'name' => '1.9' ,)),
array ( 'NumberTree' => array ( 'name' => '1.10' ,)));
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 1 , 10 );
$data = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1.5' ), array ( 'id' ));
$this -> NumberTree -> moveUp ( $data [ 'NumberTree' ][ 'id' ], true );
$parent = $this -> NumberTree -> findByName ( '1. Root' , array ( 'id' ));
$this -> NumberTree -> id = $parent [ 'NumberTree' ][ 'id' ];
$result = $this -> NumberTree -> children ( null , true , array ( 'name' ));
$expected = array (
array ( 'NumberTree' => array ( 'name' => '1.5' ,)),
array ( 'NumberTree' => array ( 'name' => '1.1' ,)),
array ( 'NumberTree' => array ( 'name' => '1.2' ,)),
array ( 'NumberTree' => array ( 'name' => '1.3' ,)),
array ( 'NumberTree' => array ( 'name' => '1.4' ,)),
array ( 'NumberTree' => array ( 'name' => '1.6' ,)),
array ( 'NumberTree' => array ( 'name' => '1.7' ,)),
array ( 'NumberTree' => array ( 'name' => '1.8' ,)),
array ( 'NumberTree' => array ( 'name' => '1.9' ,)),
array ( 'NumberTree' => array ( 'name' => '1.10' ,)));
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$data = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1.1' ), array ( 'id' ));
$this -> NumberTree -> moveDown ( $data [ 'NumberTree' ][ 'id' ]);
$parent = $this -> NumberTree -> findByName ( '1. Root' , array ( 'id' ));
$this -> NumberTree -> id = $parent [ 'NumberTree' ][ 'id' ];
$result = $this -> NumberTree -> children ( null , true , array ( 'name' ));
$expected = array ( array ( 'NumberTree' => array ( 'name' => '1.2' ,)),
array ( 'NumberTree' => array ( 'name' => '1.1' ,)));
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$data = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1.2' ));
$this -> NumberTree -> moveDown ( $data [ 'NumberTree' ][ 'id' ]);
$parent = $this -> NumberTree -> findByName ( '1. Root' , array ( 'id' ));
$this -> NumberTree -> id = $parent [ 'NumberTree' ][ 'id' ];
$result = $this -> NumberTree -> children ( null , true , array ( 'name' ));
$expected = array ( array ( 'NumberTree' => array ( 'name' => '1.1' ,)),
array ( 'NumberTree' => array ( 'name' => '1.2' ,)));
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 1 , 10 );
$data = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1.5' ), array ( 'id' ));
$this -> NumberTree -> moveDown ( $data [ 'NumberTree' ][ 'id' ], true );
$parent = $this -> NumberTree -> findByName ( '1. Root' , array ( 'id' ));
$this -> NumberTree -> id = $parent [ 'NumberTree' ][ 'id' ];
$result = $this -> NumberTree -> children ( null , true , array ( 'name' ));
$expected = array (
array ( 'NumberTree' => array ( 'name' => '1.1' ,)),
array ( 'NumberTree' => array ( 'name' => '1.2' ,)),
array ( 'NumberTree' => array ( 'name' => '1.3' ,)),
array ( 'NumberTree' => array ( 'name' => '1.4' ,)),
array ( 'NumberTree' => array ( 'name' => '1.6' ,)),
array ( 'NumberTree' => array ( 'name' => '1.7' ,)),
array ( 'NumberTree' => array ( 'name' => '1.8' ,)),
array ( 'NumberTree' => array ( 'name' => '1.9' ,)),
array ( 'NumberTree' => array ( 'name' => '1.10' ,)),
array ( 'NumberTree' => array ( 'name' => '1.5' ,)));
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 1 , 10 );
$data = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1.5' ), array ( 'id' ));
$this -> NumberTree -> moveDown ( $data [ 'NumberTree' ][ 'id' ], 2 );
$parent = $this -> NumberTree -> findByName ( '1. Root' , array ( 'id' ));
$this -> NumberTree -> id = $parent [ 'NumberTree' ][ 'id' ];
$result = $this -> NumberTree -> children ( null , true , array ( 'name' ));
$expected = array (
array ( 'NumberTree' => array ( 'name' => '1.1' ,)),
array ( 'NumberTree' => array ( 'name' => '1.2' ,)),
array ( 'NumberTree' => array ( 'name' => '1.3' ,)),
array ( 'NumberTree' => array ( 'name' => '1.4' ,)),
array ( 'NumberTree' => array ( 'name' => '1.6' ,)),
array ( 'NumberTree' => array ( 'name' => '1.7' ,)),
array ( 'NumberTree' => array ( 'name' => '1.5' ,)),
array ( 'NumberTree' => array ( 'name' => '1.8' ,)),
array ( 'NumberTree' => array ( 'name' => '1.9' ,)),
array ( 'NumberTree' => array ( 'name' => '1.10' ,)));
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 1 , 10 );
$data = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1.5' ), array ( 'id' ));
$this -> NumberTree -> id = $data [ 'NumberTree' ][ 'id' ];
$this -> NumberTree -> saveField ( 'name' , 'renamed' );
$parent = $this -> NumberTree -> findByName ( '1. Root' , array ( 'id' ));
$this -> NumberTree -> id = $parent [ 'NumberTree' ][ 'id' ];
$result = $this -> NumberTree -> children ( null , true , array ( 'name' ));
$expected = array (
array ( 'NumberTree' => array ( 'name' => '1.1' ,)),
array ( 'NumberTree' => array ( 'name' => '1.2' ,)),
array ( 'NumberTree' => array ( 'name' => '1.3' ,)),
array ( 'NumberTree' => array ( 'name' => '1.4' ,)),
array ( 'NumberTree' => array ( 'name' => 'renamed' ,)),
array ( 'NumberTree' => array ( 'name' => '1.6' ,)),
array ( 'NumberTree' => array ( 'name' => '1.7' ,)),
array ( 'NumberTree' => array ( 'name' => '1.8' ,)),
array ( 'NumberTree' => array ( 'name' => '1.9' ,)),
array ( 'NumberTree' => array ( 'name' => '1.10' ,)));
$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-05-30 11:40:08 +00:00
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 1 , 1 );
$data = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1.1' ), array ( 'id' ));
$this -> NumberTree -> id = $data [ 'NumberTree' ][ 'id' ];
$this -> NumberTree -> save ( array ( 'parent_id' => null ));
$result = $this -> NumberTree -> verify ();
$this -> assertIdentical ( $result , true );
$this -> NumberTree -> moveup ();
$result = $this -> NumberTree -> find ( 'all' , array ( 'fields' => 'name' , 'order' => 'NumberTree.lft ASC' ));
$expected = array ( array ( 'NumberTree' => array ( 'name' => '1.1' )),
array ( 'NumberTree' => array ( 'name' => '1. Root' )));
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$initialCount = $this -> NumberTree -> find ( 'count' );
$result = $this -> NumberTree -> findByName ( '1.1.1' );
$return = $this -> NumberTree -> delete ( $result [ 'NumberTree' ][ 'id' ]);
$this -> assertEqual ( $return , true );
$laterCount = $this -> NumberTree -> find ( 'count' );
$this -> assertEqual ( $initialCount - 1 , $laterCount );
$validTree = $this -> NumberTree -> verify ();
$this -> assertIdentical ( $validTree , true );
$initialCount = $this -> NumberTree -> find ( 'count' );
$result = $this -> NumberTree -> findByName ( '1.1' );
$return = $this -> NumberTree -> delete ( $result [ 'NumberTree' ][ 'id' ]);
$this -> assertEqual ( $return , true );
$laterCount = $this -> NumberTree -> find ( 'count' );
$this -> assertEqual ( $initialCount - 2 , $laterCount );
$validTree = $this -> NumberTree -> verify ();
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$initialCount = $this -> NumberTree -> find ( 'count' );
$result = $this -> NumberTree -> findByName ( '1.1' );
$this -> NumberTree -> removeFromTree ( $result [ 'NumberTree' ][ 'id' ]);
$laterCount = $this -> NumberTree -> find ( 'count' );
$this -> assertEqual ( $initialCount , $laterCount );
$children = $this -> NumberTree -> children ( $result [ 'NumberTree' ][ 'parent_id' ], true , array ( 'name' ));
$expects = array ( array ( 'NumberTree' => array ( 'name' => '1.1.1' )),
array ( 'NumberTree' => array ( 'name' => '1.1.2' )),
array ( 'NumberTree' => array ( 'name' => '1.2' )));
$this -> assertEqual ( $children , $expects );
$topNodes = $this -> NumberTree -> children ( false , true , array ( 'name' ));
$expects = array ( array ( 'NumberTree' => array ( 'name' => '1. Root' )),
array ( 'NumberTree' => array ( 'name' => '1.1' )));
$this -> assertEqual ( $topNodes , $expects );
$validTree = $this -> NumberTree -> verify ();
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$initialCount = $this -> NumberTree -> find ( 'count' );
$initialTopNodes = $this -> NumberTree -> childCount ( false );
$result = $this -> NumberTree -> findByName ( '1. Root' );
$this -> NumberTree -> removeFromTree ( $result [ 'NumberTree' ][ 'id' ]);
$laterCount = $this -> NumberTree -> find ( 'count' );
$laterTopNodes = $this -> NumberTree -> childCount ( false );
$this -> assertEqual ( $initialCount , $laterCount );
$this -> assertEqual ( $initialTopNodes , $laterTopNodes );
$topNodes = $this -> NumberTree -> children ( false , true , array ( 'name' ));
$expects = array ( array ( 'NumberTree' => array ( 'name' => '1.1' )),
array ( 'NumberTree' => array ( 'name' => '1.2' )),
array ( 'NumberTree' => array ( 'name' => '1. Root' )));
$this -> assertEqual ( $topNodes , $expects );
$validTree = $this -> NumberTree -> verify ();
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$initialCount = $this -> NumberTree -> find ( 'count' );
$result = $this -> NumberTree -> findByName ( '1.1.1' );
$this -> NumberTree -> removeFromTree ( $result [ 'NumberTree' ][ 'id' ]);
$laterCount = $this -> NumberTree -> find ( 'count' );
$this -> assertEqual ( $initialCount , $laterCount );
$nodes = $this -> NumberTree -> find ( 'list' , array ( 'order' => 'lft' ));
$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 );
$validTree = $this -> NumberTree -> verify ();
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$initialCount = $this -> NumberTree -> find ( 'count' );
$result = $this -> NumberTree -> findByName ( '1.1' );
$this -> NumberTree -> removeFromTree ( $result [ 'NumberTree' ][ 'id' ], true );
$laterCount = $this -> NumberTree -> find ( 'count' );
$this -> assertEqual ( $initialCount - 1 , $laterCount );
$children = $this -> NumberTree -> children ( $result [ 'NumberTree' ][ 'parent_id' ], true , array ( 'name' ), 'lft asc' );
$expects = array ( array ( 'NumberTree' => array ( 'name' => '1.1.1' )),
array ( 'NumberTree' => array ( 'name' => '1.1.2' )),
array ( 'NumberTree' => array ( 'name' => '1.2' )));
$this -> assertEqual ( $children , $expects );
$topNodes = $this -> NumberTree -> children ( false , true , array ( 'name' ));
$expects = array ( array ( 'NumberTree' => array ( 'name' => '1. Root' )));
$this -> assertEqual ( $topNodes , $expects );
$validTree = $this -> NumberTree -> verify ();
$this -> assertIdentical ( $validTree , true );
}
2008-08-11 15:54:54 +00:00
/**
* testRemoveAndDeleteNoChildren method
*
* @ return void
* @ access public
*/
function testRemoveAndDeleteNoChildren () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$initialCount = $this -> NumberTree -> find ( 'count' );
$result = $this -> NumberTree -> findByName ( '1.1.1' );
$this -> NumberTree -> removeFromTree ( $result [ 'NumberTree' ][ 'id' ], true );
$laterCount = $this -> NumberTree -> find ( 'count' );
$this -> assertEqual ( $initialCount - 1 , $laterCount );
$nodes = $this -> NumberTree -> find ( 'list' , array ( 'order' => 'lft' ));
$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 );
$validTree = $this -> NumberTree -> verify ();
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$data = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1. Root' ));
$this -> NumberTree -> id = $data [ 'NumberTree' ][ 'id' ];
$direct = $this -> NumberTree -> children ( null , true , array ( 'id' , 'name' , 'parent_id' , 'lft' , 'rght' ));
$expects = array ( array ( 'NumberTree' => array ( 'id' => 2 , 'name' => '1.1' , 'parent_id' => 1 , 'lft' => 2 , 'rght' => 7 )),
array ( 'NumberTree' => array ( 'id' => 5 , 'name' => '1.2' , 'parent_id' => 1 , 'lft' => 8 , 'rght' => 13 )));
$this -> assertEqual ( $direct , $expects );
$total = $this -> NumberTree -> children ( null , null , array ( 'id' , 'name' , 'parent_id' , 'lft' , 'rght' ));
$expects = array ( array ( 'NumberTree' => array ( 'id' => 2 , 'name' => '1.1' , 'parent_id' => 1 , 'lft' => 2 , 'rght' => 7 )),
array ( 'NumberTree' => array ( 'id' => 3 , 'name' => '1.1.1' , 'parent_id' => 2 , 'lft' => 3 , 'rght' => 4 )),
array ( 'NumberTree' => array ( 'id' => 4 , 'name' => '1.1.2' , 'parent_id' => 2 , 'lft' => 5 , 'rght' => 6 )),
array ( 'NumberTree' => array ( 'id' => 5 , 'name' => '1.2' , 'parent_id' => 1 , 'lft' => 8 , 'rght' => 13 )),
array ( 'NumberTree' => array ( 'id' => 6 , 'name' => '1.2.1' , 'parent_id' => 5 , 'lft' => 9 , 'rght' => 10 )),
array ( 'NumberTree' => array ( 'id' => 7 , 'name' => '1.2.2' , 'parent_id' => 5 , 'lft' => 11 , 'rght' => 12 )));
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$data = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1. Root' ));
$this -> NumberTree -> id = $data [ 'NumberTree' ][ 'id' ];
$direct = $this -> NumberTree -> childCount ( null , true );
$this -> assertEqual ( $direct , 2 );
$expects = $this -> NumberTree -> find ( 'count' ) - 1 ;
$total = $this -> NumberTree -> childCount ();
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$data = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1.2.2' ));
$this -> NumberTree -> id = $data [ 'NumberTree' ][ 'id' ];
$result = $this -> NumberTree -> getparentNode ( null , array ( 'name' ));
$expects = array ( 'NumberTree' => array ( 'name' => '1.2' ));
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 2 , 2 );
$data = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1.2.2' ));
$this -> NumberTree -> id = $data [ 'NumberTree' ][ 'id' ];
$result = $this -> NumberTree -> getPath ( null , array ( 'name' ));
$expects = array ( array ( 'NumberTree' => array ( 'name' => '1. Root' )),
array ( 'NumberTree' => array ( 'name' => '1.2' )),
array ( 'NumberTree' => array ( 'name' => '1.2.2' )));
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> bindModel ( array ( 'belongsTo' => array ( 'Dummy' =>
array ( 'className' => 'NumberTree' , 'foreignKey' => 'parent_id' , 'conditions' => array ( 'Dummy.id' => null )))), false );
$this -> NumberTree -> initialize ( 2 , 2 );
$data = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1. Root' ));
$this -> NumberTree -> id = $data [ 'NumberTree' ][ 'id' ];
$direct = $this -> NumberTree -> children ( null , true , array ( 'id' , 'name' , 'parent_id' , 'lft' , 'rght' ), null , null , null , 1 );
$expects = array ( array ( 'NumberTree' => array ( 'id' => 2 , 'name' => '1.1' , 'parent_id' => 1 , 'lft' => 2 , 'rght' => 7 )),
array ( 'NumberTree' => array ( 'id' => 5 , 'name' => '1.2' , 'parent_id' => 1 , 'lft' => 8 , 'rght' => 13 )));
$this -> assertEqual ( $direct , $expects );
$total = $this -> NumberTree -> children ( null , null , array ( 'id' , 'name' , 'parent_id' , 'lft' , 'rght' ), null , null , null , 1 );
$expects = array (
array ( 'NumberTree' => array ( 'id' => 2 , 'name' => '1.1' , 'parent_id' => 1 , 'lft' => 2 , 'rght' => 7 )),
array ( 'NumberTree' => array ( 'id' => 3 , 'name' => '1.1.1' , 'parent_id' => 2 , 'lft' => 3 , 'rght' => 4 )),
array ( 'NumberTree' => array ( 'id' => 4 , 'name' => '1.1.2' , 'parent_id' => 2 , 'lft' => 5 , 'rght' => 6 )),
array ( 'NumberTree' => array ( 'id' => 5 , 'name' => '1.2' , 'parent_id' => 1 , 'lft' => 8 , 'rght' => 13 )),
array ( 'NumberTree' => array ( 'id' => 6 , 'name' => '1.2.1' , 'parent_id' => 5 , 'lft' => 9 , 'rght' => 10 )),
array ( 'NumberTree' => array ( 'id' => 7 , 'name' => '1.2.2' , 'parent_id' => 5 , 'lft' => 11 , 'rght' => 12 ))
);
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 3 , 3 );
$nodes = $this -> NumberTree -> find ( 'list' , array ( 'order' => 'lft' ));
2008-06-24 03:16:28 +00:00
2008-05-30 11:40:08 +00:00
$data = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1.1' ), array ( 'id' ));
$this -> NumberTree -> moveDown ( $data [ 'NumberTree' ][ 'id' ]);
$data = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1.2.1' ), array ( 'id' ));
$this -> NumberTree -> moveDown ( $data [ 'NumberTree' ][ 'id' ]);
$data = $this -> NumberTree -> find ( array ( 'NumberTree.name' => '1.3.2.2' ), array ( 'id' ));
$this -> NumberTree -> moveDown ( $data [ 'NumberTree' ][ 'id' ]);
$unsortedNodes = $this -> NumberTree -> find ( 'list' , array ( 'order' => 'lft' ));
$this -> assertNotIdentical ( $nodes , $unsortedNodes );
$this -> NumberTree -> reorder ();
$sortedNodes = $this -> NumberTree -> find ( 'list' , array ( 'order' => 'lft' ));
$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 () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> bindModel ( array ( 'belongsTo' => array ( 'Dummy' =>
array ( 'className' => 'NumberTree' , 'foreignKey' => 'parent_id' , 'conditions' => array ( 'Dummy.id' => null )))), false );
$this -> NumberTree -> initialize ( 2 , 2 );
$result = $this -> NumberTree -> generateTreeList ();
$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-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-05 15:20:45 +00:00
/**
* testArraySyntax 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 testArraySyntax () {
$this -> NumberTree =& new NumberTree ();
$this -> NumberTree -> initialize ( 3 , 3 );
2008-06-20 20:17:23 +00:00
$this -> assertIdentical ( $this -> NumberTree -> childCount ( 2 ), $this -> NumberTree -> childCount ( array ( 'id' => 2 )));
$this -> assertIdentical ( $this -> NumberTree -> getParentNode ( 2 ), $this -> NumberTree -> getParentNode ( array ( 'id' => 2 )));
$this -> assertIdentical ( $this -> NumberTree -> getPath ( 4 ), $this -> NumberTree -> getPath ( array ( 'id' => 4 )));
}
/**
* 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 () {
$this -> FlagTree =& new FlagTree ();
$this -> FlagTree -> cacheQueries = false ;
$this -> FlagTree -> translateModel = 'TranslateTreeTestModel' ;
$this -> FlagTree -> Behaviors -> attach ( 'Translate' , array ( 'name' ));
//Save
$this -> FlagTree -> locale = 'eng' ;
$data = array ( 'FlagTree' => array (
'name' => 'name #1' ,
'locale' => 'eng' ,
'parent_id' => null ,
));
$this -> FlagTree -> save ( $data );
$result = $this -> FlagTree -> find ( 'all' );
$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
$this -> FlagTree -> create ();
$data [ 'FlagTree' ][ 'name' ] = 'Named 2' ;
$this -> FlagTree -> id = 1 ;
$this -> FlagTree -> save ( $data );
$result = $this -> FlagTree -> find ( 'all' );
$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
$this -> FlagTree -> create ();
$this -> FlagTree -> locale = 'deu' ;
$this -> FlagTree -> id = 1 ;
$data = array ( 'FlagTree' => array (
'id' => 1 ,
'parent_id' => null ,
'name' => 'namen #1' ,
'locale' => 'deu' ,
));
$this -> FlagTree -> save ( $data );
$this -> FlagTree -> locale = 'deu' ;
$result = $this -> FlagTree -> find ( 'all' );
$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
$this -> FlagTree -> locale = 'eng' ;
$data = array (
'name' => array ( 'eng' => 'New title' , 'spa' => 'Nuevo leyenda' ),
'parent_id' => null
);
$this -> FlagTree -> create ( $data );
$this -> FlagTree -> save ();
$this -> FlagTree -> unbindTranslation ();
$translations = array ( 'name' => 'Name' );
$this -> FlagTree -> bindTranslation ( $translations , false );
$this -> FlagTree -> locale = array ( 'eng' , 'spa' );
$result = $this -> FlagTree -> read ();
$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 (
2008-06-21 02:33:04 +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
}
2008-09-09 18:42:18 +00:00
/**
* Tests the afterSave callback in the model
*
* @ access public
* @ return void
*/
function testAftersaveCallback () {
$this -> AfterTree =& new AfterTree ();
$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 -> AfterTree -> save ( array ( 'AfterTree' => array ( 'name' => 'Six and One Half' , 'parent_id' => 6 )));
$this -> assertEqual ( $result , $expected );
$expected = array ( 'AfterTree' => array ( 'name' => 'Six and One Half' , 'parent_id' => 6 , 'lft' => 11 , 'rght' => 12 , 'id' => 8 ));
$result = $this -> AfterTree -> findAll ();
$this -> assertEqual ( $result [ 7 ], $expected );
}
2008-05-30 11:40:08 +00:00
}
2008-06-24 03:16:28 +00:00
?>