diff --git a/apps/files/lib/Activity/Provider.php b/apps/files/lib/Activity/Provider.php index b9712bdab4..4fa2910a8e 100644 --- a/apps/files/lib/Activity/Provider.php +++ b/apps/files/lib/Activity/Provider.php @@ -223,28 +223,28 @@ class Provider implements IProvider { case 'deleted_self': case 'restored_self': return [ - 'file' => $this->getRichFileParameter($parameters[0], $event), + 'file' => $this->getFile($parameters[0], $event), ]; case 'created_by': case 'changed_by': case 'deleted_by': case 'restored_by': return [ - 'file' => $this->getRichFileParameter($parameters[0], $event), - 'user' => $this->getRichUserParameter($parameters[1]), + 'file' => $this->getFile($parameters[0], $event), + 'user' => $this->getUser($parameters[1]), ]; case 'renamed_self': case 'moved_self': return [ - 'newfile' => $this->getRichFileParameter($parameters[0]), - 'oldfile' => $this->getRichFileParameter($parameters[1]), + 'newfile' => $this->getFile($parameters[0]), + 'oldfile' => $this->getFile($parameters[1]), ]; case 'renamed_by': case 'moved_by': return [ - 'newfile' => $this->getRichFileParameter($parameters[0]), - 'user' => $this->getRichUserParameter($parameters[1]), - 'oldfile' => $this->getRichFileParameter($parameters[2]), + 'newfile' => $this->getFile($parameters[0]), + 'user' => $this->getUser($parameters[1]), + 'oldfile' => $this->getFile($parameters[2]), ]; } return []; @@ -256,10 +256,10 @@ class Provider implements IProvider { * @return array * @throws \InvalidArgumentException */ - protected function getRichFileParameter($parameter, IEvent $event = null) { + protected function getFile($parameter, IEvent $event = null) { if (is_array($parameter)) { $path = reset($parameter); - $id = key($parameter); + $id = (string) key($parameter); } else if ($event !== null) { // Legacy from before ownCloud 8.2 $path = $parameter; @@ -267,6 +267,7 @@ class Provider implements IProvider { } else { throw new \InvalidArgumentException('Could not generate file parameter'); } + return [ 'type' => 'file', 'id' => $id, @@ -275,7 +276,7 @@ class Provider implements IProvider { ]; } - protected function getRichUserParameter($uid) { + protected function getUser($uid) { if (!isset($this->displayNames[$uid])) { $this->displayNames[$uid] = $this->getDisplayName($uid); } diff --git a/apps/files/tests/Activity/ProviderTest.php b/apps/files/tests/Activity/ProviderTest.php new file mode 100644 index 0000000000..a79e476df9 --- /dev/null +++ b/apps/files/tests/Activity/ProviderTest.php @@ -0,0 +1,137 @@ + + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program 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 program. If not, see . + * + */ + +namespace OCA\Files\Tests\Activity; + + +use OCA\Files\Activity\Provider; +use OCP\Activity\IEvent; +use OCP\Activity\IEventMerger; +use OCP\Activity\IManager; +use OCP\IURLGenerator; +use OCP\IUserManager; +use OCP\L10N\IFactory; +use Test\TestCase; + +/** + * Class ProviderTest + * + * @package OCA\Files\Tests\Activity + */ +class ProviderTest extends TestCase { + + /** @var IFactory|\PHPUnit_Framework_MockObject_MockObject */ + protected $l10nFactory; + /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */ + protected $url; + /** @var IManager|\PHPUnit_Framework_MockObject_MockObject */ + protected $activityManager; + /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */ + protected $userManager; + /** @var IEventMerger|\PHPUnit_Framework_MockObject_MockObject */ + protected $eventMerger; + + public function setUp() { + parent::setUp(); + + $this->l10nFactory = $this->createMock(IFactory::class); + $this->url = $this->createMock(IURLGenerator::class); + $this->activityManager = $this->createMock(IManager::class); + $this->userManager = $this->createMock(IUserManager::class); + $this->eventMerger = $this->createMock(IEventMerger::class); + } + + /** + * @param string[] $methods + * @return Provider|\PHPUnit_Framework_MockObject_MockObject + */ + protected function getProvider(array $methods = []) { + if (!empty($methods)) { + return $this->getMockBuilder(Provider::class) + ->setConstructorArgs([ + $this->l10nFactory, + $this->url, + $this->activityManager, + $this->userManager, + $this->eventMerger, + ]) + ->setMethods($methods) + ->getMock(); + } + return new Provider( + $this->l10nFactory, + $this->url, + $this->activityManager, + $this->userManager, + $this->eventMerger + ); + } + + public function dataGetFile() { + return [ + [[42 => '/FortyTwo.txt'], null, '42', 'FortyTwo.txt', 'FortyTwo.txt'], + [['23' => '/Twenty/Three.txt'], null, '23', 'Three.txt', 'Twenty/Three.txt'], + ['/Foo/Bar.txt', '128', '128', 'Bar.txt', 'Foo/Bar.txt'], // Legacy from ownCloud 8.2 and before + ]; + } + + /** + * @dataProvider dataGetFile + * @param mixed $parameter + * @param mixed $eventId + * @param int $id + * @param string $name + * @param string $path + */ + public function testGetFile($parameter, $eventId, $id, $name, $path) { + $provider = $this->getProvider(); + + if ($eventId !== null) { + $event = $this->createMock(IEvent::class); + $event->expects($this->once()) + ->method('getObjectId') + ->willReturn($eventId); + } else { + $event = null; + } + + $this->url->expects($this->once()) + ->method('linkToRouteAbsolute') + ->with('files.viewcontroller.showFile', ['fileid' => $id]) + ->willReturn('link-' . $id); + + $result = self::invokePrivate($provider, 'getFile', [$parameter, $event]); + + $this->assertSame('file', $result['type']); + $this->assertSame($id, $result['id']); + $this->assertSame($name, $result['name']); + $this->assertSame($path, $result['path']); + $this->assertSame('link-' . $id, $result['link']); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testGetFileThrows() { + $provider = $this->getProvider(); + self::invokePrivate($provider, 'getFile', ['/Foo/Bar.txt', null]); + } +}