diff options
author | Simon L <szaimen@e.mail.de> | 2023-04-18 04:11:44 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-18 04:11:44 +0200 |
commit | 855e7a2efb377653d0ce50ff9c0e43ec27612413 (patch) | |
tree | 35c17a4cb706b29d03b4a1a866ac0f7d997b5355 /apps/dav | |
parent | e10e509452de7f69c64e394a652b46a6ca2cbd95 (diff) | |
parent | d9c81f56ad25d6665e87468cf18dc2646334fb3b (diff) | |
download | nextcloud-server-855e7a2efb377653d0ce50ff9c0e43ec27612413.tar.gz nextcloud-server-855e7a2efb377653d0ce50ff9c0e43ec27612413.zip |
Merge pull request #36774 from nextcloud/bugfix/noid/sabre-nodes
fix: always use proper path on node api when calling the view
Diffstat (limited to 'apps/dav')
-rw-r--r-- | apps/dav/lib/Connector/Sabre/Node.php | 11 | ||||
-rw-r--r-- | apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php | 20 | ||||
-rw-r--r-- | apps/dav/tests/unit/Files/FileSearchBackendTest.php | 8 |
3 files changed, 30 insertions, 9 deletions
diff --git a/apps/dav/lib/Connector/Sabre/Node.php b/apps/dav/lib/Connector/Sabre/Node.php index 2c8d313eefd..c9407b12786 100644 --- a/apps/dav/lib/Connector/Sabre/Node.php +++ b/apps/dav/lib/Connector/Sabre/Node.php @@ -91,11 +91,13 @@ abstract class Node implements \Sabre\DAV\INode { if ($info instanceof Folder || $info instanceof File) { $this->node = $info; } else { + // The Node API assumes that the view passed doesn't have a fake root + $rootView = \OC::$server->get(View::class); $root = \OC::$server->get(IRootFolder::class); if ($info->getType() === FileInfo::TYPE_FOLDER) { - $this->node = new Folder($root, $view, $this->path, $info); + $this->node = new Folder($root, $rootView, $this->fileView->getAbsolutePath($this->path), $info); } else { - $this->node = new File($root, $view, $this->path, $info); + $this->node = new File($root, $rootView, $this->fileView->getAbsolutePath($this->path), $info); } } } @@ -107,10 +109,11 @@ abstract class Node implements \Sabre\DAV\INode { } $this->info = $info; $root = \OC::$server->get(IRootFolder::class); + $rootView = \OC::$server->get(View::class); if ($this->info->getType() === FileInfo::TYPE_FOLDER) { - $this->node = new Folder($root, $this->fileView, $this->path, $this->info); + $this->node = new Folder($root, $rootView, $this->path, $this->info); } else { - $this->node = new File($root, $this->fileView, $this->path, $this->info); + $this->node = new File($root, $rootView, $this->path, $this->info); } } diff --git a/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php b/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php index c6365cf3168..0f41ff97cc6 100644 --- a/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php @@ -29,9 +29,12 @@ namespace OCA\DAV\Tests\Unit\Connector\Sabre; use OC\Files\FileInfo; +use OC\Files\Filesystem; use OC\Files\Node\Node; use OC\Files\Storage\Wrapper\Quota; +use OC\Files\View; use OCA\DAV\Connector\Sabre\Directory; +use OCP\Constants; use OCP\Files\ForbiddenException; use OCP\Files\Mount\IMountPoint; use Test\Traits\UserTrait; @@ -91,6 +94,10 @@ class DirectoryTest extends \Test\TestCase { ->willReturn(Node::TYPE_FOLDER); $this->info->method('getName') ->willReturn("folder"); + $this->info->method('getPath') + ->willReturn("/admin/files/folder"); + $this->info->method('getPermissions') + ->willReturn(Constants::PERMISSION_READ); } private function getDir($path = '/') { @@ -207,12 +214,21 @@ class DirectoryTest extends \Test\TestCase { $this->view->expects($this->once()) ->method('getDirectoryContent') - ->with('') ->willReturn([$info1, $info2]); $this->view->expects($this->any()) ->method('getRelativePath') - ->willReturn(''); + ->willReturnCallback(function ($path) { + return str_replace('/admin/files/', '', $path); + }); + + $this->view->expects($this->any()) + ->method('getAbsolutePath') + ->willReturnCallback(function ($path) { + return Filesystem::normalizePath('/admin/files' . $path); + }); + + $this->overwriteService(View::class, $this->view); $dir = new Directory($this->view, $this->info); $nodes = $dir->getChildren(); diff --git a/apps/dav/tests/unit/Files/FileSearchBackendTest.php b/apps/dav/tests/unit/Files/FileSearchBackendTest.php index cc4dcb62b75..715130d2fae 100644 --- a/apps/dav/tests/unit/Files/FileSearchBackendTest.php +++ b/apps/dav/tests/unit/Files/FileSearchBackendTest.php @@ -86,9 +86,11 @@ class FileSearchBackendTest extends TestCase { ->disableOriginalConstructor() ->getMock(); - $this->view = $this->getMockBuilder(View::class) - ->disableOriginalConstructor() - ->getMock(); + $this->view = $this->createMock(View::class); + + $this->view->expects($this->any()) + ->method('getRoot') + ->willReturn(''); $this->view->expects($this->any()) ->method('getRelativePath') |