Fixing issues where ModelBehavior::detach() would not detach behaviors when a plugin.name was provided. This change makes detach() work like attach(). Tests added. Fixes #711

This commit is contained in:
Mark Story 2010-05-11 23:08:14 -04:00
parent 0648c6604b
commit 79839c07d2
2 changed files with 23 additions and 0 deletions

View file

@ -372,6 +372,7 @@ class BehaviorCollection extends Object {
* @access public
*/
function detach($name) {
list($plugin, $name) = pluginSplit($name);
if (isset($this->{$name})) {
$this->{$name}->cleanup(ClassRegistry::getObject($this->modelName));
unset($this->{$name});

View file

@ -504,6 +504,28 @@ class BehaviorTest extends CakeTestCase {
$this->assertEqual($Apple->Behaviors->Test->settings['Apple'], $expected);
}
/**
* test that attach()/detach() works with plugin.banana
*
* @return void
*/
function testDetachWithPluginNames() {
$Apple = new Apple();
$Apple->Behaviors->attach('Plugin.Test');
$this->assertTrue(isset($Apple->Behaviors->Test), 'Missing behavior');
$this->assertEqual($Apple->Behaviors->attached(), array('Test'));
$Apple->Behaviors->detach('Plugin.Test');
$this->assertEqual($Apple->Behaviors->attached(), array());
$Apple->Behaviors->attach('Plugin.Test');
$this->assertTrue(isset($Apple->Behaviors->Test), 'Missing behavior');
$this->assertEqual($Apple->Behaviors->attached(), array('Test'));
$Apple->Behaviors->detach('Test');
$this->assertEqual($Apple->Behaviors->attached(), array());
}
/**
* test that attaching a non existant Behavior triggers a cake error.
*