]> source.dussan.org Git - nextcloud-server.git/commitdiff
Fix dav permissions for folders without create permissions
authorRobin Appelman <icewind@owncloud.com>
Wed, 24 Sep 2014 15:50:33 +0000 (17:50 +0200)
committerRobin Appelman <icewind@owncloud.com>
Thu, 25 Sep 2014 12:01:19 +0000 (14:01 +0200)
lib/private/connector/sabre/node.php
tests/lib/connector/sabre/node.php [new file with mode: 0644]

index 2ac7363a15ec12aba3da7d9a4353b79b2eb4e748..a22dc9c5fbea9177e67b42512a79b0dd3e57fc5a 100644 (file)
@@ -264,7 +264,7 @@ abstract class OC_Connector_Sabre_Node implements \Sabre\DAV\INode, \Sabre\DAV\I
                                $p .= 'W';
                        }
                } else {
-                       if ($this->info->isUpdateable()) {
+                       if ($this->info->isCreatable()) {
                                $p .= 'CK';
                        }
                }
diff --git a/tests/lib/connector/sabre/node.php b/tests/lib/connector/sabre/node.php
new file mode 100644 (file)
index 0000000..0f30345
--- /dev/null
@@ -0,0 +1,55 @@
+<?php
+
+/**
+ * Copyright (c) 2014 Thomas Müller <thomas.mueller@tmit.eu>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Connector\Sabre;
+
+use OC\Files\FileInfo;
+use OC\Files\View;
+
+class Node extends \PHPUnit_Framework_TestCase {
+       public function davPermissionsProvider() {
+               return array(
+                       array(\OCP\PERMISSION_ALL, 'file', false, false, 'RDNVW'),
+                       array(\OCP\PERMISSION_ALL, 'dir', false, false, 'RDNVCK'),
+                       array(\OCP\PERMISSION_ALL, 'file', true, false, 'SRDNVW'),
+                       array(\OCP\PERMISSION_ALL, 'file', true, true, 'SRMDNVW'),
+                       array(\OCP\PERMISSION_ALL - \OCP\PERMISSION_SHARE, 'file', true, false, 'SDNVW'),
+                       array(\OCP\PERMISSION_ALL - \OCP\PERMISSION_UPDATE, 'file', false, false, 'RDNV'),
+                       array(\OCP\PERMISSION_ALL - \OCP\PERMISSION_DELETE, 'file', false, false, 'RW'),
+                       array(\OCP\PERMISSION_ALL - \OCP\PERMISSION_CREATE, 'file', false, false, 'RDNVW'),
+                       array(\OCP\PERMISSION_ALL - \OCP\PERMISSION_CREATE, 'dir', false, false, 'RDNV'),
+               );
+       }
+
+       /**
+        * @dataProvider davPermissionsProvider
+        */
+       public function testDavPermissions($permissions, $type, $shared, $mounted, $expected) {
+               $info = $this->getMockBuilder('\OC\Files\FileInfo')
+                       ->disableOriginalConstructor()
+                       ->setMethods(array('getPermissions', 'isShared', 'isMounted', 'getType'))
+                       ->getMock();
+               $info->expects($this->any())
+                       ->method('getPermissions')
+                       ->will($this->returnValue($permissions));
+               $info->expects($this->any())
+                       ->method('isShared')
+                       ->will($this->returnValue($shared));
+               $info->expects($this->any())
+                       ->method('isMounted')
+                       ->will($this->returnValue($mounted));
+               $info->expects($this->any())
+                       ->method('getType')
+                       ->will($this->returnValue($type));
+               $view = $this->getMock('\OC\Files\View');
+
+               $node = new \OC_Connector_Sabre_File($view, $info);
+               $this->assertEquals($expected, $node->getDavPermissions());
+       }
+}