From 424ec94680e69a3082a3d3f7c1ceefd7eeae15d2 Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
Date: Fri, 8 Mar 2013 14:22:04 +0100
Subject: [PATCH] Make buildNotExistingFileName testable and write unittests

---
 lib/helper.php       | 14 +++++++++++++-
 tests/lib/helper.php | 42 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 55 insertions(+), 1 deletion(-)

diff --git a/lib/helper.php b/lib/helper.php
index 1860a55fc8..017221cef7 100644
--- a/lib/helper.php
+++ b/lib/helper.php
@@ -636,6 +636,18 @@ class OC_Helper {
 	* @return string
 	*/
 	public static function buildNotExistingFileName($path, $filename) {
+		$view = \OC\Files\Filesystem::getView();
+		return self::buildNotExistingFileNameForView($path, $filename, $view);
+	}
+
+	/**
+	* Adds a suffix to the name in case the file exists
+	*
+	* @param $path
+	* @param $filename
+	* @return string
+	*/
+	public static function buildNotExistingFileNameForView($path, $filename, \OC\Files\View $view) {
 		if($path==='/') {
 			$path='';
 		}
@@ -649,7 +661,7 @@ class OC_Helper {
 
 		$newpath = $path . '/' . $filename;
 		$counter = 2;
-		while (\OC\Files\Filesystem::file_exists($newpath)) {
+		while ($view->file_exists($newpath)) {
 			$newname = $name . ' (' . $counter . ')' . $ext;
 			$newpath = $path . '/' . $newname;
 			$counter++;
diff --git a/tests/lib/helper.php b/tests/lib/helper.php
index 6acb0dfaa6..410117a9e6 100644
--- a/tests/lib/helper.php
+++ b/tests/lib/helper.php
@@ -146,4 +146,46 @@ class Test_Helper extends PHPUnit_Framework_TestCase {
 		$result = OC_Helper::recursiveArraySearch($haystack, "NotFound");
 		$this->assertFalse($result);
 	}
+
+	function testBuildNotExistingFileNameForView() {
+		$viewMock = $this->getMock('\OC\Files\View', array(), array(), '', false);
+		$this->assertEquals('/filename', OC_Helper::buildNotExistingFileNameForView('/', 'filename', $viewMock));
+		$this->assertEquals('dir/filename.ext', OC_Helper::buildNotExistingFileNameForView('dir', 'filename.ext', $viewMock));
+
+		$viewMock->expects($this->at(0))
+			->method('file_exists')
+			->will($this->returnValue(true));
+		$this->assertEquals('dir/filename (2).ext', OC_Helper::buildNotExistingFileNameForView('dir', 'filename.ext', $viewMock));
+
+		$viewMock->expects($this->at(0))
+			->method('file_exists')
+			->will($this->returnValue(true));
+		$viewMock->expects($this->at(1))
+			->method('file_exists')
+			->will($this->returnValue(true));
+		$this->assertEquals('dir/filename (3).ext', OC_Helper::buildNotExistingFileNameForView('dir', 'filename.ext', $viewMock));
+
+		$viewMock->expects($this->at(0))
+			->method('file_exists')
+			->will($this->returnValue(true));
+		$this->assertEquals('dir/filename (2).ext', OC_Helper::buildNotExistingFileNameForView('dir', 'filename (1).ext', $viewMock));
+
+		$viewMock->expects($this->at(0))
+			->method('file_exists')
+			->will($this->returnValue(true));
+		$viewMock->expects($this->at(1))
+			->method('file_exists')
+			->will($this->returnValue(true));
+		$this->assertEquals('dir/filename (3).ext', OC_Helper::buildNotExistingFileNameForView('dir', 'filename (2).ext', $viewMock));
+
+		$viewMock->expects($this->at(0))
+			->method('file_exists')
+			->will($this->returnValue(true));
+		$this->assertEquals('dir/filename(2).ext', OC_Helper::buildNotExistingFileNameForView('dir', 'filename(1).ext', $viewMock));
+
+		$viewMock->expects($this->at(0))
+			->method('file_exists')
+			->will($this->returnValue(true));
+		$this->assertEquals('dir/filename(1) (2).ext', OC_Helper::buildNotExistingFileNameForView('dir', 'filename(1) (1).ext', $viewMock));
+	}
 }
-- 
GitLab