public function testUpdateWithPlugins()
{
Plugin::unload();
Plugin::load('TestPlugin', ['routes' => true]);
Plugin::load('Nested/TestPluginTwo');
Plugin::routes();
$this->_clean();
$this->Task->expects($this->atLeast(3))->method('getControllerList')->will($this->returnCallback(function ($plugin, $prefix) {
switch ($plugin) {
case 'TestPlugin':
$return = ['PluginController.php'];
break;
case 'Nested/TestPluginTwo':
if ($prefix !== null) {
$return = [];
break;
}
$return = ['PluginTwoController.php'];
break;
default:
if ($prefix !== null) {
$return = ['PostsController.php', 'BigLongNamesController.php'];
break;
}
$return = ['CommentsController.php', 'PostsController.php', 'BigLongNamesController.php'];
}
return $return;
}));
$this->Task->startup();
$this->Task->acoUpdate();
$Aco = $this->Task->Acl->Aco;
$result = $Aco->node('controllers/TestPlugin/Plugin');
$this->assertNotFalse($result);
$this->assertEquals($result->toArray()[0]['alias'], 'Plugin');
$result = $Aco->node('controllers/TestPlugin/Admin/Plugin');
$this->assertNotFalse($result);
$this->assertEquals($result->toArray()[0]['alias'], 'Plugin');
$result = $Aco->node('controllers/Nested\\TestPluginTwo/PluginTwo');
$this->assertNotFalse($result);
$result = $result->toArray();
$this->assertEquals($result[0]['alias'], 'PluginTwo');
$result = $Aco->find('children', ['for' => $result[0]['id']])->toArray();
$this->assertEquals(count($result), 3);
$this->assertEquals($result[0]['alias'], 'index');
$this->assertEquals($result[1]['alias'], 'add');
$this->assertEquals($result[2]['alias'], 'edit');
}