From 9fbdd1072ed4eac276261f23d855bca2ca932477 Mon Sep 17 00:00:00 2001
From: Vincent Petry <pvince81@owncloud.com>
Date: Wed, 21 Jan 2015 15:13:37 +0100
Subject: [PATCH] Fix webdav mkdir for remote shares

---
 apps/files_sharing/lib/external/cache.php   |   3 +
 apps/files_sharing/tests/external/cache.php | 112 ++++++++++++++++++++
 2 files changed, 115 insertions(+)
 create mode 100644 apps/files_sharing/tests/external/cache.php

diff --git a/apps/files_sharing/lib/external/cache.php b/apps/files_sharing/lib/external/cache.php
index cd06bfb127..2f5f7a59db 100644
--- a/apps/files_sharing/lib/external/cache.php
+++ b/apps/files_sharing/lib/external/cache.php
@@ -28,6 +28,9 @@ class Cache extends \OC\Files\Cache\Cache {
 
 	public function get($file) {
 		$result = parent::get($file);
+		if (!$result) {
+			return false;
+		}
 		$result['displayname_owner'] = $this->remoteUser . '@' . $this->remote;
 		if (!$file || $file === '') {
 			$result['is_share_mount_point'] = true;
diff --git a/apps/files_sharing/tests/external/cache.php b/apps/files_sharing/tests/external/cache.php
new file mode 100644
index 0000000000..6274a0b639
--- /dev/null
+++ b/apps/files_sharing/tests/external/cache.php
@@ -0,0 +1,112 @@
+<?php
+use OCA\Files_sharing\Tests\TestCase;
+
+/**
+ * ownCloud
+ *
+ * @author Vincent Petry
+ * @copyright 2015 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+class Test_Files_Sharing_External_Cache extends TestCase {
+
+	/**
+	 * @var \OC\Files\Storage\Storage
+	 **/
+	private $storage;
+
+	/**
+	 * @var \OCA\Files_Sharing\External\Cache
+	 */
+	private $cache;
+
+	/**
+	 * @var string
+	 */
+	private $remoteUser;
+
+	protected function setUp() {
+		parent::setUp();
+
+		$this->remoteUser = $this->getUniqueID('remoteuser');
+
+		$this->storage = $this->getMockBuilder('\OCA\Files_Sharing\External\Storage')
+			->disableOriginalConstructor()
+			->getMock();
+		$this->storage
+			->expects($this->any())
+			->method('getId')
+			->will($this->returnValue('dummystorage::'));
+		$this->cache = new \OCA\Files_Sharing\External\Cache(
+			$this->storage,
+			'http://example.com/owncloud',
+			$this->remoteUser
+		);
+		$this->cache->put(
+			'test.txt',
+			array(
+				'mimetype' => 'text/plain',
+				'size' => 5,
+				'mtime' => 123,
+			)
+		);
+	}
+
+	protected function tearDown() {
+		$this->cache->clear();
+		parent::tearDown();
+	}
+
+	public function testGetInjectsOwnerDisplayName() {
+		$info = $this->cache->get('test.txt');
+		$this->assertEquals(
+			$this->remoteUser . '@example.com/owncloud',
+			$info['displayname_owner']
+		);
+	}
+
+	public function testGetReturnsFalseIfNotFound() {
+		$info = $this->cache->get('unexisting-entry.txt');
+		$this->assertFalse($info);
+	}
+
+	public function testGetFolderPopulatesOwner() {
+		$dirId = $this->cache->put(
+			'subdir',
+			array(
+				'mimetype' => 'httpd/unix-directory',
+				'size' => 5,
+				'mtime' => 123,
+			)
+		);
+		$this->cache->put(
+			'subdir/contents.txt',
+			array(
+				'mimetype' => 'text/plain',
+				'size' => 5,
+				'mtime' => 123,
+			)
+		);
+
+		$results = $this->cache->getFolderContentsById($dirId);
+		$this->assertEquals(1, count($results));
+		$this->assertEquals(
+			$this->remoteUser . '@example.com/owncloud',
+			$results[0]['displayname_owner']
+		);
+	}
+
+}
-- 
GitLab