aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Appelman <icewind@owncloud.com>2015-03-24 15:00:36 +0100
committerRobin Appelman <icewind@owncloud.com>2015-03-24 15:00:36 +0100
commitd11f01fa0f2228bb36e7b1a46cd80cec8bf1baac (patch)
tree0ec374867abef61a31f895f84082b959b9f05130
parente07a2fd8a254e60758e847356c45f41334d79aaf (diff)
downloadnextcloud-server-d11f01fa0f2228bb36e7b1a46cd80cec8bf1baac.tar.gz
nextcloud-server-d11f01fa0f2228bb36e7b1a46cd80cec8bf1baac.zip
Add `getNonExistingName()` to the node api
-rw-r--r--lib/private/files/node/folder.php12
-rw-r--r--lib/public/files/folder.php9
-rw-r--r--tests/lib/files/node/folder.php36
3 files changed, 57 insertions, 0 deletions
diff --git a/lib/private/files/node/folder.php b/lib/private/files/node/folder.php
index 5fd73cc5d36..18a93913f06 100644
--- a/lib/private/files/node/folder.php
+++ b/lib/private/files/node/folder.php
@@ -389,4 +389,16 @@ class Folder extends Node implements \OCP\Files\Folder {
throw new NotPermittedException();
}
}
+
+ /**
+ * Add a suffix to the name in case the file exists
+ *
+ * @param string $name
+ * @return string
+ * @throws NotPermittedException
+ */
+ public function getNonExistingName($name) {
+ $uniqueName = \OC_Helper::buildNotExistingFileNameForView($this->getPath(), $name, $this->view);
+ return trim($this->getRelativePath($uniqueName), '/');
+ }
}
diff --git a/lib/public/files/folder.php b/lib/public/files/folder.php
index 9797fbc46ed..916f190ac34 100644
--- a/lib/public/files/folder.php
+++ b/lib/public/files/folder.php
@@ -146,4 +146,13 @@ interface Folder extends Node {
* @return bool
*/
public function isCreatable();
+
+ /**
+ * Add a suffix to the name in case the file exists
+ *
+ * @param string $name
+ * @return string
+ * @throws NotPermittedException
+ */
+ public function getNonExistingName($name);
}
diff --git a/tests/lib/files/node/folder.php b/tests/lib/files/node/folder.php
index 54b26ebdfe1..4a88e2acd36 100644
--- a/tests/lib/files/node/folder.php
+++ b/tests/lib/files/node/folder.php
@@ -679,4 +679,40 @@ class Folder extends \Test\TestCase {
$this->assertEquals('/bar/foo/qwerty', $result[0]->getPath());
$this->assertEquals('/bar/foo/asd/foo/qwerty', $result[1]->getPath());
}
+
+ public function uniqueNameProvider() {
+ return [
+ // input, existing, expected
+ ['foo', [] , 'foo'],
+ ['foo', ['foo'] , 'foo (2)'],
+ ['foo', ['foo', 'foo (2)'] , 'foo (3)']
+ ];
+ }
+
+ /**
+ * @dataProvider uniqueNameProvider
+ */
+ public function testGetUniqueName($name, $existingFiles, $expected) {
+ $manager = $this->getMock('\OC\Files\Mount\Manager');
+ $folderPath = '/bar/foo';
+ /**
+ * @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
+ */
+ $view = $this->getMock('\OC\Files\View');
+ $root = $this->getMock('\OC\Files\Node\Root', array('getUser', 'getMountsIn', 'getMount'), array($manager, $view, $this->user));
+
+ $view->expects($this->any())
+ ->method('file_exists')
+ ->will($this->returnCallback(function ($path) use ($existingFiles, $folderPath) {
+ foreach ($existingFiles as $existing) {
+ if ($folderPath . '/' . $existing === $path){
+ return true;
+ }
+ }
+ return false;
+ }));
+
+ $node = new \OC\Files\Node\Folder($root, $view, $folderPath);
+ $this->assertEquals($expected, $node->getNonExistingName($name));
+ }
}