Skip to content

Commit

Permalink
Add a URL to the notifications
Browse files Browse the repository at this point in the history
  • Loading branch information
nickvergessen committed May 10, 2016
1 parent 339276a commit dbf0a10
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 17 deletions.
20 changes: 15 additions & 5 deletions apps/updatenotification/lib/Notification/BackgroundJob.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
use OCP\IConfig;
use OCP\IGroup;
use OCP\IGroupManager;
use OCP\IURLGenerator;
use OCP\IUser;
use OCP\Notification\IManager;

Expand All @@ -50,6 +51,9 @@ class BackgroundJob extends TimedJob {
/** @var IClientService */
protected $client;

/** @var IURLGenerator */
protected $urlGenerator;

/** @var IUser[] */
protected $users;

Expand All @@ -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);

Expand All @@ -71,6 +76,7 @@ public function __construct(IConfig $config, IManager $notificationManager, IGro
$this->groupManager = $groupManager;
$this->appManager = $appManager;
$this->client = $client;
$this->urlGenerator = $urlGenerator;
}

protected function run($argument) {
Expand All @@ -91,7 +97,8 @@ protected function checkCoreUpdate() {

$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);
}
}

Expand All @@ -103,7 +110,8 @@ protected function checkAppUpdates() {
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);
}
}
}
Expand All @@ -113,8 +121,9 @@ protected function checkAppUpdates() {
*
* @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
Expand All @@ -129,7 +138,8 @@ protected function createNotifications($app, $version) {
$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);
Expand Down
45 changes: 33 additions & 12 deletions apps/updatenotification/tests/Notification/BackgroundJobTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,12 @@
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;
Expand All @@ -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();
Expand All @@ -55,6 +55,7 @@ public function setUp() {
$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');
}

/**
Expand All @@ -68,7 +69,8 @@ protected function getJob(array $methods = []) {
$this->notificationManager,
$this->groupManager,
$this->appManager,
$this->client
$this->client,
$this->urlGenerator
);
} {
return $this->getMockBuilder('OCA\UpdateNotification\Notification\BackgroundJob')
Expand All @@ -78,6 +80,7 @@ protected function getJob(array $methods = []) {
$this->groupManager,
$this->appManager,
$this->client,
$this->urlGenerator,
])
->setMethods($methods)
->getMock();
Expand Down Expand Up @@ -134,7 +137,7 @@ public function testCheckCoreUpdate($channel, $versionCheck, $notification) {
$job->expects($this->once())
->method('getChannel')
->willReturn($channel);

if ($versionCheck === null) {
$job->expects($this->never())
->method('createVersionCheck');
Expand All @@ -152,12 +155,20 @@ public function testCheckCoreUpdate($channel, $versionCheck, $notification) {
}

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');
Expand All @@ -172,7 +183,7 @@ public function dataCheckAppUpdates() {
['app2', '1.9.2'],
],
[
['app2', '1.9.2'],
['app2', '1.9.2', 'apps-url#app-app2'],
],
],
];
Expand All @@ -199,6 +210,11 @@ public function testCheckAppUpdates(array $apps, array $isUpdateAvailable, array
->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);
Expand All @@ -208,9 +224,9 @@ public function testCheckAppUpdates(array $apps, array $isUpdateAvailable, array

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']]],
];
}

Expand All @@ -219,13 +235,14 @@ public function dataCreateNotifications() {
*
* @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',
Expand Down Expand Up @@ -277,6 +294,10 @@ public function testCreateNotifications($app, $version, $lastNotification, $call
->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)))
Expand All @@ -297,7 +318,7 @@ public function testCreateNotifications($app, $version, $lastNotification, $call
->method('createNotification');
}

$this->invokePrivate($job, 'createNotifications', [$app, $version]);
$this->invokePrivate($job, 'createNotifications', [$app, $version, $url]);
}

public function dataGetUsersToNotify() {
Expand Down

0 comments on commit dbf0a10

Please sign in to comment.