]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add a URL to the notifications
authorJoas Schilling <nickvergessen@owncloud.com>
Tue, 10 May 2016 09:31:03 +0000 (11:31 +0200)
committerJoas Schilling <nickvergessen@owncloud.com>
Tue, 24 May 2016 09:26:54 +0000 (11:26 +0200)
apps/updatenotification/lib/Notification/BackgroundJob.php
apps/updatenotification/tests/Notification/BackgroundJobTest.php

index 3a89f3813e6c07d6d84db0047e3bbebc8c27ed39..e455a1642f4d22183c095cf70b09e9c93003b11d 100644 (file)
@@ -30,6 +30,7 @@ use OCP\Http\Client\IClientService;
 use OCP\IConfig;
 use OCP\IGroup;
 use OCP\IGroupManager;
+use OCP\IURLGenerator;
 use OCP\IUser;
 use OCP\Notification\IManager;
 
@@ -50,6 +51,9 @@ class BackgroundJob extends TimedJob {
        /** @var IClientService */
        protected $client;
 
+       /** @var IURLGenerator */
+       protected $urlGenerator;
+
        /** @var IUser[] */
        protected $users;
 
@@ -61,8 +65,9 @@ class BackgroundJob extends TimedJob {
         * @param IGroupManager $groupManager
         * @param IAppManager $appManager
         * @param IClientService $client
+        * @param IURLGenerator $urlGenerator
         */
-       public function __construct(IConfig $config, IManager $notificationManager, IGroupManager $groupManager, IAppManager $appManager, IClientService $client) {
+       public function __construct(IConfig $config, IManager $notificationManager, IGroupManager $groupManager, IAppManager $appManager, IClientService $client, IURLGenerator $urlGenerator) {
                // Run once a day
                $this->setInterval(60 * 60 * 24);
 
@@ -71,6 +76,7 @@ class BackgroundJob extends TimedJob {
                $this->groupManager = $groupManager;
                $this->appManager = $appManager;
                $this->client = $client;
+               $this->urlGenerator = $urlGenerator;
        }
 
        protected function run($argument) {
@@ -91,7 +97,8 @@ class BackgroundJob extends TimedJob {
 
                $status = $updater->check();
                if (isset($status['version'])) {
-                       $this->createNotifications('core', $status['version']);
+                       $url = $this->urlGenerator->linkToRouteAbsolute('settings_admin') . '#updater';
+                       $this->createNotifications('core', $status['version'], $url);
                }
        }
 
@@ -103,7 +110,8 @@ class BackgroundJob extends TimedJob {
                foreach ($apps as $app) {
                        $update = $this->isUpdateAvailable($app);
                        if ($update !== false) {
-                               $this->createNotifications($app, $update);
+                               $url = $this->urlGenerator->linkToRouteAbsolute('settings.AppSettings.viewApps') . '#app-' . $app;
+                               $this->createNotifications($app, $update, $url);
                        }
                }
        }
@@ -113,8 +121,9 @@ class BackgroundJob extends TimedJob {
         *
         * @param string $app
         * @param string $version
+        * @param string $url
         */
-       protected function createNotifications($app, $version) {
+       protected function createNotifications($app, $version, $url) {
                $lastNotification = $this->config->getAppValue('updatenotification', $app, false);
                if ($lastNotification === $version) {
                        // We already notified about this update
@@ -129,7 +138,8 @@ class BackgroundJob extends TimedJob {
                $notification->setApp('updatenotification')
                        ->setDateTime(new \DateTime())
                        ->setObject($app, $version)
-                       ->setSubject('update_available');
+                       ->setSubject('update_available')
+                       ->setLink($url);
 
                foreach ($this->getUsersToNotify() as $uid) {
                        $notification->setUser($uid);
index 9b920ec4ce78035ab259099be91f2292817e21eb..d1076e10be52e4740d31e63dfbd9b935aa332a05 100644 (file)
 namespace OCA\UpdateNotification\Tests\Notification;
 
 
-use OC\Installer;
-use OC\Updater\VersionCheck;
 use OCA\UpdateNotification\Notification\BackgroundJob;
 use OCP\App\IAppManager;
 use OCP\Http\Client\IClientService;
 use OCP\IConfig;
-use OCP\IGroup;
 use OCP\IGroupManager;
+use OCP\IURLGenerator;
 use OCP\IUser;
 use OCP\Notification\IManager;
 use Test\TestCase;
@@ -46,6 +44,8 @@ class BackgroundJobTest extends TestCase {
        protected $appManager;
        /** @var IClientService|\PHPUnit_Framework_MockObject_MockObject */
        protected $client;
+       /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */
+       protected $urlGenerator;
 
        public function setUp() {
                parent::setUp();
@@ -55,6 +55,7 @@ class BackgroundJobTest extends TestCase {
                $this->groupManager = $this->getMock('OCP\IGroupManager');
                $this->appManager = $this->getMock('OCP\App\IAppManager');
                $this->client = $this->getMock('OCP\Http\Client\IClientService');
+               $this->urlGenerator = $this->getMock('OCP\IURLGenerator');
        }
 
        /**
@@ -68,7 +69,8 @@ class BackgroundJobTest extends TestCase {
                                $this->notificationManager,
                                $this->groupManager,
                                $this->appManager,
-                               $this->client
+                               $this->client,
+                               $this->urlGenerator
                        );
                } {
                        return $this->getMockBuilder('OCA\UpdateNotification\Notification\BackgroundJob')
@@ -78,6 +80,7 @@ class BackgroundJobTest extends TestCase {
                                        $this->groupManager,
                                        $this->appManager,
                                        $this->client,
+                                       $this->urlGenerator,
                                ])
                                ->setMethods($methods)
                                ->getMock();
@@ -134,7 +137,7 @@ class BackgroundJobTest extends TestCase {
                $job->expects($this->once())
                        ->method('getChannel')
                        ->willReturn($channel);
-               
+
                if ($versionCheck === null) {
                        $job->expects($this->never())
                                ->method('createVersionCheck');
@@ -152,12 +155,20 @@ class BackgroundJobTest extends TestCase {
                }
 
                if ($notification === null) {
+                       $this->urlGenerator->expects($this->never())
+                               ->method('linkToRouteAbsolute');
+
                        $job->expects($this->never())
                                ->method('createNotifications');
                } else {
+                       $this->urlGenerator->expects($this->once())
+                               ->method('linkToRouteAbsolute')
+                               ->with('settings_admin')
+                               ->willReturn('admin-url');
+
                        $job->expects($this->once())
                                ->method('createNotifications')
-                               ->willReturn('core', $notification);
+                               ->willReturn('core', $notification, 'admin-url#updater');
                }
 
                $this->invokePrivate($job, 'checkCoreUpdate');
@@ -172,7 +183,7 @@ class BackgroundJobTest extends TestCase {
                                        ['app2', '1.9.2'],
                                ],
                                [
-                                       ['app2', '1.9.2'],
+                                       ['app2', '1.9.2', 'apps-url#app-app2'],
                                ],
                        ],
                ];
@@ -199,6 +210,11 @@ class BackgroundJobTest extends TestCase {
                        ->method('isUpdateAvailable')
                        ->willReturnMap($isUpdateAvailable);
 
+               $this->urlGenerator->expects($this->exactly(sizeof($notifications)))
+                       ->method('linkToRouteAbsolute')
+                       ->with('settings.AppSettings.viewApps')
+                       ->willReturn('apps-url');
+
                $mockedMethod = $job->expects($this->exactly(sizeof($notifications)))
                        ->method('createNotifications');
                call_user_func_array([$mockedMethod, 'withConsecutive'], $notifications);
@@ -208,9 +224,9 @@ class BackgroundJobTest extends TestCase {
 
        public function dataCreateNotifications() {
                return [
-                       ['app1', '1.0.0', '1.0.0', false, false, null, null],
-                       ['app2', '1.0.1', '1.0.0', '1.0.0', true, ['user1'], [['user1']]],
-                       ['app3', '1.0.1', false, false, true, ['user2', 'user3'], [['user2'], ['user3']]],
+                       ['app1', '1.0.0', 'link1', '1.0.0', false, false, null, null],
+                       ['app2', '1.0.1', 'link2', '1.0.0', '1.0.0', true, ['user1'], [['user1']]],
+                       ['app3', '1.0.1', 'link3', false, false, true, ['user2', 'user3'], [['user2'], ['user3']]],
                ];
        }
 
@@ -219,13 +235,14 @@ class BackgroundJobTest extends TestCase {
         *
         * @param string $app
         * @param string $version
+        * @param string $url
         * @param string|false $lastNotification
         * @param string|false $callDelete
         * @param bool $createNotification
         * @param string[]|null $users
         * @param array|null $userNotifications
         */
-       public function testCreateNotifications($app, $version, $lastNotification, $callDelete, $createNotification, $users, $userNotifications) {
+       public function testCreateNotifications($app, $version, $url, $lastNotification, $callDelete, $createNotification, $users, $userNotifications) {
                $job = $this->getJob([
                        'deleteOutdatedNotifications',
                        'getUsersToNotify',
@@ -277,6 +294,10 @@ class BackgroundJobTest extends TestCase {
                                ->method('setSubject')
                                ->with('update_available')
                                ->willReturnSelf();
+                       $notification->expects($this->once())
+                               ->method('setLink')
+                               ->with($url)
+                               ->willReturnSelf();
 
                        if ($userNotifications !== null) {
                                $mockedMethod = $notification->expects($this->exactly(sizeof($userNotifications)))
@@ -297,7 +318,7 @@ class BackgroundJobTest extends TestCase {
                                ->method('createNotification');
                }
 
-               $this->invokePrivate($job, 'createNotifications', [$app, $version]);
+               $this->invokePrivate($job, 'createNotifications', [$app, $version, $url]);
        }
 
        public function dataGetUsersToNotify() {