summaryrefslogtreecommitdiffstats
path: root/tests/lib/Files/Node/NodeTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/lib/Files/Node/NodeTest.php')
-rw-r--r--tests/lib/Files/Node/NodeTest.php352
1 files changed, 331 insertions, 21 deletions
diff --git a/tests/lib/Files/Node/NodeTest.php b/tests/lib/Files/Node/NodeTest.php
index 1a3a0472e97..ce7250dc064 100644
--- a/tests/lib/Files/Node/NodeTest.php
+++ b/tests/lib/Files/Node/NodeTest.php
@@ -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');
+ }
}