2013-10-21 22:46:31 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Sabre\DAV;
|
|
|
|
|
|
|
|
class TreeTest extends \PHPUnit_Framework_TestCase {
|
|
|
|
|
|
|
|
function testNodeExists() {
|
|
|
|
|
|
|
|
$tree = new TreeMock();
|
|
|
|
|
|
|
|
$this->assertTrue($tree->nodeExists('hi'));
|
|
|
|
$this->assertFalse($tree->nodeExists('hello'));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
function testCopy() {
|
|
|
|
|
|
|
|
$tree = new TreeMock();
|
|
|
|
$tree->copy('hi','hi2');
|
|
|
|
|
|
|
|
$this->assertArrayHasKey('hi2', $tree->getNodeForPath('')->newDirectories);
|
|
|
|
$this->assertEquals('foobar', $tree->getNodeForPath('hi/file')->get());
|
|
|
|
$this->assertEquals(array('test1'=>'value'), $tree->getNodeForPath('hi/file')->getProperties(array()));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
function testMove() {
|
|
|
|
|
|
|
|
$tree = new TreeMock();
|
|
|
|
$tree->move('hi','hi2');
|
|
|
|
|
|
|
|
$this->assertEquals('hi2', $tree->getNodeForPath('hi')->getName());
|
|
|
|
$this->assertTrue($tree->getNodeForPath('hi')->isRenamed);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
function testDeepMove() {
|
|
|
|
|
|
|
|
$tree = new TreeMock();
|
|
|
|
$tree->move('hi/sub','hi2');
|
|
|
|
|
|
|
|
$this->assertArrayHasKey('hi2', $tree->getNodeForPath('')->newDirectories);
|
|
|
|
$this->assertTrue($tree->getNodeForPath('hi/sub')->isDeleted);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
function testDelete() {
|
|
|
|
|
|
|
|
$tree = new TreeMock();
|
|
|
|
$tree->delete('hi');
|
|
|
|
$this->assertTrue($tree->getNodeForPath('hi')->isDeleted);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
function testGetChildren() {
|
|
|
|
|
|
|
|
$tree = new TreeMock();
|
|
|
|
$children = $tree->getChildren('');
|
2016-05-11 00:26:44 +00:00
|
|
|
$this->assertEquals(2,count($children));
|
2013-10-21 22:46:31 +00:00
|
|
|
$this->assertEquals('hi', $children[0]->getName());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2016-05-11 00:26:44 +00:00
|
|
|
function testGetMultipleNodes() {
|
|
|
|
|
|
|
|
$tree = new TreeMock();
|
|
|
|
$result = $tree->getMultipleNodes(['hi/sub', 'hi/file']);
|
|
|
|
$this->assertArrayHasKey('hi/sub', $result);
|
|
|
|
$this->assertArrayHasKey('hi/file', $result);
|
|
|
|
|
|
|
|
$this->assertEquals('sub', $result['hi/sub']->getName());
|
|
|
|
$this->assertEquals('file', $result['hi/file']->getName());
|
|
|
|
|
|
|
|
}
|
|
|
|
function testGetMultipleNodes2() {
|
|
|
|
|
|
|
|
$tree = new TreeMock();
|
|
|
|
$result = $tree->getMultipleNodes(['multi/1', 'multi/2']);
|
|
|
|
$this->assertArrayHasKey('multi/1', $result);
|
|
|
|
$this->assertArrayHasKey('multi/2', $result);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2013-10-21 22:46:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
class TreeMock extends Tree {
|
|
|
|
|
|
|
|
private $nodes = array();
|
|
|
|
|
|
|
|
function __construct() {
|
|
|
|
|
2016-05-11 00:26:44 +00:00
|
|
|
$file = new TreeFileTester('file');
|
|
|
|
$file->properties = ['test1'=>'value'];
|
|
|
|
$file->data = 'foobar';
|
2013-10-21 22:46:31 +00:00
|
|
|
|
2016-05-11 00:26:44 +00:00
|
|
|
parent::__construct(
|
|
|
|
new TreeDirectoryTester('root', [
|
|
|
|
new TreeDirectoryTester('hi', [
|
|
|
|
new TreeDirectoryTester('sub'),
|
|
|
|
$file,
|
|
|
|
]),
|
|
|
|
new TreeMultiGetTester('multi', [
|
|
|
|
new TreeFileTester('1'),
|
|
|
|
new TreeFileTester('2'),
|
|
|
|
new TreeFileTester('3'),
|
|
|
|
])
|
|
|
|
])
|
|
|
|
);
|
2013-10-21 22:46:31 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
class TreeDirectoryTester extends SimpleCollection {
|
|
|
|
|
|
|
|
public $newDirectories = array();
|
|
|
|
public $newFiles = array();
|
|
|
|
public $isDeleted = false;
|
|
|
|
public $isRenamed = false;
|
|
|
|
|
|
|
|
function createDirectory($name) {
|
|
|
|
|
|
|
|
$this->newDirectories[$name] = true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
function createFile($name,$data = null) {
|
|
|
|
|
|
|
|
$this->newFiles[$name] = $data;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
function getChild($name) {
|
|
|
|
|
|
|
|
if (isset($this->newDirectories[$name])) return new TreeDirectoryTester($name);
|
|
|
|
if (isset($this->newFiles[$name])) return new TreeFileTester($name, $this->newFiles[$name]);
|
|
|
|
return parent::getChild($name);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2016-05-11 00:26:44 +00:00
|
|
|
function childExists($name) {
|
|
|
|
|
|
|
|
return !!$this->getChild($name);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2013-10-21 22:46:31 +00:00
|
|
|
function delete() {
|
|
|
|
|
|
|
|
$this->isDeleted = true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
function setName($name) {
|
|
|
|
|
|
|
|
$this->isRenamed = true;
|
|
|
|
$this->name = $name;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
class TreeFileTester extends File implements IProperties {
|
|
|
|
|
|
|
|
public $name;
|
|
|
|
public $data;
|
|
|
|
public $properties;
|
|
|
|
|
|
|
|
function __construct($name, $data = null) {
|
|
|
|
|
|
|
|
$this->name = $name;
|
|
|
|
if (is_null($data)) $data = 'bla';
|
|
|
|
$this->data = $data;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
function getName() {
|
|
|
|
|
|
|
|
return $this->name;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
function get() {
|
|
|
|
|
|
|
|
return $this->data;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
function getProperties($properties) {
|
|
|
|
|
|
|
|
return $this->properties;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2016-05-11 00:26:44 +00:00
|
|
|
/**
|
|
|
|
* Updates properties on this node.
|
|
|
|
*
|
|
|
|
* This method received a PropPatch object, which contains all the
|
|
|
|
* information about the update.
|
|
|
|
*
|
|
|
|
* To update specific properties, call the 'handle' method on this object.
|
|
|
|
* Read the PropPatch documentation for more information.
|
|
|
|
*
|
|
|
|
* @param array $mutations
|
|
|
|
* @return bool|array
|
|
|
|
*/
|
|
|
|
function propPatch(PropPatch $propPatch) {
|
2013-10-21 22:46:31 +00:00
|
|
|
|
2016-05-11 00:26:44 +00:00
|
|
|
$this->properties = $propPatch->getMutations();
|
|
|
|
$propPatch->setRemainingResultCode(200);
|
2013-10-21 22:46:31 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2016-05-11 00:26:44 +00:00
|
|
|
class TreeMultiGetTester extends TreeDirectoryTester implements IMultiGet {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This method receives a list of paths in it's first argument.
|
|
|
|
* It must return an array with Node objects.
|
|
|
|
*
|
|
|
|
* If any children are not found, you do not have to return them.
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
function getMultipleChildren(array $paths) {
|
|
|
|
|
|
|
|
$result = [];
|
|
|
|
foreach($paths as $path) {
|
|
|
|
try {
|
|
|
|
$child = $this->getChild($path);
|
|
|
|
$result[] = $child;
|
|
|
|
} catch (Exception\NotFound $e) {
|
|
|
|
// Do nothing
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $result;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|