Upgrade CakePHP from 2.2.5 to 2.9.5

This commit is contained in:
Brm Ko 2017-02-26 15:29:44 +01:00
parent 5a580df460
commit 235a541597
793 changed files with 60746 additions and 23753 deletions

View file

@ -4,19 +4,18 @@
*
* Test the Acl Behavior
*
* PHP 5
*
* CakePHP : Rapid Development Framework (http://cakephp.org)
* Copyright 2005-2012, Cake Software Foundation, Inc.
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright 2005-2012, Cake Software Foundation, Inc.
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://cakephp.org CakePHP Project
* @package Cake.Test.Case.Model.Behavior
* @since CakePHP v 1.2.0.4487
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
App::uses('AclBehavior', 'Model/Behavior');
@ -25,7 +24,6 @@ App::uses('Aro', 'Model');
App::uses('AclNode', 'Model');
App::uses('DbAcl', 'Model');
/**
* Test Person class - self joined model
*
@ -33,13 +31,6 @@ App::uses('DbAcl', 'Model');
*/
class AclPerson extends CakeTestModel {
/**
* name property
*
* @var string
*/
public $name = 'AclPerson';
/**
* useTable property
*
@ -94,9 +85,8 @@ class AclPerson extends CakeTestModel {
}
if (!$motherId) {
return null;
} else {
return array('AclPerson' => array('id' => $motherId));
}
return array('AclPerson' => array('id' => $motherId));
}
}
@ -132,6 +122,7 @@ class AclUser extends CakeTestModel {
/**
* parentNode
*
* @return null
*/
public function parentNode() {
return null;
@ -170,6 +161,7 @@ class AclPost extends CakeTestModel {
/**
* parentNode
*
* @return null
*/
public function parentNode() {
return null;
@ -234,6 +226,7 @@ class AclBehaviorTest extends CakeTestCase {
* @return void
*/
public function testSetup() {
parent::setUp();
$User = new AclUser();
$this->assertTrue(isset($User->Behaviors->Acl->settings['User']));
$this->assertEquals('requester', $User->Behaviors->Acl->settings['User']['type']);

View file

@ -2,23 +2,23 @@
/**
* ContainableBehaviorTest file
*
* PHP 5
*
* CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice
*
* @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
* @package Cake.Test.Case.Model.Behavior
* @since CakePHP(tm) v 1.2.0.5669
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
App::uses('Model', 'Model');
App::uses('AppModel', 'Model');
require_once dirname(dirname(__FILE__)) . DS . 'models.php';
/**
@ -43,6 +43,7 @@ class ContainableBehaviorTest extends CakeTestCase {
/**
* Method executed before each test
*
* @return void
*/
public function setUp() {
parent::setUp();
@ -60,14 +61,15 @@ class ContainableBehaviorTest extends CakeTestCase {
'hasAndBelongsToMany' => array('Article')
), false);
$this->User->Behaviors->attach('Containable');
$this->Article->Behaviors->attach('Containable');
$this->Tag->Behaviors->attach('Containable');
$this->User->Behaviors->load('Containable');
$this->Article->Behaviors->load('Containable');
$this->Tag->Behaviors->load('Containable');
}
/**
* Method executed after each test
*
* @return void
*/
public function tearDown() {
unset($this->Article);
@ -152,7 +154,7 @@ class ContainableBehaviorTest extends CakeTestCase {
* @return void
*/
public function testInvalidContainments() {
$r = $this->_containments($this->Article, array('Comment', 'InvalidBinding'));
$this->_containments($this->Article, array('Comment', 'InvalidBinding'));
}
/**
@ -161,8 +163,8 @@ class ContainableBehaviorTest extends CakeTestCase {
* @return void
*/
public function testInvalidContainmentsNoNotices() {
$this->Article->Behaviors->attach('Containable', array('notices' => false));
$r = $this->_containments($this->Article, array('Comment', 'InvalidBinding'));
$this->Article->Behaviors->load('Containable', array('notices' => false));
$this->_containments($this->Article, array('Comment', 'InvalidBinding'));
}
/**
@ -243,7 +245,7 @@ class ContainableBehaviorTest extends CakeTestCase {
* @return void
*/
public function testBeforeFindWithNonExistingBinding() {
$r = $this->Article->find('all', array('contain' => array('Comment' => 'NonExistingBinding')));
$this->Article->find('all', array('contain' => array('Comment' => 'NonExistingBinding')));
}
/**
@ -261,6 +263,30 @@ class ContainableBehaviorTest extends CakeTestCase {
$this->assertFalse(Set::matches('/Comment/User', $r));
}
/**
* testContainFindList method
*
* @return void
*/
public function testContainFindList() {
$this->Article->contain('Comment.User');
$result = $this->Article->find('list');
$expected = array(
1 => 'First Article',
2 => 'Second Article',
3 => 'Third Article'
);
$this->assertEquals($expected, $result);
$result = $this->Article->find('list', array('fields' => array('Article.id', 'User.id'), 'contain' => array('User')));
$expected = array(
1 => '1',
2 => '3',
3 => '1'
);
$this->assertEquals($expected, $result);
}
/**
* Test that mixing contain() and the contain find option.
*
@ -657,6 +683,65 @@ class ContainableBehaviorTest extends CakeTestCase {
);
$this->assertEquals($expected, $result);
$this->Article->contain(array('User' => array('id', 'ArticleFeatured')));
$result = $this->Article->find('all', array('recursive' => 2));
$expected = array(
array(
'Article' => array(
'id' => 1, 'user_id' => 1, 'title' => 'First Article', 'body' => 'First Article Body',
'published' => 'Y', 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31'
),
'User' => array(
'id' => 1,
'ArticleFeatured' => array(
array(
'id' => 1, 'user_id' => 1, 'title' => 'First Article', 'body' => 'First Article Body',
'published' => 'Y', 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31'
),
array(
'id' => 3, 'user_id' => 1, 'title' => 'Third Article', 'body' => 'Third Article Body',
'published' => 'Y', 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31'
)
)
)
),
array(
'Article' => array(
'id' => 2, 'user_id' => 3, 'title' => 'Second Article', 'body' => 'Second Article Body',
'published' => 'Y', 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31'
),
'User' => array(
'id' => 3,
'ArticleFeatured' => array(
array(
'id' => 2, 'user_id' => 3, 'title' => 'Second Article', 'body' => 'Second Article Body',
'published' => 'Y', 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31'
)
)
)
),
array(
'Article' => array(
'id' => 3, 'user_id' => 1, 'title' => 'Third Article', 'body' => 'Third Article Body',
'published' => 'Y', 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31'
),
'User' => array(
'id' => 1,
'ArticleFeatured' => array(
array(
'id' => 1, 'user_id' => 1, 'title' => 'First Article', 'body' => 'First Article Body',
'published' => 'Y', 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31'
),
array(
'id' => 3, 'user_id' => 1, 'title' => 'Third Article', 'body' => 'Third Article Body',
'published' => 'Y', 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31'
)
)
)
)
);
$this->assertEquals($expected, $result);
$this->Article->contain(array('User' => array('ArticleFeatured', 'Comment')));
$result = $this->Article->find('all', array('recursive' => 2));
$expected = array(
@ -3216,7 +3301,7 @@ class ContainableBehaviorTest extends CakeTestCase {
* @return void
*/
public function testOriginalAssociations() {
$this->Article->Comment->Behaviors->attach('Containable');
$this->Article->Comment->Behaviors->load('Containable');
$options = array(
'conditions' => array(
@ -3228,7 +3313,7 @@ class ContainableBehaviorTest extends CakeTestCase {
$firstResult = $this->Article->Comment->find('all', $options);
$dummyResult = $this->Article->Comment->find('all', array(
$this->Article->Comment->find('all', array(
'conditions' => array(
'User.user' => 'mariano'
),
@ -3305,6 +3390,7 @@ class ContainableBehaviorTest extends CakeTestCase {
/**
* testResetAddedAssociation method
*
* @return void
*/
public function testResetAddedAssociation() {
$this->assertTrue(empty($this->Article->hasMany['ArticlesTag']));
@ -3331,9 +3417,9 @@ class ContainableBehaviorTest extends CakeTestCase {
$this->JoinB = ClassRegistry::init('JoinB');
$this->JoinC = ClassRegistry::init('JoinC');
$this->JoinA->Behaviors->attach('Containable');
$this->JoinB->Behaviors->attach('Containable');
$this->JoinC->Behaviors->attach('Containable');
$this->JoinA->Behaviors->load('Containable');
$this->JoinB->Behaviors->load('Containable');
$this->JoinC->Behaviors->load('Containable');
$this->JoinA->JoinB->find('all', array('contain' => array('JoinA')));
$this->JoinA->bindModel(array('hasOne' => array('JoinAsJoinC' => array('joinTable' => 'as_cs'))), false);
@ -3346,11 +3432,12 @@ class ContainableBehaviorTest extends CakeTestCase {
/**
* testResetAssociation method
*
* @return void
*/
public function testResetAssociation() {
$this->Article->Behaviors->attach('Containable');
$this->Article->Comment->Behaviors->attach('Containable');
$this->Article->User->Behaviors->attach('Containable');
$this->Article->Behaviors->load('Containable');
$this->Article->Comment->Behaviors->load('Containable');
$this->Article->User->Behaviors->load('Containable');
$initialOptions = array(
'conditions' => array(
@ -3377,6 +3464,7 @@ class ContainableBehaviorTest extends CakeTestCase {
/**
* testResetDeeperHasOneAssociations method
*
* @return void
*/
public function testResetDeeperHasOneAssociations() {
$this->Article->User->unbindModel(array(
@ -3437,23 +3525,24 @@ class ContainableBehaviorTest extends CakeTestCase {
/**
* testResetMultipleHabtmAssociations method
*
* @return void
*/
public function testResetMultipleHabtmAssociations() {
$articleHabtm = array(
'hasAndBelongsToMany' => array(
'Tag' => array(
'className' => 'Tag',
'joinTable' => 'articles_tags',
'foreignKey' => 'article_id',
'className' => 'Tag',
'joinTable' => 'articles_tags',
'foreignKey' => 'article_id',
'associationForeignKey' => 'tag_id'
),
'ShortTag' => array(
'className' => 'Tag',
'joinTable' => 'articles_tags',
'foreignKey' => 'article_id',
'className' => 'Tag',
'joinTable' => 'articles_tags',
'foreignKey' => 'article_id',
'associationForeignKey' => 'tag_id',
// LENGHT function mysql-only, using LIKE does almost the same
'conditions' => "ShortTag.tag LIKE '???'"
// LENGTH function mysql-only, using LIKE does almost the same
'conditions' => "ShortTag.tag LIKE '???'"
)
)
);
@ -3527,6 +3616,8 @@ class ContainableBehaviorTest extends CakeTestCase {
/**
* test that bindModel and unbindModel work with find() calls in between.
*
* @return void
*/
public function testBindMultipleTimesWithFind() {
$binding = array(
@ -3647,11 +3738,10 @@ class ContainableBehaviorTest extends CakeTestCase {
if (!is_array($Model)) {
$result = $Model->containments($contain);
return $this->_containments($result['models']);
} else {
$result = $Model;
foreach ($result as $i => $containment) {
$result[$i] = array_diff_key($containment, array('instance' => true));
}
}
$result = $Model;
foreach ($result as $i => $containment) {
$result[$i] = array_diff_key($containment, array('instance' => true));
}
return $result;
}
@ -3671,7 +3761,7 @@ class ContainableBehaviorTest extends CakeTestCase {
'hasAndBelongsToMany' => array()
), $expected);
foreach ($expected as $binding => $expect) {
$this->assertEquals(array_keys($Model->$binding), $expect);
$this->assertEquals($expect, array_keys($Model->$binding));
}
}
}

View file

@ -1,19 +1,21 @@
<?php
/**
* CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice
*
* @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
* @since CakePHP(tm) v 1.2.0.5669
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
App::uses('Model', 'Model');
App::uses('AppModel', 'Model');
require_once dirname(dirname(__FILE__)) . DS . 'models.php';
/**
@ -26,7 +28,7 @@ class TranslateBehaviorTest extends CakeTestCase {
/**
* autoFixtures property
*
* @var bool false
* @var bool
*/
public $autoFixtures = false;
@ -68,13 +70,13 @@ class TranslateBehaviorTest extends CakeTestCase {
$this->loadFixtures('TranslateTable', 'Tag', 'TranslatedItem', 'Translate', 'User', 'TranslatedArticle', 'TranslateArticle');
$TestModel = new Tag();
$TestModel->translateTable = 'another_i18n';
$TestModel->Behaviors->attach('Translate', array('title'));
$TestModel->Behaviors->load('Translate', array('title'));
$translateModel = $TestModel->Behaviors->Translate->translateModel($TestModel);
$this->assertEquals('I18nModel', $translateModel->name);
$this->assertEquals('another_i18n', $translateModel->useTable);
$TestModel = new User();
$TestModel->Behaviors->attach('Translate', array('title'));
$TestModel->Behaviors->load('Translate', array('title'));
$translateModel = $TestModel->Behaviors->Translate->translateModel($TestModel);
$this->assertEquals('I18nModel', $translateModel->name);
$this->assertEquals('i18n', $translateModel->useTable);
@ -230,6 +232,32 @@ class TranslateBehaviorTest extends CakeTestCase {
)
);
$this->assertEquals($expected, $result);
$result = $TestModel->field('title', array('TranslatedItem.id' => 1));
$expected = 'Title #1';
$this->assertEquals($expected, $result);
$result = $TestModel->read('title', 1);
$expected = array(
'TranslatedItem' => array(
'id' => 1,
'slug' => 'first_translated',
'locale' => 'eng',
'title' => 'Title #1',
'translated_article_id' => 1,
)
);
$this->assertEquals($expected, $result);
$result = $TestModel->read('id, title', 1);
$expected = array(
'TranslatedItem' => array(
'id' => 1,
'locale' => 'eng',
'title' => 'Title #1',
)
);
$this->assertEquals($expected, $result);
}
/**
@ -273,6 +301,40 @@ class TranslateBehaviorTest extends CakeTestCase {
$this->assertEquals($expected, $result);
}
/**
* testLocaleSingleCountWithConditions method
*
* @return void
*/
public function testLocaleSingleCountWithConditions() {
$this->loadFixtures('Translate', 'TranslatedItem');
$TestModel = new TranslatedItem();
$TestModel->locale = 'eng';
$result = $TestModel->find('all', array(
'conditions' => array('slug' => 'first_translated')
));
$expected = array(
array(
'TranslatedItem' => array(
'id' => 1,
'slug' => 'first_translated',
'locale' => 'eng',
'title' => 'Title #1',
'content' => 'Content #1',
'translated_article_id' => 1,
)
)
);
$this->assertEquals($expected, $result);
$result = $TestModel->find('count', array(
'conditions' => array('slug' => 'first_translated')
));
$expected = 1;
$this->assertEquals($expected, $result);
}
/**
* testLocaleSingleAssociations method
*
@ -352,6 +414,33 @@ class TranslateBehaviorTest extends CakeTestCase {
$this->assertEquals($expected, $result);
}
/**
* Test loading fields with 0 as the translated value.
*
* @return void
*/
public function testFetchTranslationsWithZero() {
$this->loadFixtures('Translate', 'TranslatedItem');
$model = new TranslatedItem();
$translateModel = $model->translateModel();
$translateModel->updateAll(array('content' => "'0'"));
$model->locale = 'eng';
$result = $model->read(null, 1);
$expected = array(
'TranslatedItem' => array(
'id' => 1,
'slug' => 'first_translated',
'locale' => 'eng',
'title' => '0',
'content' => '0',
'translated_article_id' => 1,
)
);
$this->assertEquals($expected, $result);
}
/**
* testLocaleMultiple method
*
@ -530,6 +619,36 @@ class TranslateBehaviorTest extends CakeTestCase {
$this->assertEquals($expected, $result);
}
/**
* test saving/deleting with an alias, uses the model name.
*
* @return void
*/
public function testSaveDeleteIgnoreAlias() {
$this->loadFixtures('Translate', 'TranslatedItem');
$TestModel = new TranslatedItem(array('alias' => 'SomethingElse'));
$TestModel->locale = 'spa';
$data = array(
'slug' => 'fourth_translated',
'title' => 'Leyenda #4',
'content' => 'Contenido #4',
'translated_article_id' => 1,
);
$TestModel->create($data);
$TestModel->save();
$id = $TestModel->id;
$result = $TestModel->read();
$expected = array($TestModel->alias => array_merge($data, array('id' => $id, 'locale' => 'spa')));
$this->assertEquals($expected, $result);
$TestModel->delete($id);
$result = $TestModel->translateModel()->find('count', array(
'conditions' => array('foreign_key' => $id)
));
$this->assertEquals(0, $result);
}
/**
* test save multiple locales method
*
@ -600,6 +719,54 @@ class TranslateBehaviorTest extends CakeTestCase {
$this->assertCount(2, $result['Content']);
}
/**
* testSaveAssociatedAtomic method
*
* @return void
*/
public function testSaveAssociatedAtomic() {
$this->loadFixtures('Translate', 'TranslatedItem');
$TestModel = new TranslatedItem();
$data = array(
'slug' => 'fourth_translated',
'title' => array(
'eng' => 'Title #4'
),
'content' => array(
'eng' => 'Content #4'
),
'translated_article_id' => 1,
);
$Mock = $this->getMockForModel('TranslateTestModel', array('save'));
$TestModel->Behaviors->Translate->runtime[$TestModel->alias]['model'] = $Mock;
$with = array(
'TranslateTestModel' => array (
'model' => 'TranslatedItem',
'foreign_key' => '4',
'field' => 'content',
'locale' => 'eng',
'content' => 'Content #4',
)
);
$Mock->expects($this->at(0))->method('save')->with($with, array('atomic' => false));
$with = array(
'TranslateTestModel' => array (
'model' => 'TranslatedItem',
'foreign_key' => '4',
'field' => 'title',
'locale' => 'eng',
'content' => 'Title #4',
)
);
$Mock->expects($this->at(1))->method('save')->with($with, array('atomic' => false));
$TestModel->create();
$TestModel->saveAssociated($data, array('atomic' => false));
}
/**
* Test that saving only some of the translated fields allows the record to be found again.
*
@ -628,6 +795,76 @@ class TranslateBehaviorTest extends CakeTestCase {
$this->assertEquals($expected, $result);
}
/**
* Test that all fields are create with partial data + multiple locales.
*
* @return void
*/
public function testSavePartialFieldMultipleLocales() {
$this->loadFixtures('Translate', 'TranslatedItem');
$TestModel = new TranslatedItem();
$TestModel->locale = 'eng';
$data = array(
'slug' => 'fifth_translated',
'title' => array('eng' => 'Title #5', 'spa' => 'Leyenda #5'),
);
$TestModel->create($data);
$TestModel->save();
$TestModel->unbindTranslation();
$translations = array('title' => 'Title', 'content' => 'Content');
$TestModel->bindTranslation($translations, false);
$result = $TestModel->read(null, $TestModel->id);
$expected = array(
'TranslatedItem' => array(
'id' => '4',
'translated_article_id' => null,
'slug' => 'fifth_translated',
'locale' => 'eng',
'title' => 'Title #5',
'content' => ''
),
'Title' => array(
0 => array(
'id' => '19',
'locale' => 'eng',
'model' => 'TranslatedItem',
'foreign_key' => '4',
'field' => 'title',
'content' => 'Title #5'
),
1 => array(
'id' => '20',
'locale' => 'spa',
'model' => 'TranslatedItem',
'foreign_key' => '4',
'field' => 'title',
'content' => 'Leyenda #5'
)
),
'Content' => array(
0 => array(
'id' => '21',
'locale' => 'eng',
'model' => 'TranslatedItem',
'foreign_key' => '4',
'field' => 'content',
'content' => ''
),
1 => array(
'id' => '22',
'locale' => 'spa',
'model' => 'TranslatedItem',
'foreign_key' => '4',
'field' => 'content',
'content' => ''
)
)
);
$this->assertEquals($expected, $result);
}
/**
* testSaveUpdate method
*
@ -705,7 +942,7 @@ class TranslateBehaviorTest extends CakeTestCase {
$TestModel = new TranslatedItem();
$TestModel->locale = 'eng';
$TestModel->validate['title'] = 'notEmpty';
$TestModel->validate['title'] = 'notBlank';
$data = array('TranslatedItem' => array(
'id' => 1,
'title' => array('eng' => 'New Title #1', 'deu' => 'Neue Titel #1', 'cze' => 'Novy Titulek #1'),
@ -841,6 +1078,7 @@ class TranslateBehaviorTest extends CakeTestCase {
* @return void
*/
public function testValidation() {
Configure::write('Config.language', 'eng');
$this->loadFixtures('Translate', 'TranslatedItem');
$TestModel = new TranslatedItem();
@ -869,6 +1107,29 @@ class TranslateBehaviorTest extends CakeTestCase {
$this->assertFalse(empty($result));
}
/**
* test restoring fields after temporary binds method
*
* @return void
*/
public function testFieldsRestoreAfterBind() {
$this->loadFixtures('Translate', 'TranslatedItem');
$TestModel = new TranslatedItem();
$translations = array('title' => 'Title');
$TestModel->bindTranslation($translations);
$result = $TestModel->find('first');
$this->assertArrayHasKey('Title', $result);
$this->assertArrayHasKey('content', $result['Title'][0]);
$this->assertArrayNotHasKey('title', $result);
$result = $TestModel->find('first');
$this->assertArrayNotHasKey('Title', $result);
$this->assertEquals('Title #1', $result['TranslatedItem']['title']);
}
/**
* testAttachDetach method
*
@ -887,7 +1148,7 @@ class TranslateBehaviorTest extends CakeTestCase {
$expected = array('Title', 'Content');
$this->assertEquals($expected, $result);
$TestModel->Behaviors->detach('Translate');
$TestModel->Behaviors->unload('Translate');
$result = array_keys($TestModel->hasMany);
$expected = array();
$this->assertEquals($expected, $result);
@ -901,7 +1162,7 @@ class TranslateBehaviorTest extends CakeTestCase {
$result = isset($Behavior->runtime[$TestModel->alias]);
$this->assertFalse($result);
$TestModel->Behaviors->attach('Translate', array('title' => 'Title', 'content' => 'Content'));
$TestModel->Behaviors->load('Translate', array('title' => 'Title', 'content' => 'Content'));
$result = array_keys($TestModel->hasMany);
$expected = array('Title', 'Content');
$this->assertEquals($expected, $result);
@ -1083,9 +1344,9 @@ class TranslateBehaviorTest extends CakeTestCase {
$this->loadFixtures('Translate', 'TranslatedItem');
$TestModel = new TranslatedItem();
$TestModel->Behaviors->detach('Translate');
$TestModel->Behaviors->unload('Translate');
$TestModel->actsAs = array();
$TestModel->Behaviors->attach('Translate');
$TestModel->Behaviors->load('Translate');
$TestModel->bindTranslation(array('title', 'content'), true);
$result = $TestModel->unbindTranslation();

View file

@ -2,25 +2,24 @@
/**
* TreeBehaviorAfterTest file
*
* PHP 5
*
* CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice
*
* @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
* @package Cake.Test.Case.Model.Behavior
* @since CakePHP(tm) v 1.2.0.5330
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
App::uses('Model', 'Model');
App::uses('AppModel', 'Model');
require_once dirname(dirname(__FILE__)) . DS . 'models.php';
require_once dirname(dirname(__FILE__)) . DS . 'models.php';
/**
* TreeBehaviorAfterTest class
@ -32,7 +31,7 @@ class TreeBehaviorAfterTest extends CakeTestCase {
/**
* Whether backup global state for each test method or not
*
* @var bool false
* @var bool
*/
public $backupGlobals = false;
@ -62,6 +61,7 @@ class TreeBehaviorAfterTest extends CakeTestCase {
*/
public function testAftersaveCallback() {
$this->Tree = new AfterTree();
$this->Tree->order = null;
$expected = array('AfterTree' => array('name' => 'Six and One Half Changed in AfterTree::afterSave() but not in database', 'parent_id' => 6, 'lft' => 11, 'rght' => 12));
$result = $this->Tree->save(array('AfterTree' => array('name' => 'Six and One Half', 'parent_id' => 6)));
@ -73,5 +73,3 @@ class TreeBehaviorAfterTest extends CakeTestCase {
$this->assertEquals($expected, $result[7]);
}
}

View file

@ -4,23 +4,23 @@
*
* This is the basic Tree behavior test
*
* PHP 5
*
* CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice
*
* @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
* @package Cake.Test.Case.Model.Behavior
* @since CakePHP(tm) v 1.2.0.5330
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
App::uses('Model', 'Model');
App::uses('AppModel', 'Model');
require_once dirname(dirname(__FILE__)) . DS . 'models.php';
/**
@ -33,7 +33,7 @@ class TreeBehaviorNumberTest extends CakeTestCase {
/**
* Whether backup global state for each test method or not
*
* @var bool false
* @var bool
*/
public $backupGlobals = false;
@ -46,7 +46,8 @@ class TreeBehaviorNumberTest extends CakeTestCase {
'modelClass' => 'NumberTree',
'leftField' => 'lft',
'rightField' => 'rght',
'parentField' => 'parent_id'
'parentField' => 'parent_id',
'level' => 'level'
);
/**
@ -70,7 +71,7 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->assertEquals(7, $result);
$validTree = $this->Tree->verify();
$this->assertSame($validTree, true);
$this->assertTrue($validTree);
}
/**
@ -88,15 +89,16 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$save[$modelClass]['id'] = $result[$modelClass]['id'];
$save[$modelClass][$leftField] = 0;
$this->Tree->create();
$this->Tree->save($save);
$result = $this->Tree->verify();
$this->assertNotSame($result, true);
$this->assertNotSame(true, $result);
$result = $this->Tree->recover();
$this->assertSame($result, true);
$this->assertTrue($result);
$result = $this->Tree->verify();
$this->assertSame($result, true);
$this->assertTrue($result);
}
/**
@ -114,15 +116,16 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$save[$modelClass]['id'] = $result[$modelClass]['id'];
$save[$modelClass][$rightField] = 0;
$this->Tree->create();
$this->Tree->save($save);
$result = $this->Tree->verify();
$this->assertNotSame($result, true);
$this->assertNotSame(true, $result);
$result = $this->Tree->recover();
$this->assertSame($result, true);
$this->assertTrue($result);
$result = $this->Tree->verify();
$this->assertSame($result, true);
$this->assertTrue($result);
}
/**
@ -141,13 +144,13 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->Tree->updateAll(array($parentField => null), array('id' => $result[$modelClass]['id']));
$result = $this->Tree->verify();
$this->assertNotSame($result, true);
$this->assertNotSame(true, $result);
$result = $this->Tree->recover();
$this->assertSame($result, true);
$this->assertTrue($result);
$result = $this->Tree->verify();
$this->assertSame($result, true);
$this->assertTrue($result);
}
/**
@ -164,13 +167,13 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->Tree->updateAll(array($parentField => 999999), array('id' => $result[$modelClass]['id']));
$result = $this->Tree->verify();
$this->assertNotSame($result, true);
$this->assertNotSame(true, $result);
$result = $this->Tree->recover('MPTT');
$this->assertSame($result, true);
$this->assertTrue($result);
$result = $this->Tree->verify();
$this->assertSame($result, true);
$this->assertTrue($result);
}
/**
@ -183,24 +186,28 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->Tree = new $modelClass();
$this->Tree->Behaviors->disable('Tree');
$this->Tree->create();
$this->Tree->save(array('name' => 'Main', $parentField => null, $leftField => 0, $rightField => 0));
$node1 = $this->Tree->id;
$this->Tree->create();
$this->Tree->save(array('name' => 'About Us', $parentField => $node1, $leftField => 0, $rightField => 0));
$node11 = $this->Tree->id;
$this->Tree->create();
$this->Tree->save(array('name' => 'Programs', $parentField => $node1, $leftField => 0, $rightField => 0));
$node12 = $this->Tree->id;
$this->Tree->create();
$this->Tree->save(array('name' => 'Mission and History', $parentField => $node11, $leftField => 0, $rightField => 0));
$this->Tree->create();
$this->Tree->save(array('name' => 'Overview', $parentField => $node12, $leftField => 0, $rightField => 0));
$this->Tree->Behaviors->enable('Tree');
$result = $this->Tree->verify();
$this->assertNotSame($result, true);
$this->assertNotSame(true, $result);
$result = $this->Tree->recover();
$this->assertTrue($result);
@ -234,19 +241,24 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->Tree = new $modelClass();
$this->Tree->Behaviors->disable('Tree');
$this->Tree->create();
$this->Tree->save(array('name' => 'Main', $parentField => null, $leftField => 0, $rightField => 0));
$node1 = $this->Tree->id;
$this->Tree->create();
$this->Tree->save(array('name' => 'About Us', $parentField => $node1, $leftField => 0, $rightField => 0));
$node11 = $this->Tree->id;
$this->Tree->create();
$this->Tree->save(array('name' => 'Programs', $parentField => $node1, $leftField => 0, $rightField => 0));
$node12 = $this->Tree->id;
$this->Tree->create();
$this->Tree->save(array('name' => 'Mission and History', $parentField => $node11, $leftField => 0, $rightField => 0));
$this->Tree->create();
$this->Tree->save(array('name' => 'Overview', $parentField => $node12, $leftField => 0, $rightField => 0));
$this->Tree->create();
$this->Tree->save(array('name' => 'Lost', $parentField => 9, $leftField => 0, $rightField => 0));
@ -262,7 +274,7 @@ class TreeBehaviorNumberTest extends CakeTestCase {
))));
$result = $this->Tree->verify();
$this->assertNotSame($result, true);
$this->assertNotSame(true, $result);
$count = $this->Tree->find('count');
$this->assertEquals(6, $count);
@ -306,13 +318,13 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->Tree->updateAll(array($parentField => 999999), array('id' => $result[$modelClass]['id']));
$result = $this->Tree->verify();
$this->assertNotSame($result, true);
$this->assertNotSame(true, $result);
$result = $this->Tree->recover();
$this->assertSame($result, true);
$this->assertTrue($result);
$result = $this->Tree->verify();
$this->assertSame($result, true);
$this->assertTrue($result);
}
/**
@ -328,13 +340,13 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->Tree->updateAll(array($parentField => null));
$result = $this->Tree->verify();
$this->assertNotSame($result, true);
$this->assertNotSame(true, $result);
$result = $this->Tree->recover();
$this->assertSame($result, true);
$this->assertTrue($result);
$result = $this->Tree->verify();
$this->assertSame($result, true);
$this->assertTrue($result);
}
/**
@ -350,12 +362,12 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->Tree->updateAll(array($leftField => 0, $rightField => 0));
$result = $this->Tree->verify();
$this->assertNotSame($result, true);
$this->assertNotSame(true, $result);
$this->Tree->recover();
$result = $this->Tree->verify();
$this->assertSame($result, true);
$this->assertTrue($result);
}
/**
@ -376,7 +388,7 @@ class TreeBehaviorNumberTest extends CakeTestCase {
array($rightField . ' >' => $result[$modelClass][$leftField]));
$result = $this->Tree->verify();
$this->assertNotSame($result, true);
$this->assertNotSame(true, $result);
$result = $this->Tree->recover();
$this->assertTrue($result);
@ -395,13 +407,14 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->Tree = new $modelClass();
$this->Tree->initialize(2, 2);
$this->Tree->create();
$this->Tree->save(array($modelClass => array('name' => 'testAddOrphan', $parentField => null)));
$result = $this->Tree->find('first', array('fields' => array('name', $parentField), 'order' => $modelClass . '.' . $leftField . ' desc'));
$expected = array($modelClass => array('name' => 'testAddOrphan', $parentField => null));
$this->assertEquals($expected, $result);
$validTree = $this->Tree->verify();
$this->assertSame($validTree, true);
$this->assertTrue($validTree);
}
/**
@ -426,13 +439,13 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->assertEquals($initialCount + 1, $laterCount);
$children = $this->Tree->children($data[$modelClass]['id'], true, array('name'));
$expects = array(array($modelClass => array('name' => '1.1.1')),
$expected = array(array($modelClass => array('name' => '1.1.1')),
array($modelClass => array('name' => '1.1.2')),
array($modelClass => array('name' => 'testAddMiddle')));
$this->assertSame($children, $expects);
$this->assertSame($expected, $children);
$validTree = $this->Tree->verify();
$this->assertSame($validTree, true);
$this->assertTrue($validTree);
}
/**
@ -479,14 +492,15 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$initialCount = $this->Tree->find('count');
//$this->expectError('Trying to save a node under a none-existant node in TreeBehavior::beforeSave');
$this->Tree->create();
$saveSuccess = $this->Tree->save(array($modelClass => array('name' => 'testAddInvalid', $parentField => 99999)));
$this->assertSame($saveSuccess, false);
$this->assertFalse($saveSuccess);
$laterCount = $this->Tree->find('count');
$this->assertSame($initialCount, $laterCount);
$validTree = $this->Tree->verify();
$this->assertSame($validTree, true);
$this->assertTrue($validTree);
}
/**
@ -499,13 +513,14 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->Tree = new $modelClass();
$this->Tree->initialize(2, 2);
$this->Tree->create();
$this->Tree->save(array('name' => 'testAddNotIndexed', $parentField => null));
$result = $this->Tree->find('first', array('fields' => array('name', $parentField), 'order' => $modelClass . '.' . $leftField . ' desc'));
$expected = array($modelClass => array('name' => 'testAddNotIndexed', $parentField => null));
$this->assertEquals($expected, $result);
$validTree = $this->Tree->verify();
$this->assertSame($validTree, true);
$this->assertTrue($validTree);
}
/**
@ -526,12 +541,32 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->Tree->id = $data[$modelClass]['id'];
$this->Tree->saveField($parentField, $parentId);
$direct = $this->Tree->children($parentId, true, array('id', 'name', $parentField, $leftField, $rightField));
$expects = array(array($modelClass => array('id' => 2, 'name' => '1.1', $parentField => 1, $leftField => 2, $rightField => 5)),
$expected = array(array($modelClass => array('id' => 2, 'name' => '1.1', $parentField => 1, $leftField => 2, $rightField => 5)),
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)));
$this->assertEquals($direct, $expects);
$this->assertEquals($expected, $direct);
$validTree = $this->Tree->verify();
$this->assertSame($validTree, true);
$this->assertTrue($validTree);
}
/**
* testGetLevel method
*
* @return void
*/
public function testGetLevel() {
extract($this->settings);
$this->Tree = new $modelClass();
$this->Tree->initialize(2, 2);
$this->Tree->id = null;
$result = $this->Tree->getLevel(5);
$this->assertEquals(1, $result);
$result = $this->Tree->getLevel(3);
$this->assertEquals(2, $result);
$this->assertFalse($this->Tree->getLevel(999));
}
/**
@ -572,11 +607,12 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->Tree->initialize(2, 2);
$this->Tree->whitelist = array('name', $parentField);
$this->Tree->create();
$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->assertEquals($expected, $result[$modelClass]);
$this->assertSame($this->Tree->verify(), true);
$this->assertTrue($this->Tree->verify());
}
/**
@ -598,13 +634,13 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->Tree->saveField($parentField, $parentId);
$result = $this->Tree->children($parentId, true, array('name'));
$expects = array(array($modelClass => array('name' => '1.1.1')),
$expected = array(array($modelClass => array('name' => '1.1.1')),
array($modelClass => array('name' => '1.1.2')),
array($modelClass => array('name' => '1.2')));
$this->assertEquals($expects, $result);
$this->assertEquals($expected, $result);
$validTree = $this->Tree->verify();
$this->assertSame($validTree, true);
$this->assertTrue($validTree);
}
/**
@ -626,13 +662,13 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->Tree->saveField($parentField, $parentId);
$result = $this->Tree->children($parentId, true, array('name'));
$expects = array(array($modelClass => array('name' => '1.2.1')),
$expected = array(array($modelClass => array('name' => '1.2.1')),
array($modelClass => array('name' => '1.2.2')),
array($modelClass => array('name' => '1.1')));
$this->assertEquals($expects, $result);
$this->assertEquals($expected, $result);
$validTree = $this->Tree->verify();
$this->assertSame($validTree, true);
$this->assertTrue($validTree);
}
/**
@ -651,7 +687,7 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$data = $this->Tree->find('first', array('fields' => array('id'), 'conditions' => array($modelClass . '.name' => '1.1.1')));
$expects = $this->Tree->find('all');
$expected = $this->Tree->find('all');
$before = $this->Tree->read(null, $data[$modelClass]['id']);
$this->Tree->id = $parentId;
@ -660,11 +696,11 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$results = $this->Tree->find('all');
$after = $this->Tree->read(null, $data[$modelClass]['id']);
$this->assertEquals($expects, $results);
$this->assertEquals($expected, $results);
$this->assertEquals($before, $after);
$validTree = $this->Tree->verify();
$this->assertSame($validTree, true);
$this->assertTrue($validTree);
}
/**
@ -688,7 +724,7 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->assertSame($initialCount, $laterCount);
$validTree = $this->Tree->verify();
$this->assertSame($validTree, true);
$this->assertTrue($validTree);
}
/**
@ -708,12 +744,12 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->Tree->id = $data[$modelClass]['id'];
$saveSuccess = $this->Tree->saveField($parentField, $this->Tree->id);
$this->assertSame($saveSuccess, false);
$this->assertFalse($saveSuccess);
$laterCount = $this->Tree->find('count');
$this->assertSame($initialCount, $laterCount);
$validTree = $this->Tree->verify();
$this->assertSame($validTree, true);
$this->assertTrue($validTree);
}
/**
@ -732,8 +768,8 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$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', )),
array($modelClass => array('name' => '1.1', )));
$expected = array(array($modelClass => array('name' => '1.2')),
array($modelClass => array('name' => '1.1')));
$this->assertSame($expected, $result);
}
@ -754,8 +790,8 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$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', )),
array($modelClass => array('name' => '1.2', )));
$expected = array(array($modelClass => array('name' => '1.1')),
array($modelClass => array('name' => '1.2')));
$this->assertSame($expected, $result);
}
@ -776,16 +812,16 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->Tree->id = $parent[$modelClass]['id'];
$result = $this->Tree->children(null, true, array('name'));
$expected = array(
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', )));
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')));
$this->assertSame($expected, $result);
}
@ -806,16 +842,16 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->Tree->id = $parent[$modelClass]['id'];
$result = $this->Tree->children(null, true, array('name'));
$expected = array(
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', )));
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')));
$this->assertSame($expected, $result);
}
@ -835,8 +871,8 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$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', )),
array($modelClass => array('name' => '1.1', )));
$expected = array(array($modelClass => array('name' => '1.2')),
array($modelClass => array('name' => '1.1')));
$this->assertSame($expected, $result);
}
@ -856,8 +892,8 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$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', )),
array($modelClass => array('name' => '1.2', )));
$expected = array(array($modelClass => array('name' => '1.1')),
array($modelClass => array('name' => '1.2')));
$this->assertSame($expected, $result);
}
@ -878,16 +914,16 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->Tree->id = $parent[$modelClass]['id'];
$result = $this->Tree->children(null, true, array('name'));
$expected = array(
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', )));
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')));
$this->assertSame($expected, $result);
}
@ -908,16 +944,16 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->Tree->id = $parent[$modelClass]['id'];
$result = $this->Tree->children(null, true, array('name'));
$expected = array(
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', )));
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')));
$this->assertSame($expected, $result);
}
@ -938,16 +974,16 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->Tree->id = $parent[$modelClass]['id'];
$result = $this->Tree->children(null, true, array('name'));
$expected = array(
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', )));
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')));
$this->assertSame($expected, $result);
}
@ -965,7 +1001,7 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->Tree->save(array($parentField => null));
$result = $this->Tree->verify();
$this->assertSame($result, true);
$this->assertTrue($result);
$this->Tree->moveUp();
@ -995,7 +1031,7 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->assertEquals($initialCount - 1, $laterCount);
$validTree = $this->Tree->verify();
$this->assertSame($validTree, true);
$this->assertTrue($validTree);
$initialCount = $this->Tree->find('count');
$result = $this->Tree->findByName('1.1');
@ -1007,7 +1043,7 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->assertEquals($initialCount - 2, $laterCount);
$validTree = $this->Tree->verify();
$this->assertSame($validTree, true);
$this->assertTrue($validTree);
}
/**
@ -1040,18 +1076,18 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->assertEquals($initialCount, $laterCount);
$children = $this->Tree->children($result[$modelClass][$parentField], true, array('name'));
$expects = array(array($modelClass => array('name' => '1.1.1')),
$expected = array(array($modelClass => array('name' => '1.1.1')),
array($modelClass => array('name' => '1.1.2')),
array($modelClass => array('name' => '1.2')));
$this->assertEquals($children, $expects);
$this->assertEquals($expected, $children);
$topNodes = $this->Tree->children(false, true,array('name'));
$expects = array(array($modelClass => array('name' => '1. Root')),
$topNodes = $this->Tree->children(false, true, array('name'));
$expected = array(array($modelClass => array('name' => '1. Root')),
array($modelClass => array('name' => '1.1')));
$this->assertEquals($topNodes, $expects);
$this->assertEquals($expected, $topNodes);
$validTree = $this->Tree->verify();
$this->assertSame($validTree, true);
$this->assertTrue($validTree);
}
/**
@ -1076,15 +1112,15 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->assertEquals($initialCount, $laterCount);
$this->assertEquals($initialTopNodes, $laterTopNodes);
$topNodes = $this->Tree->children(false, true,array('name'));
$expects = array(array($modelClass => array('name' => '1.1')),
$topNodes = $this->Tree->children(false, true, array('name'));
$expected = array(array($modelClass => array('name' => '1.1')),
array($modelClass => array('name' => '1.2')),
array($modelClass => array('name' => '1. Root')));
$this->assertEquals($topNodes, $expects);
$this->assertEquals($expected, $topNodes);
$validTree = $this->Tree->verify();
$this->assertSame($validTree, true);
$this->assertTrue($validTree);
}
/**
@ -1105,7 +1141,7 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->assertEquals($initialCount, $laterCount);
$nodes = $this->Tree->find('list', array('order' => $leftField));
$expects = array(
$expected = array(
1 => '1. Root',
2 => '1.1',
4 => '1.1.2',
@ -1115,10 +1151,10 @@ class TreeBehaviorNumberTest extends CakeTestCase {
3 => '1.1.1',
);
$this->assertEquals($nodes, $expects);
$this->assertEquals($expected, $nodes);
$validTree = $this->Tree->verify();
$this->assertSame($validTree, true);
$this->assertTrue($validTree);
}
/**
@ -1140,19 +1176,19 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->assertEquals($initialCount - 1, $laterCount);
$children = $this->Tree->children($result[$modelClass][$parentField], true, array('name'), $leftField . ' asc');
$expects = array(
$expected = array(
array($modelClass => array('name' => '1.1.1')),
array($modelClass => array('name' => '1.1.2')),
array($modelClass => array('name' => '1.2'))
);
$this->assertEquals($children, $expects);
$this->assertEquals($expected, $children);
$topNodes = $this->Tree->children(false, true,array('name'));
$expects = array(array($modelClass => array('name' => '1. Root')));
$this->assertEquals($topNodes, $expects);
$topNodes = $this->Tree->children(false, true, array('name'));
$expected = array(array($modelClass => array('name' => '1. Root')));
$this->assertEquals($expected, $topNodes);
$validTree = $this->Tree->verify();
$this->assertSame($validTree, true);
$this->assertTrue($validTree);
}
/**
@ -1173,7 +1209,7 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->assertEquals($initialCount - 1, $laterCount);
$nodes = $this->Tree->find('list', array('order' => $leftField));
$expects = array(
$expected = array(
1 => '1. Root',
2 => '1.1',
4 => '1.1.2',
@ -1181,10 +1217,10 @@ class TreeBehaviorNumberTest extends CakeTestCase {
6 => '1.2.1',
7 => '1.2.2',
);
$this->assertEquals($nodes, $expects);
$this->assertEquals($expected, $nodes);
$validTree = $this->Tree->verify();
$this->assertSame($validTree, true);
$this->assertTrue($validTree);
}
/**
@ -1201,18 +1237,18 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->Tree->id = $data[$modelClass]['id'];
$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)),
$expected = array(array($modelClass => array('id' => 2, 'name' => '1.1', $parentField => 1, $leftField => 2, $rightField => 7)),
array($modelClass => array('id' => 5, 'name' => '1.2', $parentField => 1, $leftField => 8, $rightField => 13)));
$this->assertEquals($direct, $expects);
$this->assertEquals($expected, $direct);
$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)),
$expected = array(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)));
$this->assertEquals($total, $expects);
$this->assertEquals($expected, $total);
$this->assertEquals(array(), $this->Tree->children(10000));
}
@ -1256,8 +1292,8 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->Tree->id = $data[$modelClass]['id'];
$result = $this->Tree->getParentNode(null, array('name'));
$expects = array($modelClass => array('name' => '1.2'));
$this->assertSame($expects, $result);
$expected = array($modelClass => array('name' => '1.2'));
$this->assertSame($expected, $result);
}
/**
@ -1274,10 +1310,10 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->Tree->id = $data[$modelClass]['id'];
$result = $this->Tree->getPath(null, array('name'));
$expects = array(array($modelClass => array('name' => '1. Root')),
$expected = array(array($modelClass => array('name' => '1. Root')),
array($modelClass => array('name' => '1.2')),
array($modelClass => array('name' => '1.2.2')));
$this->assertSame($expects, $result);
$this->assertSame($expected, $result);
}
/**
@ -1296,12 +1332,12 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->Tree->id = $data[$modelClass]['id'];
$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)),
$expected = array(array($modelClass => array('id' => 2, 'name' => '1.1', $parentField => 1, $leftField => 2, $rightField => 7)),
array($modelClass => array('id' => 5, 'name' => '1.2', $parentField => 1, $leftField => 8, $rightField => 13)));
$this->assertEquals($direct, $expects);
$this->assertEquals($expected, $direct);
$total = $this->Tree->children(null, null, array('id', 'name', $parentField, $leftField, $rightField));
$expects = array(
$expected = array(
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)),
@ -1309,7 +1345,7 @@ class TreeBehaviorNumberTest extends CakeTestCase {
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))
);
$this->assertEquals($total, $expects);
$this->assertEquals($expected, $total);
}
/**
@ -1397,6 +1433,29 @@ class TreeBehaviorNumberTest extends CakeTestCase {
$this->assertEquals('__3 - 1.1.1', $result[3]);
}
/**
* Test the formatting options of formatTreeList()
*
* @return void
*/
public function testFormatTreeList() {
extract($this->settings);
$this->Tree = new $modelClass();
$this->Tree->initialize(2, 2);
$options = array('order' => array('lft' => 'asc'));
$records = $this->Tree->find('all', $options);
$options = array(
'keyPath' => "{n}.$modelClass.id",
'valuePath' => array('%s - %s', "{n}.$modelClass.id", "{n}.$modelClass.name"),
'spacer' => '--');
$result = $this->Tree->formatTreeList($records, $options);
$this->assertEquals('1 - 1. Root', $result[1]);
$this->assertEquals('--2 - 1.1', $result[2]);
$this->assertEquals('----3 - 1.1.1', $result[3]);
}
/**
* testArraySyntax method
*
@ -1419,7 +1478,7 @@ class TreeBehaviorNumberTest extends CakeTestCase {
public function testFindThreaded() {
$Model = new Person();
$Model->recursive = -1;
$Model->Behaviors->attach('Tree', array('parent' => 'mother_id'));
$Model->Behaviors->load('Tree', array('parent' => 'mother_id'));
$result = $Model->find('threaded');
$expected = array(
@ -1492,4 +1551,61 @@ class TreeBehaviorNumberTest extends CakeTestCase {
);
$this->assertEquals($expected, $result);
}
public function testLevel() {
extract($this->settings);
$this->Tree = new $modelClass();
$this->Tree->Behaviors->attach('Tree', array('level' => 'level'));
$this->Tree->initialize(2, 2);
$result = $this->Tree->findByName('1. Root');
$this->assertEquals(0, $result[$modelClass][$level]);
$result = $this->Tree->findByName('1.1');
$this->assertEquals(1, $result[$modelClass][$level]);
$result = $this->Tree->findByName('1.2.2');
$this->assertEquals(2, $result[$modelClass][$level]);
$result = $this->Tree->findByName('1.2.1');
$this->assertEquals(2, $result[$modelClass][$level]);
// Save with parent_id not set
$this->Tree->save(array('id' => $result[$modelClass]['id'], 'name' => 'foo'));
$result = $this->Tree->findByName('foo');
$this->assertEquals(2, $result[$modelClass][$level]);
// Save with parent_id not changed
$this->Tree->save(array(
'id' => $result[$modelClass]['id'],
'parent_id' => $result[$modelClass]['parent_id'],
'name' => 'foo2'
));
$result = $this->Tree->findByName('foo2');
$this->assertEquals(2, $result[$modelClass][$level]);
// Save with parent_id changed
$result = $this->Tree->findByName('1.1');
$this->Tree->save(array(
'id' => $result[$modelClass]['id'],
'parent_id' => ''
));
$result = $this->Tree->findByName('1.1');
$this->assertEquals(0, $result[$modelClass][$level]);
$result = $this->Tree->findByName('1.1.2');
$this->assertEquals(1, $result[$modelClass][$level]);
$parent = $this->Tree->findByName('1.1.2');
$result = $this->Tree->findByName('1.2');
$this->Tree->save(array(
'id' => $result[$modelClass]['id'],
'parent_id' => $parent[$modelClass]['id']
));
$result = $this->Tree->findByName('1.2');
$this->assertEquals(2, $result[$modelClass][$level]);
$result = $this->Tree->findByName('1.2.2');
$this->assertEquals(3, $result[$modelClass][$level]);
}
}

View file

@ -4,23 +4,23 @@
*
* A tree test using scope
*
* PHP 5
*
* CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice
*
* @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
* @package Cake.Test.Case.Model.Behavior
* @since CakePHP(tm) v 1.2.0.5330
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
App::uses('Model', 'Model');
App::uses('AppModel', 'Model');
require_once dirname(dirname(__FILE__)) . DS . 'models.php';
/**
@ -33,7 +33,7 @@ class TreeBehaviorScopedTest extends CakeTestCase {
/**
* Whether backup global state for each test method or not
*
* @var bool false
* @var bool
*/
public $backupGlobals = false;
@ -63,6 +63,7 @@ class TreeBehaviorScopedTest extends CakeTestCase {
*/
public function testStringScope() {
$this->Tree = new FlagTree();
$this->Tree->order = null;
$this->Tree->initialize(2, 3);
$this->Tree->id = 1;
@ -78,11 +79,11 @@ class TreeBehaviorScopedTest extends CakeTestCase {
);
$this->assertEquals($expected, $result);
$this->Tree->Behaviors->attach('Tree', array('scope' => 'FlagTree.flag = 1'));
$this->Tree->Behaviors->load('Tree', array('scope' => 'FlagTree.flag = 1'));
$this->assertEquals(array(), $this->Tree->children());
$this->Tree->id = 1;
$this->Tree->Behaviors->attach('Tree', array('scope' => 'FlagTree.flag = 1'));
$this->Tree->Behaviors->load('Tree', array('scope' => 'FlagTree.flag = 1'));
$result = $this->Tree->children();
$expected = array(array('FlagTree' => array('id' => '2', 'name' => '1.1', 'parent_id' => '1', 'lft' => '2', 'rght' => '9', 'flag' => '1')));
@ -99,6 +100,7 @@ class TreeBehaviorScopedTest extends CakeTestCase {
*/
public function testArrayScope() {
$this->Tree = new FlagTree();
$this->Tree->order = null;
$this->Tree->initialize(2, 3);
$this->Tree->id = 1;
@ -114,11 +116,11 @@ class TreeBehaviorScopedTest extends CakeTestCase {
);
$this->assertEquals($expected, $result);
$this->Tree->Behaviors->attach('Tree', array('scope' => array('FlagTree.flag' => 1)));
$this->Tree->Behaviors->load('Tree', array('scope' => array('FlagTree.flag' => 1)));
$this->assertEquals(array(), $this->Tree->children());
$this->Tree->id = 1;
$this->Tree->Behaviors->attach('Tree', array('scope' => array('FlagTree.flag' => 1)));
$this->Tree->Behaviors->load('Tree', array('scope' => array('FlagTree.flag' => 1)));
$result = $this->Tree->children();
$expected = array(array('FlagTree' => array('id' => '2', 'name' => '1.1', 'parent_id' => '1', 'lft' => '2', 'rght' => '9', 'flag' => '1')));
@ -128,6 +130,29 @@ class TreeBehaviorScopedTest extends CakeTestCase {
$this->assertEquals(11, $this->Tree->find('count'));
}
/**
* testSaveWithParentAndInvalidScope method
*
* Attempting to save an invalid data should not trigger an `Undefined offset`
* error
*
* @return void
*/
public function testSaveWithParentAndInvalidScope() {
$this->Tree = new FlagTree();
$this->Tree->order = null;
$data = $this->Tree->create(array(
'name' => 'Flag',
));
$tree = $this->Tree->save($data);
$this->Tree->Behaviors->load('Tree', array(
'scope' => array('FlagTree.flag' => 100)
));
$tree['FlagTree']['parent_id'] = 1;
$result = $this->Tree->save($tree);
$this->assertFalse($result);
}
/**
* testMoveUpWithScope method
*
@ -135,7 +160,8 @@ class TreeBehaviorScopedTest extends CakeTestCase {
*/
public function testMoveUpWithScope() {
$this->Ad = new Ad();
$this->Ad->Behaviors->attach('Tree', array('scope' => 'Campaign'));
$this->Ad->order = null;
$this->Ad->Behaviors->load('Tree', array('scope' => 'Campaign'));
$this->Ad->moveUp(6);
$this->Ad->id = 4;
@ -151,7 +177,8 @@ class TreeBehaviorScopedTest extends CakeTestCase {
*/
public function testMoveDownWithScope() {
$this->Ad = new Ad();
$this->Ad->Behaviors->attach('Tree', array('scope' => 'Campaign'));
$this->Ad->order = null;
$this->Ad->Behaviors->load('Tree', array('scope' => 'Campaign'));
$this->Ad->moveDown(6);
$this->Ad->id = 4;
@ -168,10 +195,12 @@ class TreeBehaviorScopedTest extends CakeTestCase {
*/
public function testTranslatingTree() {
$this->Tree = new FlagTree();
$this->Tree->order = null;
$this->Tree->cacheQueries = false;
$this->Tree->Behaviors->attach('Translate', array('title'));
$this->Tree->Behaviors->load('Translate', array('title'));
//Save
$this->Tree->create();
$this->Tree->locale = 'eng';
$data = array('FlagTree' => array(
'title' => 'name #1',
@ -285,9 +314,11 @@ class TreeBehaviorScopedTest extends CakeTestCase {
public function testAliasesWithScopeInTwoTreeAssociations() {
extract($this->settings);
$this->Tree = new $modelClass();
$this->Tree->order = null;
$this->Tree->initialize(2, 2);
$this->TreeTwo = new NumberTreeTwo();
$this->TreeTwo->order = null;
$record = $this->Tree->find('first');
@ -307,7 +338,7 @@ class TreeBehaviorScopedTest extends CakeTestCase {
)
)
));
$this->TreeTwo->Behaviors->attach('Tree', array(
$this->TreeTwo->Behaviors->load('Tree', array(
'scope' => 'FirstTree'
));
@ -332,4 +363,229 @@ class TreeBehaviorScopedTest extends CakeTestCase {
));
$this->assertEquals($expected, $result);
}
/**
* testGenerateTreeListWithScope method
*
* @return void
*/
public function testGenerateTreeListWithScope() {
extract($this->settings);
$this->Tree = new $modelClass();
$this->Tree->order = null;
$this->Tree->initialize(2, 3);
$this->Tree->id = 1;
$this->Tree->saveField('flag', 1);
$this->Tree->id = 2;
$this->Tree->saveField('flag', 1);
$this->Tree->Behaviors->load('Tree', array('scope' => array('FlagTree.flag' => 1)));
$result = $this->Tree->generateTreeList();
$expected = array(
1 => '1. Root',
2 => '_1.1'
);
$this->assertEquals($expected, $result);
// As string.
$this->Tree->Behaviors->load('Tree', array('scope' => 'FlagTree.flag = 1'));
$result = $this->Tree->generateTreeList();
$this->assertEquals($expected, $result);
// Merging conditions.
$result = $this->Tree->generateTreeList(array('FlagTree.id >' => 1));
$expected = array(
2 => '1.1'
);
$this->assertEquals($expected, $result);
}
/**
* testRecoverUsingParentMode method
*
* @return void
*/
public function testRecoverUsingParentMode() {
extract($this->settings);
$this->Tree = new $modelClass();
$this->Tree->order = null;
$this->Tree->initialize(2, 3);
$this->Tree->Behaviors->load('Tree', array('scope' => 'FlagTree.flag = 1'));
$this->Tree->Behaviors->disable('Tree');
$this->Tree->create();
$this->Tree->save(array('name' => 'Main', $parentField => null, $leftField => 0, $rightField => 0, 'flag' => 1));
$node1 = $this->Tree->id;
$this->Tree->create();
$this->Tree->save(array('name' => 'About Us', $parentField => $node1, $leftField => 0, $rightField => 0, 'flag' => 1));
$node11 = $this->Tree->id;
$this->Tree->create();
$this->Tree->save(array('name' => 'Programs', $parentField => $node1, $leftField => 0, $rightField => 0, 'flag' => 1));
$node12 = $this->Tree->id;
$this->Tree->create();
$this->Tree->save(array('name' => 'Mission and History', $parentField => $node11, $leftField => 0, $rightField => 0, 'flag' => 1));
$this->Tree->create();
$this->Tree->save(array('name' => 'Overview', $parentField => $node12, $leftField => 0, $rightField => 0, 'flag' => 1));
$this->Tree->Behaviors->enable('Tree');
$result = $this->Tree->verify();
$this->assertNotSame(true, $result);
$result = $this->Tree->recover();
$this->assertTrue($result);
$result = $this->Tree->verify();
$this->assertTrue($result);
$result = $this->Tree->find('first', array(
'fields' => array('name', $parentField, $leftField, $rightField, 'flag'),
'conditions' => array('name' => 'Main'),
'recursive' => -1
));
$expected = array(
$modelClass => array(
'name' => 'Main',
$parentField => null,
$leftField => 1,
$rightField => 10,
'flag' => 1
)
);
$this->assertEquals($expected, $result);
}
/**
* testRecoverFromMissingParent method
*
* @return void
*/
public function testRecoverFromMissingParent() {
extract($this->settings);
$this->Tree = new $modelClass();
$this->Tree->order = null;
$this->Tree->initialize(2, 2);
$this->Tree->id = 1;
$this->Tree->saveField('flag', 1);
$this->Tree->id = 2;
$this->Tree->saveField('flag', 1);
$this->Tree->Behaviors->load('Tree', array('scope' => array('FlagTree.flag' => 1)));
$result = $this->Tree->findByName('1.1');
$this->Tree->updateAll(array($parentField => 999999), array('id' => $result[$modelClass]['id']));
$result = $this->Tree->verify();
$this->assertNotSame(true, $result);
$result = $this->Tree->recover();
$this->assertTrue($result);
$result = $this->Tree->verify();
$this->assertTrue($result);
}
/**
* testDetectInvalidParents method
*
* @return void
*/
public function testDetectInvalidParents() {
extract($this->settings);
$this->Tree = new $modelClass();
$this->Tree->order = null;
$this->Tree->initialize(2, 2);
$this->Tree->id = 1;
$this->Tree->saveField('flag', 1);
$this->Tree->id = 2;
$this->Tree->saveField('flag', 1);
$this->Tree->Behaviors->load('Tree', array('scope' => array('FlagTree.flag' => 1)));
$this->Tree->updateAll(array($parentField => null));
$result = $this->Tree->verify();
$this->assertNotSame(true, $result);
$result = $this->Tree->recover();
$this->assertTrue($result);
$result = $this->Tree->verify();
$this->assertTrue($result);
}
/**
* testDetectInvalidLftsRghts method
*
* @return void
*/
public function testDetectInvalidLftsRghts() {
extract($this->settings);
$this->Tree = new $modelClass();
$this->Tree->order = null;
$this->Tree->initialize(2, 2);
$this->Tree->id = 1;
$this->Tree->saveField('flag', 1);
$this->Tree->id = 2;
$this->Tree->saveField('flag', 1);
$this->Tree->Behaviors->load('Tree', array('scope' => array('FlagTree.flag' => 1)));
$this->Tree->updateAll(array($leftField => 0, $rightField => 0));
$result = $this->Tree->verify();
$this->assertNotSame(true, $result);
$this->Tree->recover();
$result = $this->Tree->verify();
$this->assertTrue($result);
}
/**
* Reproduces a situation where a single node has lft= rght, and all other lft and rght fields follow sequentially
*
* @return void
*/
public function testDetectEqualLftsRghts() {
extract($this->settings);
$this->Tree = new $modelClass();
$this->Tree->order = null;
$this->Tree->initialize(1, 3);
$this->Tree->id = 1;
$this->Tree->saveField('flag', 1);
$this->Tree->id = 2;
$this->Tree->saveField('flag', 1);
$this->Tree->Behaviors->load('Tree', array('scope' => array('FlagTree.flag' => 1)));
$result = $this->Tree->findByName('1.1');
$this->Tree->updateAll(array($rightField => $result[$modelClass][$leftField]), array('id' => $result[$modelClass]['id']));
$this->Tree->updateAll(array($leftField => $this->Tree->escapeField($leftField) . ' -1'),
array($leftField . ' >' => $result[$modelClass][$leftField]));
$this->Tree->updateAll(array($rightField => $this->Tree->escapeField($rightField) . ' -1'),
array($rightField . ' >' => $result[$modelClass][$leftField]));
$result = $this->Tree->verify();
$this->assertNotSame(true, $result);
$result = $this->Tree->recover();
$this->assertTrue($result);
$result = $this->Tree->verify();
$this->assertTrue($result);
}
}

View file

@ -2,19 +2,18 @@
/**
* Tree Behavior test file - runs all the tree behavior tests
*
* PHP 5
*
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://cakephp.org CakePHP(tm) Project
* @package Cake.Test.Case.Model.Behavior
* @since CakePHP(tm) v 2.0
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
/**

View file

@ -4,24 +4,24 @@
*
* Tree test using UUIDs
*
* PHP 5
*
* CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice
*
* @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
* @package Cake.Test.Case.Model.Behavior
* @since CakePHP(tm) v 1.2.0.5330
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
App::uses('Model', 'Model');
App::uses('AppModel', 'Model');
App::uses('String', 'Utility');
App::uses('CakeText', 'Utility');
require_once dirname(dirname(__FILE__)) . DS . 'models.php';
/**
@ -34,7 +34,7 @@ class TreeBehaviorUuidTest extends CakeTestCase {
/**
* Whether backup global state for each test method or not
*
* @var bool false
* @var bool
*/
public $backupGlobals = false;
@ -65,6 +65,7 @@ class TreeBehaviorUuidTest extends CakeTestCase {
public function testAddWithPreSpecifiedId() {
extract($this->settings);
$this->Tree = new $modelClass();
$this->Tree->order = null;
$this->Tree->initialize(2, 2);
$data = $this->Tree->find('first', array(
@ -72,7 +73,7 @@ class TreeBehaviorUuidTest extends CakeTestCase {
'conditions' => array($modelClass . '.name' => '1.1')
));
$id = String::uuid();
$id = CakeText::uuid();
$this->Tree->create();
$result = $this->Tree->save(array($modelClass => array(
'id' => $id,
@ -96,6 +97,7 @@ class TreeBehaviorUuidTest extends CakeTestCase {
public function testMovePromote() {
extract($this->settings);
$this->Tree = new $modelClass();
$this->Tree->order = null;
$this->Tree->initialize(2, 2);
$this->Tree->id = null;
@ -106,12 +108,12 @@ class TreeBehaviorUuidTest extends CakeTestCase {
$this->Tree->id = $data[$modelClass]['id'];
$this->Tree->saveField($parentField, $parentId);
$direct = $this->Tree->children($parentId, true, array('name', $leftField, $rightField));
$expects = array(array($modelClass => array('name' => '1.1', $leftField => 2, $rightField => 5)),
$expected = array(array($modelClass => array('name' => '1.1', $leftField => 2, $rightField => 5)),
array($modelClass => array('name' => '1.2', $leftField => 6, $rightField => 11)),
array($modelClass => array('name' => '1.1.1', $leftField => 12, $rightField => 13)));
$this->assertEquals($direct, $expects);
$this->assertEquals($expected, $direct);
$validTree = $this->Tree->verify();
$this->assertSame($validTree, true);
$this->assertTrue($validTree);
}
/**
@ -122,6 +124,7 @@ class TreeBehaviorUuidTest extends CakeTestCase {
public function testMoveWithWhitelist() {
extract($this->settings);
$this->Tree = new $modelClass();
$this->Tree->order = null;
$this->Tree->initialize(2, 2);
$this->Tree->id = null;
@ -149,6 +152,7 @@ class TreeBehaviorUuidTest extends CakeTestCase {
public function testRemoveNoChildren() {
extract($this->settings);
$this->Tree = new $modelClass();
$this->Tree->order = null;
$this->Tree->initialize(2, 2);
$initialCount = $this->Tree->find('count');
@ -159,7 +163,7 @@ class TreeBehaviorUuidTest extends CakeTestCase {
$this->assertEquals($initialCount, $laterCount);
$nodes = $this->Tree->find('list', array('order' => $leftField));
$expects = array(
$expected = array(
'1. Root',
'1.1',
'1.1.2',
@ -169,10 +173,10 @@ class TreeBehaviorUuidTest extends CakeTestCase {
'1.1.1',
);
$this->assertEquals(array_values($nodes), $expects);
$this->assertEquals($expected, array_values($nodes));
$validTree = $this->Tree->verify();
$this->assertSame($validTree, true);
$this->assertTrue($validTree);
}
/**
@ -183,6 +187,7 @@ class TreeBehaviorUuidTest extends CakeTestCase {
public function testRemoveAndDeleteNoChildren() {
extract($this->settings);
$this->Tree = new $modelClass();
$this->Tree->order = null;
$this->Tree->initialize(2, 2);
$initialCount = $this->Tree->find('count');
@ -193,7 +198,7 @@ class TreeBehaviorUuidTest extends CakeTestCase {
$this->assertEquals($initialCount - 1, $laterCount);
$nodes = $this->Tree->find('list', array('order' => $leftField));
$expects = array(
$expected = array(
'1. Root',
'1.1',
'1.1.2',
@ -201,10 +206,10 @@ class TreeBehaviorUuidTest extends CakeTestCase {
'1.2.1',
'1.2.2',
);
$this->assertEquals(array_values($nodes), $expects);
$this->assertEquals($expected, array_values($nodes));
$validTree = $this->Tree->verify();
$this->assertSame($validTree, true);
$this->assertTrue($validTree);
}
/**
@ -215,24 +220,25 @@ class TreeBehaviorUuidTest extends CakeTestCase {
public function testChildren() {
extract($this->settings);
$this->Tree = new $modelClass();
$this->Tree->order = null;
$this->Tree->initialize(2, 2);
$data = $this->Tree->find('first', array('conditions' => array($modelClass . '.name' => '1. Root')));
$this->Tree->id = $data[$modelClass]['id'];
$direct = $this->Tree->children(null, true, array('name', $leftField, $rightField));
$expects = array(array($modelClass => array('name' => '1.1', $leftField => 2, $rightField => 7)),
$expected = array(array($modelClass => array('name' => '1.1', $leftField => 2, $rightField => 7)),
array($modelClass => array('name' => '1.2', $leftField => 8, $rightField => 13)));
$this->assertEquals($direct, $expects);
$this->assertEquals($expected, $direct);
$total = $this->Tree->children(null, null, array('name', $leftField, $rightField));
$expects = array(array($modelClass => array('name' => '1.1', $leftField => 2, $rightField => 7)),
$expected = array(array($modelClass => array('name' => '1.1', $leftField => 2, $rightField => 7)),
array($modelClass => array('name' => '1.1.1', $leftField => 3, $rightField => 4)),
array($modelClass => array('name' => '1.1.2', $leftField => 5, $rightField => 6)),
array($modelClass => array('name' => '1.2', $leftField => 8, $rightField => 13)),
array($modelClass => array('name' => '1.2.1', $leftField => 9, $rightField => 10)),
array($modelClass => array('name' => '1.2.2', $leftField => 11, $rightField => 12)));
$this->assertEquals($total, $expects);
$this->assertEquals($expected, $total);
}
/**
@ -243,6 +249,7 @@ class TreeBehaviorUuidTest extends CakeTestCase {
public function testNoAmbiguousColumn() {
extract($this->settings);
$this->Tree = new $modelClass();
$this->Tree->order = null;
$this->Tree->initialize(2, 2);
$this->Tree->bindModel(array('belongsTo' => array('Dummy' =>
@ -255,12 +262,12 @@ class TreeBehaviorUuidTest extends CakeTestCase {
$this->Tree->id = $data[$modelClass]['id'];
$direct = $this->Tree->children(null, true, array('name', $leftField, $rightField));
$expects = array(array($modelClass => array('name' => '1.1', $leftField => 2, $rightField => 7)),
$expected = array(array($modelClass => array('name' => '1.1', $leftField => 2, $rightField => 7)),
array($modelClass => array('name' => '1.2', $leftField => 8, $rightField => 13)));
$this->assertEquals($direct, $expects);
$this->assertEquals($expected, $direct);
$total = $this->Tree->children(null, null, array('name', $leftField, $rightField));
$expects = array(
$expected = array(
array($modelClass => array('name' => '1.1', $leftField => 2, $rightField => 7)),
array($modelClass => array('name' => '1.1.1', $leftField => 3, $rightField => 4)),
array($modelClass => array('name' => '1.1.2', $leftField => 5, $rightField => 6)),
@ -268,7 +275,7 @@ class TreeBehaviorUuidTest extends CakeTestCase {
array($modelClass => array('name' => '1.2.1', $leftField => 9, $rightField => 10)),
array($modelClass => array('name' => '1.2.2', $leftField => 11, $rightField => 12))
);
$this->assertEquals($total, $expects);
$this->assertEquals($expected, $total);
}
/**
@ -279,12 +286,13 @@ class TreeBehaviorUuidTest extends CakeTestCase {
public function testGenerateTreeListWithSelfJoin() {
extract($this->settings);
$this->Tree = new $modelClass();
$this->Tree->order = null;
$this->Tree->bindModel(array('belongsTo' => array('Dummy' =>
array('className' => $modelClass, 'foreignKey' => $parentField, 'conditions' => array('Dummy.id' => null)))), false);
$this->Tree->initialize(2, 2);
$result = $this->Tree->generateTreeList();
$expected = array('1. Root', '_1.1', '__1.1.1', '__1.1.2', '_1.2', '__1.2.1', '__1.2.2');
$this->assertSame(array_values($result), $expected);
$this->assertSame($expected, array_values($result));
}
}