mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2025-01-19 02:56:15 +00:00
Updating delete() and adding test cases. Refactoring out common methods.
This commit is contained in:
parent
449c390d48
commit
acaba022c6
2 changed files with 59 additions and 16 deletions
|
@ -142,31 +142,24 @@ class AclShell extends Shell {
|
|||
extract($this->__dataVars());
|
||||
|
||||
$class = ucfirst($this->args[0]);
|
||||
$object = ClassRegistry::init($class);
|
||||
$parent = $this->parseIdentifier($this->args[1]);
|
||||
|
||||
if (!empty($parent) && $parent != '/' && $parent != 'root') {
|
||||
$parent = $object->node($parent);
|
||||
if (empty($parent)) {
|
||||
$this->err(sprintf(__('Could not find parent node using reference "%s"', true), $this->args[1]));
|
||||
return;
|
||||
} else {
|
||||
$parent = Set::extract($parent, "0.{$class}.id");
|
||||
}
|
||||
$parent = $this->_getNodeId($class, $parent);
|
||||
} else {
|
||||
$parent = null;
|
||||
}
|
||||
|
||||
$data = $this->parseIdentifier($this->args[2]);
|
||||
if (is_string($data) && !$data == '/') {
|
||||
if (is_string($data) && $data != '/') {
|
||||
$data = array('alias' => $data);
|
||||
} else if (is_string($data)) {
|
||||
$this->error(__('/ can not be used as an alias!', true), __('\t/ is the root, please supply a sub alias', true));
|
||||
} elseif (is_string($data)) {
|
||||
$this->error(__('/ can not be used as an alias!', true), __("\t/ is the root, please supply a sub alias", true));
|
||||
}
|
||||
|
||||
$data['parent_id'] = $parent;
|
||||
$object->create();
|
||||
if ($object->save($data)) {
|
||||
$this->Acl->{$class}->create();
|
||||
if ($this->Acl->{$class}->save($data)) {
|
||||
$this->out(sprintf(__("New %s '%s' created.\n", true), $class, $this->args[2]), true);
|
||||
} else {
|
||||
$this->err(sprintf(__("There was a problem creating a new %s '%s'.", true), $class, $this->args[2]));
|
||||
|
@ -182,7 +175,11 @@ class AclShell extends Shell {
|
|||
$this->_checkArgs(2, 'delete');
|
||||
$this->checkNodeType();
|
||||
extract($this->__dataVars());
|
||||
if (!$this->Acl->{$class}->delete($this->args[1])) {
|
||||
|
||||
$identifier = $this->parseIdentifier($this->args[1]);
|
||||
$nodeId = $this->_getNodeId($class, $identifier);
|
||||
|
||||
if (!$this->Acl->{$class}->delete($nodeId)) {
|
||||
$this->error(__("Node Not Deleted", true), sprintf(__("There was an error deleting the %s. Check that the node exists", true), $class) . ".\n");
|
||||
}
|
||||
$this->out(sprintf(__("%s deleted", true), $class) . ".\n", true);
|
||||
|
@ -461,7 +458,7 @@ class AclShell extends Shell {
|
|||
return false;
|
||||
}
|
||||
extract($this->__dataVars($this->args[0]));
|
||||
$key = (ife(is_numeric($this->args[1]), $secondary_id, 'alias'));
|
||||
$key = is_numeric($this->args[1]) ? $secondary_id : 'alias';
|
||||
$conditions = array($class . '.' . $key => $this->args[1]);
|
||||
$possibility = $this->Acl->{$class}->find('all', compact('conditions'));
|
||||
if (empty($possibility)) {
|
||||
|
@ -487,6 +484,23 @@ class AclShell extends Shell {
|
|||
return $identifier;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the node for a given identifier. $identifier can either be a string alias
|
||||
* or an array of properties to use in AcoNode::node()
|
||||
*
|
||||
* @param string $class Class type you want (Aro/Aco)
|
||||
* @param mixed $identifier A mixed identifier for finding the node.
|
||||
* @return int Integer of NodeId. Will trigger an error if nothing is found.
|
||||
**/
|
||||
function _getNodeId($class, $identifier) {
|
||||
$node = $this->Acl->{$class}->node($identifier);
|
||||
if (empty($node)) {
|
||||
$this->error(sprintf(__('Could not find node using reference "%s"', true), $identifier));
|
||||
return;
|
||||
}
|
||||
return Set::extract($node, "0.{$class}.id");
|
||||
}
|
||||
|
||||
/**
|
||||
* get params for standard Acl methods
|
||||
*
|
||||
|
|
|
@ -46,7 +46,7 @@ Mock::generatePartial(
|
|||
);
|
||||
Mock::generatePartial(
|
||||
'AclShell', 'MockAclShell',
|
||||
array('in', 'out', 'hr', 'createFile')
|
||||
array('in', 'out', 'hr', 'createFile', 'error', 'err')
|
||||
);
|
||||
|
||||
Mock::generate('AclComponent', 'MockAclShellAclComponent');
|
||||
|
@ -94,6 +94,9 @@ class AclShellTest extends CakeTestCase {
|
|||
$this->Task =& new MockAclShell($this->Dispatcher);
|
||||
$this->Task->Dispatch = new $this->Dispatcher;
|
||||
$this->Task->params['datasource'] = 'test_suite';
|
||||
$this->Task->Acl =& new AclComponent();
|
||||
$controller = null;
|
||||
$this->Task->Acl->startup($controller);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -173,6 +176,32 @@ class AclShellTest extends CakeTestCase {
|
|||
$this->assertEqual($result['Aro']['model'], 'User');
|
||||
$this->assertEqual($result['Aro']['foreign_key'], 3);
|
||||
$this->assertEqual($result['Aro']['parent_id'], $id);
|
||||
|
||||
$this->Task->args = array('aro', 'root', 'somealias');
|
||||
$this->Task->expectAt(2, 'out', array(new PatternExpectation('/created/'), '*'));
|
||||
$this->Task->create();
|
||||
|
||||
$Aro =& ClassRegistry::init('Aro');
|
||||
$result = $Aro->read();
|
||||
$this->assertEqual($result['Aro']['alias'], 'somealias');
|
||||
$this->assertEqual($result['Aro']['model'], null);
|
||||
$this->assertEqual($result['Aro']['foreign_key'], null);
|
||||
$this->assertEqual($result['Aro']['parent_id'], null);
|
||||
}
|
||||
|
||||
/**
|
||||
* test the delete method with different node types.
|
||||
*
|
||||
* @return void
|
||||
**/
|
||||
function testDelete() {
|
||||
$this->Task->args = array('aro', 'AuthUser.1');
|
||||
$this->Task->expectAt(0, 'out', array(new NoPatternExpectation('/not/'), true));
|
||||
$this->Task->delete();
|
||||
|
||||
$Aro =& ClassRegistry::init('Aro');
|
||||
$result = $Aro->read(null, 3);
|
||||
$this->assertFalse($result);
|
||||
}
|
||||
}
|
||||
?>
|
Loading…
Add table
Reference in a new issue