From d4200a08cceeb99a41f45f50a41d50e0cb05cab3 Mon Sep 17 00:00:00 2001
From: Joas Schilling <coding@schilljs.com>
Date: Fri, 3 Mar 2017 13:12:24 +0100
Subject: [PATCH] Get the user folder of the correct user

Signed-off-by: Joas Schilling <coding@schilljs.com>
---
 apps/comments/lib/Notification/Notifier.php   |  13 +--
 .../tests/Unit/AppInfo/ApplicationTest.php    |   4 +-
 .../tests/Unit/Notification/NotifierTest.php  | 102 ++++++++++--------
 3 files changed, 68 insertions(+), 51 deletions(-)

diff --git a/apps/comments/lib/Notification/Notifier.php b/apps/comments/lib/Notification/Notifier.php
index a9daef3031f..09092da539c 100644
--- a/apps/comments/lib/Notification/Notifier.php
+++ b/apps/comments/lib/Notification/Notifier.php
@@ -23,7 +23,7 @@ namespace OCA\Comments\Notification;
 
 use OCP\Comments\ICommentsManager;
 use OCP\Comments\NotFoundException;
-use OCP\Files\Folder;
+use OCP\Files\IRootFolder;
 use OCP\IURLGenerator;
 use OCP\IUserManager;
 use OCP\L10N\IFactory;
