|
|
|
@ -9,24 +9,34 @@ |
|
|
|
namespace Test\Files\Node; |
|
|
|
|
|
|
|
use OC\Files\FileInfo; |
|
|
|
use OC\Files\View; |
|
|
|
use OCP\Files\Config\IUserMountCache; |
|
|
|
use OCP\Files\IRootFolder; |
|
|
|
use OCP\Files\Node; |
|
|
|
use OCP\ILogger; |
|
|
|
use OCP\IUserManager; |
|
|
|
use OCP\Files\NotFoundException; |
|
|
|
|
|
|
|
class NodeTest extends \Test\TestCase { |
|
|
|
/** |
|
|
|
* Class NodeTest |
|
|
|
* |
|
|
|
* @package Test\Files\Node |
|
|
|
*/ |
|
|
|
abstract class NodeTest extends \Test\TestCase { |
|
|
|
/** @var \OC\User\User */ |
|
|
|
private $user; |
|
|
|
protected $user; |
|
|
|
/** @var \OC\Files\Mount\Manager */ |
|
|
|
private $manager; |
|
|
|
protected $manager; |
|
|
|
/** @var \OC\Files\View|\PHPUnit_Framework_MockObject_MockObject */ |
|
|
|
private $view; |
|
|
|
protected $view; |
|
|
|
/** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject */ |
|
|
|
private $root; |
|
|
|
protected $root; |
|
|
|
/** @var \OCP\Files\Config\IUserMountCache|\PHPUnit_Framework_MockObject_MockObject */ |
|
|
|
private $userMountCache; |
|
|
|
protected $userMountCache; |
|
|
|
/** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */ |
|
|
|
private $logger; |
|
|
|
protected $logger; |
|
|
|
/** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */ |
|
|
|
private $userManager; |
|
|
|
protected $userManager; |
|
|
|
|
|
|
|
protected function setUp() { |
|
|
|
parent::setUp(); |
|
|
|
@ -54,6 +64,29 @@ class NodeTest extends \Test\TestCase { |
|
|
|
->getMock(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @param IRootFolder $root |
|
|
|
* @param View $view |
|
|
|
* @param string $path |
|
|
|
* @return Node |
|
|
|
*/ |
|
|
|
protected abstract function createTestNode($root, $view, $path); |
|
|
|
|
|
|
|
/** |
|
|
|
* @return string |
|
|
|
*/ |
|
|
|
protected abstract function getNodeClass(); |
|
|
|
|
|
|
|
/** |
|
|
|
* @return string |
|
|
|
*/ |
|
|
|
protected abstract function getNonExistingNodeClass(); |
|
|
|
|
|
|
|
/** |
|
|
|
* @return string |
|
|
|
*/ |
|
|
|
protected abstract function getViewDeleteMethod(); |
|
|
|
|
|
|
|
protected function getMockStorage() { |
|
|
|
$storage = $this->getMockBuilder('\OCP\Files\Storage') |
|
|
|
->disableOriginalConstructor() |
|
|
|
@ -68,6 +101,104 @@ class NodeTest extends \Test\TestCase { |
|
|
|
return new FileInfo('', $this->getMockStorage(), '', $data, null); |
|
|
|
} |
|
|
|
|
|
|
|
public function testDelete() { |
|
|
|
$this->root->expects($this->exactly(2)) |
|
|
|
->method('emit') |
|
|
|
->will($this->returnValue(true)); |
|
|
|
$this->root->expects($this->any()) |
|
|
|
->method('getUser') |
|
|
|
->will($this->returnValue($this->user)); |
|
|
|
|
|
|
|
$this->view->expects($this->once()) |
|
|
|
->method('getFileInfo') |
|
|
|
->with('/bar/foo') |
|
|
|
->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_ALL]))); |
|
|
|
|
|
|
|
$this->view->expects($this->once()) |
|
|
|
->method($this->getViewDeleteMethod()) |
|
|
|
->with('/bar/foo') |
|
|
|
->will($this->returnValue(true)); |
|
|
|
|
|
|
|
$node = $this->createTestNode($this->root, $this->view, '/bar/foo'); |
|
|
|
$node->delete(); |
|
|
|
} |
|
|
|
|
|
|
|
public function testDeleteHooks() { |
|
|
|
$test = $this; |
|
|
|
$hooksRun = 0; |
|
|
|
/** |
|
|
|
* @param \OC\Files\Node\File $node |
|
|
|
*/ |
|
|
|
$preListener = function ($node) use (&$test, &$hooksRun) { |
|
|
|
$test->assertInstanceOf($this->getNodeClass(), $node); |
|
|
|
$test->assertEquals('foo', $node->getInternalPath()); |
|
|
|
$test->assertEquals('/bar/foo', $node->getPath()); |
|
|
|
$test->assertEquals(1, $node->getId()); |
|
|
|
$hooksRun++; |
|
|
|
}; |
|
|
|
|
|
|
|
/** |
|
|
|
* @param \OC\Files\Node\File $node |
|
|
|
*/ |
|
|
|
$postListener = function ($node) use (&$test, &$hooksRun) { |
|
|
|
$test->assertInstanceOf($this->getNonExistingNodeClass(), $node); |
|
|
|
$test->assertEquals('foo', $node->getInternalPath()); |
|
|
|
$test->assertEquals('/bar/foo', $node->getPath()); |
|
|
|
$test->assertEquals(1, $node->getId()); |
|
|
|
$test->assertEquals('text/plain', $node->getMimeType()); |
|
|
|
$hooksRun++; |
|
|
|
}; |
|
|
|
|
|
|
|
$root = new \OC\Files\Node\Root( |
|
|
|
$this->manager, |
|
|
|
$this->view, |
|
|
|
$this->user, |
|
|
|
$this->userMountCache, |
|
|
|
$this->logger, |
|
|
|
$this->userManager |
|
|
|
); |
|
|
|
|
|
|
|
$root->listen('\OC\Files', 'preDelete', $preListener); |
|
|
|
$root->listen('\OC\Files', 'postDelete', $postListener); |
|
|
|
|
|
|
|
$this->view->expects($this->any()) |
|
|
|
->method('getFileInfo') |
|
|
|
->with('/bar/foo') |
|
|
|
->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1, 'mimetype' => 'text/plain']))); |
|
|
|
|
|
|
|
$this->view->expects($this->once()) |
|
|
|
->method($this->getViewDeleteMethod()) |
|
|
|
->with('/bar/foo') |
|
|
|
->will($this->returnValue(true)); |
|
|
|
|
|
|
|
$this->view->expects($this->any()) |
|
|
|
->method('resolvePath') |
|
|
|
->with('/bar/foo') |
|
|
|
->will($this->returnValue([null, 'foo'])); |
|
|
|
|
|
|
|
$node = $this->createTestNode($root, $this->view, '/bar/foo'); |
|
|
|
$node->delete(); |
|
|
|
$this->assertEquals(2, $hooksRun); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @expectedException \OCP\Files\NotPermittedException |
|
|
|
*/ |
|
|
|
public function testDeleteNotPermitted() { |
|
|
|
$this->root->expects($this->any()) |
|
|
|
->method('getUser') |
|
|
|
->will($this->returnValue($this->user)); |
|
|
|
|
|
|
|
$this->view->expects($this->once()) |
|
|
|
->method('getFileInfo') |
|
|
|
->with('/bar/foo') |
|
|
|
->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_READ]))); |
|
|
|
|
|
|
|
$node = $this->createTestNode($this->root, $this->view, '/bar/foo'); |
|
|
|
$node->delete(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public function testStat() { |
|
|
|
$this->root->expects($this->any()) |
|
|
|
->method('getUser') |
|
|
|
@ -86,7 +217,7 @@ class NodeTest extends \Test\TestCase { |
|
|
|
->with('/bar/foo') |
|
|
|
->will($this->returnValue($stat)); |
|
|
|
|
|
|
|
$node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo'); |
|
|
|
$node = $this->createTestNode($this->root, $this->view, '/bar/foo'); |
|
|
|
$this->assertEquals($stat, $node->stat()); |
|
|
|
} |
|
|
|
|
|
|
|
@ -107,7 +238,7 @@ class NodeTest extends \Test\TestCase { |
|
|
|
->with('/bar/foo') |
|
|
|
->will($this->returnValue($stat)); |
|
|
|
|
|
|
|
$node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo'); |
|
|
|
$node = $this->createTestNode($this->root, $this->view, '/bar/foo'); |
|
|
|
$this->assertEquals(1, $node->getId()); |
|
|
|
} |
|
|
|
|
|
|
|
@ -129,7 +260,7 @@ class NodeTest extends \Test\TestCase { |
|
|
|
->with('/bar/foo') |
|
|
|
->will($this->returnValue($stat)); |
|
|
|
|
|
|
|
$node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo'); |
|
|
|
$node = $this->createTestNode($this->root, $this->view, '/bar/foo'); |
|
|
|
$this->assertEquals(100, $node->getSize()); |
|
|
|
} |
|
|
|
|
|
|
|
@ -150,7 +281,7 @@ class NodeTest extends \Test\TestCase { |
|
|
|
->with('/bar/foo') |
|
|
|
->will($this->returnValue($stat)); |
|
|
|
|
|
|
|
$node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo'); |
|
|
|
$node = $this->createTestNode($this->root, $this->view, '/bar/foo'); |
|
|
|
$this->assertEquals('qwerty', $node->getEtag()); |
|
|
|
} |
|
|
|
|
|
|
|
@ -171,7 +302,7 @@ class NodeTest extends \Test\TestCase { |
|
|
|
->with('/bar/foo') |
|
|
|
->will($this->returnValue($stat)); |
|
|
|
|
|
|
|
$node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo'); |
|
|
|
$node = $this->createTestNode($this->root, $this->view, '/bar/foo'); |
|
|
|
$this->assertEquals(50, $node->getMTime()); |
|
|
|
} |
|
|
|
|
|
|
|
@ -192,7 +323,7 @@ class NodeTest extends \Test\TestCase { |
|
|
|
->will($this->returnValue(array($storage, 'foo'))); |
|
|
|
|
|
|
|
|
|
|
|
$node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo'); |
|
|
|
$node = $this->createTestNode($this->root, $this->view, '/bar/foo'); |
|
|
|
$this->assertEquals($storage, $node->getStorage()); |
|
|
|
} |
|
|
|
|
|
|
|
@ -201,7 +332,7 @@ class NodeTest extends \Test\TestCase { |
|
|
|
->method('getUser') |
|
|
|
->will($this->returnValue($this->user)); |
|
|
|
|
|
|
|
$node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo'); |
|
|
|
$node = $this->createTestNode($this->root, $this->view, '/bar/foo'); |
|
|
|
$this->assertEquals('/bar/foo', $node->getPath()); |
|
|
|
} |
|
|
|
|
|
|
|
@ -222,7 +353,7 @@ class NodeTest extends \Test\TestCase { |
|
|
|
->will($this->returnValue(array($storage, 'foo'))); |
|
|
|
|
|
|
|
|
|
|
|
$node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo'); |
|
|
|
$node = $this->createTestNode($this->root, $this->view, '/bar/foo'); |
|
|
|
$this->assertEquals('foo', $node->getInternalPath()); |
|
|
|
} |
|
|
|
|
|
|
|
@ -231,7 +362,7 @@ class NodeTest extends \Test\TestCase { |
|
|
|
->method('getUser') |
|
|
|
->will($this->returnValue($this->user)); |
|
|
|
|
|
|
|
$node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo'); |
|
|
|
$node = $this->createTestNode($this->root, $this->view, '/bar/foo'); |
|
|
|
$this->assertEquals('foo', $node->getName()); |
|
|
|
} |
|
|
|
|
|
|
|
@ -250,7 +381,7 @@ class NodeTest extends \Test\TestCase { |
|
|
|
->with('/bar/foo') |
|
|
|
->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL)))); |
|
|
|
|
|
|
|
$node = new \OC\Files\Node\Node($this->root, $this->view, '/bar/foo'); |
|
|
|
$node = $this->createTestNode($this->root, $this->view, '/bar/foo'); |
|
|
|
$node->touch(100); |
|
|
|
$this->assertEquals(100, $node->getMTime()); |
|
|
|
} |
|
|
|
@ -302,7 +433,7 @@ class NodeTest extends \Test\TestCase { |
|
|
|
->with('/bar/foo') |
|
|
|
->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL)))); |
|
|
|
|
|
|
|
$node = new \OC\Files\Node\Node($root, $this->view, '/bar/foo'); |
|
|
|
$node = $this->createTestNode($root, $this->view, '/bar/foo'); |
|
|
|
$node->touch(100); |
|
|
|
$this->assertEquals(2, $hooksRun); |
|
|
|
} |
|
|
|
@ -320,7 +451,7 @@ class NodeTest extends \Test\TestCase { |
|
|
|
->with('/bar/foo') |
|
|
|
->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ)))); |
|
|
|
|
|
|
|
$node = new \OC\Files\Node\Node($this->root, $this->view, '/bar/foo'); |
|
|
|
$node = $this->createTestNode($this->root, $this->view, '/bar/foo'); |
|
|
|
$node->touch(100); |
|
|
|
} |
|
|
|
|
|
|
|
@ -328,7 +459,186 @@ class NodeTest extends \Test\TestCase { |
|
|
|
* @expectedException \OCP\Files\InvalidPathException |
|
|
|
*/ |
|
|
|
public function testInvalidPath() { |
|
|
|
$node = new \OC\Files\Node\Node($this->root, $this->view, '/../foo'); |
|
|
|
$node = $this->createTestNode($this->root, $this->view, '/../foo'); |
|
|
|
$node->getFileInfo(); |
|
|
|
} |
|
|
|
|
|
|
|
public function testCopySameStorage() { |
|
|
|
$this->view->expects($this->any()) |
|
|
|
->method('copy') |
|
|
|
->with('/bar/foo', '/bar/asd') |
|
|
|
->will($this->returnValue(true)); |
|
|
|
|
|
|
|
$this->view->expects($this->any()) |
|
|
|
->method('getFileInfo') |
|
|
|
->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 3]))); |
|
|
|
|
|
|
|
$node = $this->createTestNode($this->root, $this->view, '/bar/foo'); |
|
|
|
$parentNode = new \OC\Files\Node\Folder($this->root, $this->view, '/bar'); |
|
|
|
$newNode = $this->createTestNode($this->root, $this->view, '/bar/asd'); |
|
|
|
|
|
|
|
$this->root->expects($this->exactly(2)) |
|
|
|
->method('get') |
|
|
|
->will($this->returnValueMap([ |
|
|
|
['/bar/asd', $newNode], |
|
|
|
['/bar', $parentNode] |
|
|
|
])); |
|
|
|
|
|
|
|
$target = $node->copy('/bar/asd'); |
|
|
|
$this->assertInstanceOf($this->getNodeClass(), $target); |
|
|
|
$this->assertEquals(3, $target->getId()); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @expectedException \OCP\Files\NotPermittedException |
|
|
|
*/ |
|
|
|
public function testCopyNotPermitted() { |
|
|
|
/** |
|
|
|
* @var \OC\Files\Storage\Storage | \PHPUnit_Framework_MockObject_MockObject $storage |
|
|
|
*/ |
|
|
|
$storage = $this->createMock('\OC\Files\Storage\Storage'); |
|
|
|
|
|
|
|
$this->root->expects($this->never()) |
|
|
|
->method('getMount'); |
|
|
|
|
|
|
|
$storage->expects($this->never()) |
|
|
|
->method('copy'); |
|
|
|
|
|
|
|
$this->view->expects($this->any()) |
|
|
|
->method('getFileInfo') |
|
|
|
->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_READ, 'fileid' => 3]))); |
|
|
|
|
|
|
|
$node = $this->createTestNode($this->root, $this->view, '/bar/foo'); |
|
|
|
$parentNode = new \OC\Files\Node\Folder($this->root, $this->view, '/bar'); |
|
|
|
|
|
|
|
$this->root->expects($this->once()) |
|
|
|
->method('get') |
|
|
|
->will($this->returnValueMap([ |
|
|
|
['/bar', $parentNode] |
|
|
|
])); |
|
|
|
|
|
|
|
$node->copy('/bar/asd'); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @expectedException \OCP\Files\NotFoundException |
|
|
|
*/ |
|
|
|
public function testCopyNoParent() { |
|
|
|
$this->view->expects($this->never()) |
|
|
|
->method('copy'); |
|
|
|
|
|
|
|
$node = $this->createTestNode($this->root, $this->view, '/bar/foo'); |
|
|
|
|
|
|
|
$this->root->expects($this->once()) |
|
|
|
->method('get') |
|
|
|
->with('/bar/asd') |
|
|
|
->will($this->throwException(new NotFoundException())); |
|
|
|
|
|
|
|
$node->copy('/bar/asd/foo'); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @expectedException \OCP\Files\NotPermittedException |
|
|
|
*/ |
|
|
|
public function testCopyParentIsFile() { |
|
|
|
$this->view->expects($this->never()) |
|
|
|
->method('copy'); |
|
|
|
|
|
|
|
$node = $this->createTestNode($this->root, $this->view, '/bar/foo'); |
|
|
|
$parentNode = new \OC\Files\Node\File($this->root, $this->view, '/bar'); |
|
|
|
|
|
|
|
$this->root->expects($this->once()) |
|
|
|
->method('get') |
|
|
|
->will($this->returnValueMap([ |
|
|
|
['/bar', $parentNode] |
|
|
|
])); |
|
|
|
|
|
|
|
$node->copy('/bar/asd'); |
|
|
|
} |
|
|
|
|
|
|
|
public function testMoveSameStorage() { |
|
|
|
$this->view->expects($this->any()) |
|
|
|
->method('rename') |
|
|
|
->with('/bar/foo', '/bar/asd') |
|
|
|
->will($this->returnValue(true)); |
|
|
|
|
|
|
|
$this->view->expects($this->any()) |
|
|
|
->method('getFileInfo') |
|
|
|
->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1]))); |
|
|
|
|
|
|
|
$node = $this->createTestNode($this->root, $this->view, '/bar/foo'); |
|
|
|
$parentNode = new \OC\Files\Node\Folder($this->root, $this->view, '/bar'); |
|
|
|
|
|
|
|
$this->root->expects($this->any()) |
|
|
|
->method('get') |
|
|
|
->will($this->returnValueMap([['/bar', $parentNode], ['/bar/asd', $node]])); |
|
|
|
|
|
|
|
$target = $node->move('/bar/asd'); |
|
|
|
$this->assertInstanceOf($this->getNodeClass(), $target); |
|
|
|
$this->assertEquals(1, $target->getId()); |
|
|
|
$this->assertEquals('/bar/asd', $node->getPath()); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @expectedException \OCP\Files\NotPermittedException |
|
|
|
*/ |
|
|
|
public function testMoveNotPermitted() { |
|
|
|
$this->view->expects($this->any()) |
|
|
|
->method('getFileInfo') |
|
|
|
->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_READ]))); |
|
|
|
|
|
|
|
$this->view->expects($this->never()) |
|
|
|
->method('rename'); |
|
|
|
|
|
|
|
$node = $this->createTestNode($this->root, $this->view, '/bar/foo'); |
|
|
|
$parentNode = new \OC\Files\Node\Folder($this->root, $this->view, '/bar'); |
|
|
|
|
|
|
|
$this->root->expects($this->once()) |
|
|
|
->method('get') |
|
|
|
->with('/bar') |
|
|
|
->will($this->returnValue($parentNode)); |
|
|
|
|
|
|
|
$node->move('/bar/asd'); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @expectedException \OCP\Files\NotFoundException |
|
|
|
*/ |
|
|
|
public function testMoveNoParent() { |
|
|
|
/** |
|
|
|
* @var \OC\Files\Storage\Storage | \PHPUnit_Framework_MockObject_MockObject $storage |
|
|
|
*/ |
|
|
|
$storage = $this->createMock('\OC\Files\Storage\Storage'); |
|
|
|
|
|
|
|
$storage->expects($this->never()) |
|
|
|
->method('rename'); |
|
|
|
|
|
|
|
$node = $this->createTestNode($this->root, $this->view, '/bar/foo'); |
|
|
|
$parentNode = new \OC\Files\Node\Folder($this->root, $this->view, '/bar'); |
|
|
|
|
|
|
|
$this->root->expects($this->once()) |
|
|
|
->method('get') |
|
|
|
->with('/bar') |
|
|
|
->will($this->throwException(new NotFoundException())); |
|
|
|
|
|
|
|
$node->move('/bar/asd'); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @expectedException \OCP\Files\NotPermittedException |
|
|
|
*/ |
|
|
|
public function testMoveParentIsFile() { |
|
|
|
$this->view->expects($this->never()) |
|
|
|
->method('rename'); |
|
|
|
|
|
|
|
$node = $this->createTestNode($this->root, $this->view, '/bar/foo'); |
|
|
|
$parentNode = new \OC\Files\Node\File($this->root, $this->view, '/bar'); |
|
|
|
|
|
|
|
$this->root->expects($this->once()) |
|
|
|
->method('get') |
|
|
|
->with('/bar') |
|
|
|
->will($this->returnValue($parentNode)); |
|
|
|
|
|
|
|
$node->move('/bar/asd'); |
|
|
|
} |
|
|
|
} |