From a39c7bf4643fdaa17e62ea503fede1c2f4a30d35 Mon Sep 17 00:00:00 2001
From: Robin Appelman <icewind@owncloud.com>
Date: Mon, 23 Feb 2015 15:26:12 +0100
Subject: [PATCH] Add FileAccess trait for commands

---
 lib/private/command/fileaccess.php | 18 ++++++++++++++++++
 tests/lib/command/asyncbus.php     | 25 +++++++++++++++++++++++++
 2 files changed, 43 insertions(+)
 create mode 100644 lib/private/command/fileaccess.php

diff --git a/lib/private/command/fileaccess.php b/lib/private/command/fileaccess.php
new file mode 100644
index 00000000000..5de00862fac
--- /dev/null
+++ b/lib/private/command/fileaccess.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Copyright (c) 2015 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Command;
+
+use OCP\IUser;
+
+trait FileAccess {
+	protected function getUserFolder(IUser $user) {
+		\OC_Util::setupFS($user->getUID());
+		return \OC::$server->getUserFolder($user->getUID());
+	}
+}
diff --git a/tests/lib/command/asyncbus.php b/tests/lib/command/asyncbus.php
index 030c416953d..d22ce34d839 100644
--- a/tests/lib/command/asyncbus.php
+++ b/tests/lib/command/asyncbus.php
@@ -9,6 +9,7 @@
 
 namespace Test\Command;
 
+use OC\Command\FileAccess;
 use OCP\Command\ICommand;
 use Test\BackgroundJob\DummyJobList;
 use Test\TestCase;
@@ -31,6 +32,14 @@ class StateFullCommand implements ICommand {
 	}
 }
 
+class FilesystemCommand implements ICommand {
+	use FileAccess;
+
+	public function handle() {
+		AsyncBus::$lastCommand = 'FileAccess';
+	}
+}
+
 function basicFunction() {
 	AsyncBus::$lastCommand = 'function';
 }
@@ -133,6 +142,22 @@ class AsyncBus extends TestCase {
 		$this->assertEquals('closure-bar', self::$lastCommand);
 	}
 
+	public function testFileFileAccessCommand() {
+		$this->bus->push(new FilesystemCommand());
+		$this->assertEquals('', self::$lastCommand);
+		$this->runJobs();
+		$this->assertEquals('FileAccess', self::$lastCommand);
+	}
+
+	public function testFileFileAccessCommandSync() {
+		$this->bus->requireSync('\OC\Command\FileAccess');
+		$this->bus->push(new FilesystemCommand());
+		$this->assertEquals('FileAccess', self::$lastCommand);
+		self::$lastCommand = '';
+		$this->runJobs();
+		$this->assertEquals('', self::$lastCommand);
+	}
+
 
 	private function runJobs() {
 		$jobs = $this->jobList->getAll();
-- 
GitLab