@@ -35,8 +35,8 @@ class Notifier implements INotifier {
 	/** @var IFactory */
 	protected $l10nFactory;
 
-	/** @var Folder  */
-	protected $userFolder;
+	/** @var IRootFolder  */
+	protected $rootFolder;
 
 	/** @var ICommentsManager  */
 	protected $commentsManager;
@@ -49,13 +49,13 @@ class Notifier implements INotifier {
 
 	public function __construct(
 		IFactory $l10nFactory,
-		Folder $userFolder,
+		IRootFolder $rootFolder,
 		ICommentsManager $commentsManager,
 		IURLGenerator $url,
 		IUserManager $userManager
 	) {
 		$this->l10nFactory = $l10nFactory;
-		$this->userFolder = $userFolder;
+		$this->rootFolder = $rootFolder;
 		$this->commentsManager = $commentsManager;
 		$this->url = $url;
 		$this->userManager = $userManager;
@@ -93,7 +93,8 @@ class Notifier implements INotifier {
 				if($parameters[0] !== 'files') {
 					throw new \InvalidArgumentException('Unsupported comment object');
 				}
-				$nodes = $this->userFolder->getById($parameters[1]);
+				$userFolder = $this->rootFolder->getUserFolder($notification->getUser());
+				$nodes = $userFolder->getById($parameters[1]);
 				if(empty($nodes)) {
 					throw new \InvalidArgumentException('Cannot resolve file id to Node instance');
 				}
diff --git a/apps/comments/tests/Unit/AppInfo/ApplicationTest.php b/apps/comments/tests/Unit/AppInfo/ApplicationTest.php
index e0a47dbfff9..5adfbbcc635 100644
--- a/apps/comments/tests/Unit/AppInfo/ApplicationTest.php
+++ b/apps/comments/tests/Unit/AppInfo/ApplicationTest.php
@@ -22,6 +22,7 @@
 namespace OCA\Comments\Tests\Unit\AppInfo;
 
 use OCA\Comments\AppInfo\Application;
+use OCA\Comments\Notification\Notifier;
 use Test\TestCase;
 
 /**
@@ -56,7 +57,8 @@ class ApplicationTest extends TestCase {
 			'OCA\Comments\Activity\Listener',
 			'OCA\Comments\Activity\Provider',
 			'OCA\Comments\Activity\Setting',
-			'OCA\Comments\Notification\Listener'
+			'OCA\Comments\Notification\Listener',
+			Notifier::class,
 		];
 
 		foreach($services as $service) {
diff --git a/apps/comments/tests/Unit/Notification/NotifierTest.php b/apps/comments/tests/Unit/Notification/NotifierTest.php
index 25b8b4b278d..0b08849030b 100644
--- a/apps/comments/tests/Unit/Notification/NotifierTest.php
+++ b/apps/comments/tests/Unit/Notification/NotifierTest.php
@@ -28,6 +28,7 @@ use OCP\Comments\IComment;
 use OCP\Comments\ICommentsManager;
 use OCP\Comments\NotFoundException;
 use OCP\Files\Folder;
+use OCP\Files\IRootFolder;
 use OCP\Files\Node;
 use OCP\IL10N;
 use OCP\IURLGenerator;
@@ -41,41 +42,33 @@ class NotifierTest extends TestCase {
 
 	/** @var Notifier */
 	protected $notifier;
-
 	/** @var IFactory|\PHPUnit_Framework_MockObject_MockObject */
 	protected $l10nFactory;
-
-	/** @var  Folder|\PHPUnit_Framework_MockObject_MockObject */
+	/** @var IL10N|\PHPUnit_Framework_MockObject_MockObject */
+	protected $l;
+	/** @var IRootFolder|\PHPUnit_Framework_MockObject_MockObject */
 	protected $folder;
-
-	/** @var  ICommentsManager|\PHPUnit_Framework_MockObject_MockObject */
+	/** @var ICommentsManager|\PHPUnit_Framework_MockObject_MockObject */
 	protected $commentsManager;
 	/** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */
 	protected $url;
-	/** @var  IUserManager|\PHPUnit_Framework_MockObject_MockObject */
+	/** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
 	protected $userManager;
-
-
-	/** @var string */
-	protected $lc = 'tlh_KX';
-
-	/** @var  INotification|\PHPUnit_Framework_MockObject_MockObject */
+	/** @var INotification|\PHPUnit_Framework_MockObject_MockObject */
 	protected $notification;
-
-	/** @var  IL10N|\PHPUnit_Framework_MockObject_MockObject */
-	protected $l;
-
-	/** @var  IComment|\PHPUnit_Framework_MockObject_MockObject */
+	/** @var IComment|\PHPUnit_Framework_MockObject_MockObject */
 	protected $comment;
+	/** @var string */
+	protected $lc = 'tlh_KX';
 
 	protected function setUp() {
 		parent::setUp();
 
-		$this->l10nFactory = $this->getMockBuilder('OCP\L10N\IFactory')->getMock();
-		$this->folder = $this->getMockBuilder('OCP\Files\Folder')->getMock();
-		$this->commentsManager = $this->getMockBuilder('OCP\Comments\ICommentsManager')->getMock();
+		$this->l10nFactory = $this->createMock(IFactory::class);
+		$this->folder = $this->createMock(IRootFolder::class);
+		$this->commentsManager = $this->createMock(ICommentsManager::class);
 		$this->url = $this->createMock(IURLGenerator::class);
-		$this->userManager = $this->getMockBuilder('OCP\IUserManager')->getMock();
+		$this->userManager = $this->createMock(IUserManager::class);
 
 		$this->notifier = new Notifier(
 			$this->l10nFactory,
@@ -92,8 +85,8 @@ class NotifierTest extends TestCase {
 				return vsprintf($text, $parameters);
 			}));
 
-		$this->notification = $this->getMockBuilder('OCP\Notification\INotification')->getMock();
-		$this->comment = $this->getMockBuilder('OCP\Comments\IComment')->getMock();
+		$this->notification = $this->createMock(INotification::class);
+		$this->comment = $this->createMock(IComment::class);
 	}
 
 	public function testPrepareSuccess() {
@@ -102,24 +95,31 @@ class NotifierTest extends TestCase {
 		$message = 'Huraga mentioned you in a comment on “Gre\'thor.odp”';
 
 		/** @var IUser|\PHPUnit_Framework_MockObject_MockObject $user */
-		$user = $this->getMockBuilder('OCP\IUser')->getMock();
+		$user = $this->createMock(IUser::class);
 		$user->expects($this->once())
 			->method('getDisplayName')
 			->willReturn($displayName);
 
-		/** @var Node|\PHPUnit_Framework_MockObject_MockObject */
-		$node = $this->getMockBuilder('OCP\Files\Node')->getMock();
+		/** @var Node|\PHPUnit_Framework_MockObject_MockObject $node */
+		$node = $this->createMock(Node::class);
 		$node
 			->expects($this->atLeastOnce())
 			->method('getName')
 			->willReturn($fileName);
 
-		$this->folder
-			->expects($this->once())
+		$userFolder = $this->createMock(Folder::class);
+		$this->folder->expects($this->once())
+			->method('getUserFolder')
+			->with('you')
+			->willReturn($userFolder);
+		$userFolder->expects($this->once())
 			->method('getById')
 			->with('678')
 			->willReturn([$node]);
 
+		$this->notification->expects($this->once())
+			->method('getUser')
+			->willReturn('you');
 		$this->notification
 			->expects($this->once())
 			->method('getApp')
@@ -172,7 +172,7 @@ class NotifierTest extends TestCase {
 			->willReturn('users');
 
 		$this->commentsManager
-			->expects(($this->once()))
+			->expects($this->once())
 			->method('get')
 			->willReturn($this->comment);
 
@@ -189,19 +189,26 @@ class NotifierTest extends TestCase {
 		$fileName = 'Gre\'thor.odp';
 		$message = 'A (now) deleted user mentioned you in a comment on “Gre\'thor.odp”';
 
-		/** @var Node|\PHPUnit_Framework_MockObject_MockObject */
-		$node = $this->getMockBuilder('OCP\Files\Node')->getMock();
+		/** @var Node|\PHPUnit_Framework_MockObject_MockObject $node */
+		$node = $this->createMock(Node::class);
 		$node
 			->expects($this->atLeastOnce())
 			->method('getName')
 			->willReturn($fileName);
 
-		$this->folder
-			->expects($this->once())
+		$userFolder = $this->createMock(Folder::class);
+		$this->folder->expects($this->once())
+			->method('getUserFolder')
+			->with('you')
+			->willReturn($userFolder);
+		$userFolder->expects($this->once())
 			->method('getById')
 			->with('678')
 			->willReturn([$node]);
 
+		$this->notification->expects($this->once())
+			->method('getUser')
+			->willReturn('you');
 		$this->notification
 			->expects($this->once())
 			->method('getApp')
@@ -254,7 +261,7 @@ class NotifierTest extends TestCase {
 			->willReturn(ICommentsManager::DELETED_USER);
 
 		$this->commentsManager
-			->expects(($this->once()))
+			->expects($this->once())
 			->method('get')
 			->willReturn($this->comment);
 
@@ -292,7 +299,7 @@ class NotifierTest extends TestCase {
 			->method('get');
 
 		$this->commentsManager
-			->expects(($this->never()))
+			->expects($this->never())
 			->method('get');
 
 		$this->userManager
@@ -329,7 +336,7 @@ class NotifierTest extends TestCase {
 			->method('get');
 
 		$this->commentsManager
-			->expects(($this->once()))
+			->expects($this->once())
 			->method('get')
 			->willThrowException(new NotFoundException());
 
@@ -347,7 +354,7 @@ class NotifierTest extends TestCase {
 		$displayName = 'Huraga';
 
 		/** @var IUser|\PHPUnit_Framework_MockObject_MockObject $user */
-		$user = $this->getMockBuilder('OCP\IUser')->getMock();
+		$user = $this->createMock(IUser::class);
 		$user->expects($this->once())
 			->method('getDisplayName')
 			->willReturn($displayName);
@@ -390,7 +397,7 @@ class NotifierTest extends TestCase {
 			->willReturn('users');
 
 		$this->commentsManager
-			->expects(($this->once()))
+			->expects($this->once())
 			->method('get')
 			->willReturn($this->comment);
 
@@ -410,7 +417,7 @@ class NotifierTest extends TestCase {
 		$displayName = 'Huraga';
 
 		/** @var IUser|\PHPUnit_Framework_MockObject_MockObject $user */
-		$user = $this->getMockBuilder('OCP\IUser')->getMock();
+		$user = $this->createMock(IUser::class);
 		$user->expects($this->once())
 			->method('getDisplayName')
 			->willReturn($displayName);
@@ -454,7 +461,7 @@ class NotifierTest extends TestCase {
 			->willReturn('users');
 
 		$this->commentsManager
-			->expects(($this->once()))
+			->expects($this->once())
 			->method('get')
 			->willReturn($this->comment);
 
@@ -474,17 +481,24 @@ class NotifierTest extends TestCase {
 		$displayName = 'Huraga';
 
 		/** @var IUser|\PHPUnit_Framework_MockObject_MockObject $user */
-		$user = $this->getMockBuilder('OCP\IUser')->getMock();
+		$user = $this->createMock(IUser::class);
 		$user->expects($this->once())
 			->method('getDisplayName')
 			->willReturn($displayName);
 
-		$this->folder
-			->expects($this->once())
+		$userFolder = $this->createMock(Folder::class);
+		$this->folder->expects($this->once())
+			->method('getUserFolder')
+			->with('you')
+			->willReturn($userFolder);
+		$userFolder->expects($this->once())
 			->method('getById')
 			->with('678')
 			->willReturn([]);
 
+		$this->notification->expects($this->once())
+			->method('getUser')
+			->willReturn('you');
 		$this->notification
 			->expects($this->once())
 			->method('getApp')
@@ -520,7 +534,7 @@ class NotifierTest extends TestCase {
 			->willReturn('users');
 
 		$this->commentsManager
-			->expects(($this->once()))
+			->expects($this->once())
 			->method('get')
 			->willReturn($this->comment);
 
-- 
GitLab