summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorLukas Reschke <lukas@owncloud.com>2015-09-10 15:26:36 +0200
committerLukas Reschke <lukas@owncloud.com>2015-09-10 15:26:36 +0200
commitfb717f254fe81065912c13e0907ba374c8167f98 (patch)
tree1a34b7c8bed92bb5686d73a1521998b2057276cf /tests
parent89cd9295600f6707579240f3f010d4b75a2d85cd (diff)
parent38001d824b142ca9c47f2afafce91ab8b76f1a9a (diff)
downloadnextcloud-server-fb717f254fe81065912c13e0907ba374c8167f98.tar.gz
nextcloud-server-fb717f254fe81065912c13e0907ba374c8167f98.zip
Merge pull request #18699 from owncloud/notification-manager
Notification manager
Diffstat (limited to 'tests')
-rw-r--r--tests/lib/notification/actiontest.php236
-rw-r--r--tests/lib/notification/managertest.php345
-rw-r--r--tests/lib/notification/notificationtest.php601
-rw-r--r--tests/lib/server.php2
4 files changed, 1184 insertions, 0 deletions
diff --git a/tests/lib/notification/actiontest.php b/tests/lib/notification/actiontest.php
new file mode 100644
index 00000000000..e319c250cc7
--- /dev/null
+++ b/tests/lib/notification/actiontest.php
@@ -0,0 +1,236 @@
+<?php
+/**
+ * @author Joas Schilling <nickvergessen@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * 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, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace Test\Notification;
+
+
+use OC\Notification\Action;
+use OC\Notification\IAction;
+use Test\TestCase;
+
+class ActionTest extends TestCase {
+ /** @var IAction */
+ protected $action;
+
+ public function setUp() {
+ parent::setUp();
+ $this->action = new Action();
+ }
+
+ public function dataSetLabel() {
+ return [
+ ['test1'],
+ [str_repeat('a', 1)],
+ [str_repeat('a', 32)],
+ ];
+ }
+
+ /**
+ * @dataProvider dataSetLabel
+ * @param string $label
+ */
+ public function testSetLabel($label) {
+ $this->assertSame('', $this->action->getLabel());
+ $this->action->setLabel($label);
+ $this->assertSame($label, $this->action->getLabel());
+ }
+
+ public function dataSetLabelInvalid() {
+ return [
+ [true],
+ [false],
+ [0],
+ [1],
+ [''],
+ [str_repeat('a', 33)],
+ [[]],
+ [[str_repeat('a', 33)]],
+ ];
+ }
+
+ /**
+ * @dataProvider dataSetLabelInvalid
+ * @param string $label
+ *
+ * @expectedException \InvalidArgumentException
+ */
+ public function testSetLabelInvalid($label) {
+ $this->action->setLabel($label);
+ }
+
+ public function dataSetParsedLabel() {
+ return [
+ ['test1'],
+ [str_repeat('a', 1)],
+ [str_repeat('a', 32)],
+ ];
+ }
+
+ /**
+ * @dataProvider dataSetParsedLabel
+ * @param string $label
+ */
+ public function testSetParsedLabel($label) {
+ $this->assertSame('', $this->action->getParsedLabel());
+ $this->action->setParsedLabel($label);
+ $this->assertSame($label, $this->action->getParsedLabel());
+ }
+
+ public function dataSetParsedLabelInvalid() {
+ return [
+ [true],
+ [false],
+ [0],
+ [1],
+ [''],
+ [[]],
+ [[str_repeat('a', 33)]],
+ ];
+ }
+
+ /**
+ * @dataProvider dataSetParsedLabelInvalid
+ * @param string $label
+ *
+ * @expectedException \InvalidArgumentException
+ */
+ public function testSetParsedLabelInvalid($label) {
+ $this->action->setParsedLabel($label);
+ }
+
+ public function dataSetLink() {
+ return [
+ ['test1', 'GET'],
+ ['test2', 'POST'],
+ [str_repeat('a', 1), 'PUT'],
+ [str_repeat('a', 256), 'DELETE'],
+ ];
+ }
+
+ /**
+ * @dataProvider dataSetLink
+ * @param string $link
+ * @param string $type
+ */
+ public function testSetLink($link, $type) {
+ $this->assertSame('', $this->action->getLink());
+ $this->action->setLink($link, $type);
+ $this->assertSame($link, $this->action->getLink());
+ $this->assertSame($type, $this->action->getRequestType());
+ }
+
+ public function dataSetLinkInvalid() {
+ return [
+ // Invalid link
+ [true, 'GET'],
+ [false, 'GET'],
+ [0, 'GET'],
+ [1, 'GET'],
+ ['', 'GET'],
+ [str_repeat('a', 257), 'GET'],
+ [[], 'GET'],
+ [[str_repeat('a', 257)], 'GET'],
+
+ // Invalid type
+ ['url', 'notGET'],
+ ['url', true],
+ ['url', false],
+ ['url', 0],
+ ['url', 1],
+ ['url', []],
+ ['url', ['GET']],
+ ];
+ }
+
+ /**
+ * @dataProvider dataSetLinkInvalid
+ * @param string $link
+ * @param string $type
+ *
+ * @expectedException \InvalidArgumentException
+ */
+ public function testSetLinkInvalid($link, $type) {
+ $this->action->setLink($link, $type);
+ }
+
+ public function dataSetIcon() {
+ return [
+ ['test1'],
+ [str_repeat('a', 1)],
+ [str_repeat('a', 64)],
+ ];
+ }
+
+ /**
+ * @dataProvider dataSetIcon
+ * @param string $icon
+ */
+ public function testSetIcon($icon) {
+ $this->assertSame('', $this->action->getIcon());
+ $this->action->setIcon($icon);
+ $this->assertSame($icon, $this->action->getIcon());
+ }
+
+ public function dataSetIconInvalid() {
+ return [
+ [true],
+ [false],
+ [0],
+ [1],
+ [''],
+ [str_repeat('a', 65)],
+ [[]],
+ [[str_repeat('a', 65)]],
+ ];
+ }
+
+ /**
+ * @dataProvider dataSetIconInvalid
+ * @param string $icon
+ *
+ * @expectedException \InvalidArgumentException
+ */
+ public function testSetIconInvalid($icon) {
+ $this->action->setIcon($icon);
+ }
+
+ public function testIsValid() {
+ $this->assertFalse($this->action->isValid());
+ $this->assertFalse($this->action->isValidParsed());
+ $this->action->setLabel('label');
+ $this->assertFalse($this->action->isValid());
+ $this->assertFalse($this->action->isValidParsed());
+ $this->action->setLink('link', 'GET');
+ $this->assertTrue($this->action->isValid());
+ $this->assertFalse($this->action->isValidParsed());
+ }
+
+ public function testIsValidParsed() {
+ $this->assertFalse($this->action->isValid());
+ $this->assertFalse($this->action->isValidParsed());
+ $this->action->setParsedLabel('label');
+ $this->assertFalse($this->action->isValid());
+ $this->assertFalse($this->action->isValidParsed());
+ $this->action->setLink('link', 'GET');
+ $this->assertFalse($this->action->isValid());
+ $this->assertTrue($this->action->isValidParsed());
+ }
+}
diff --git a/tests/lib/notification/managertest.php b/tests/lib/notification/managertest.php
new file mode 100644
index 00000000000..fa2a0586f90
--- /dev/null
+++ b/tests/lib/notification/managertest.php
@@ -0,0 +1,345 @@
+<?php
+/**
+ * @author Joas Schilling <nickvergessen@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * 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, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace Test\Notification;
+
+use OC\Notification\Manager;
+use OC\Notification\IManager;
+use Test\TestCase;
+
+class ManagerTest extends TestCase {
+ /** @var IManager */
+ protected $manager;
+
+ public function setUp() {
+ parent::setUp();
+ $this->manager = new Manager();
+ }
+
+ public function testRegisterApp() {
+ $app = $this->getMockBuilder('OC\Notification\IApp')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $closure = function() use ($app) {
+ return $app;
+ };
+
+ $this->assertEquals([], $this->invokePrivate($this->manager, 'getApps'));
+
+ $this->manager->registerApp($closure);
+
+ $this->assertEquals([$app], $this->invokePrivate($this->manager, 'getApps'));
+ $this->assertEquals([$app], $this->invokePrivate($this->manager, 'getApps'));
+
+ $this->manager->registerApp($closure);
+
+ $this->assertEquals([$app, $app], $this->invokePrivate($this->manager, 'getApps'));
+ }
+
+ /**
+ * @expectedException \InvalidArgumentException
+ */
+ public function testRegisterAppInvalid() {
+ $notifier = $this->getMockBuilder('OC\Notification\INotifier')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $closure = function() use ($notifier) {
+ return $notifier;
+ };
+
+ $this->manager->registerApp($closure);
+
+ $this->invokePrivate($this->manager, 'getApps');
+ }
+
+ public function testRegisterNotifier() {
+ $notifier = $this->getMockBuilder('OC\Notification\INotifier')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $closure = function() use ($notifier) {
+ return $notifier;
+ };
+
+ $this->assertEquals([], $this->invokePrivate($this->manager, 'getNotifiers'));
+
+ $this->manager->registerNotifier($closure);
+
+ $this->assertEquals([$notifier], $this->invokePrivate($this->manager, 'getNotifiers'));
+ $this->assertEquals([$notifier], $this->invokePrivate($this->manager, 'getNotifiers'));
+
+ $this->manager->registerNotifier($closure);
+
+ $this->assertEquals([$notifier, $notifier], $this->invokePrivate($this->manager, 'getNotifiers'));
+ }
+
+ /**
+ * @expectedException \InvalidArgumentException
+ */
+ public function testRegisterNotifierInvalid() {
+ $app = $this->getMockBuilder('OC\Notification\IApp')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $closure = function() use ($app) {
+ return $app;
+ };
+
+ $this->manager->registerNotifier($closure);
+
+ $this->invokePrivate($this->manager, 'getNotifiers');
+ }
+
+ public function testCreateNotification() {
+ $action = $this->manager->createNotification();
+ $this->assertInstanceOf('OC\Notification\INotification', $action);
+ }
+
+ public function testNotify() {
+ /** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */
+ $notification = $this->getMockBuilder('OC\Notification\INotification')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $notification->expects($this->once())
+ ->method('isValid')
+ ->willReturn(true);
+
+ /** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $app */
+ $app = $this->getMockBuilder('OC\Notification\IApp')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $app->expects($this->once())
+ ->method('notify')
+ ->with($notification);
+
+ /** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $app2 */
+ $app2 = $this->getMockBuilder('OC\Notification\IApp')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $app2->expects($this->once())
+ ->method('notify')
+ ->with($notification);
+
+ $this->manager->registerApp(function() use ($app) {
+ return $app;
+ });
+ $this->manager->registerApp(function() use ($app2) {
+ return $app2;
+ });
+
+ $this->manager->notify($notification);
+ }
+
+ /**
+ * @expectedException \InvalidArgumentException
+ */
+ public function testNotifyInvalid() {
+ /** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */
+ $notification = $this->getMockBuilder('OC\Notification\INotification')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $notification->expects($this->once())
+ ->method('isValid')
+ ->willReturn(false);
+
+ $this->manager->notify($notification);
+ }
+
+ public function testPrepare() {
+ /** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */
+ $notification = $this->getMockBuilder('OC\Notification\INotification')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $notification->expects($this->once())
+ ->method('isValidParsed')
+ ->willReturn(true);
+ /** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification2 */
+ $notification2 = $this->getMockBuilder('OC\Notification\INotification')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $notification2->expects($this->exactly(2))
+ ->method('isValidParsed')
+ ->willReturn(true);
+
+ /** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $notifier */
+ $notifier = $this->getMockBuilder('OC\Notification\INotifier')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $notifier->expects($this->once())
+ ->method('prepare')
+ ->with($notification, 'en')
+ ->willReturnArgument(0);
+
+ /** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $notifier2 */
+ $notifier2 = $this->getMockBuilder('OC\Notification\INotifier')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $notifier2->expects($this->once())
+ ->method('prepare')
+ ->with($notification, 'en')
+ ->willReturn($notification2);
+
+ $this->manager->registerNotifier(function() use ($notifier) {
+ return $notifier;
+ });
+ $this->manager->registerNotifier(function() use ($notifier2) {
+ return $notifier2;
+ });
+
+ $this->assertEquals($notification2, $this->manager->prepare($notification, 'en'));
+ }
+
+ /**
+ * @expectedException \InvalidArgumentException
+ */
+ public function testPrepareInvalid() {
+ /** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */
+ $notification = $this->getMockBuilder('OC\Notification\INotification')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $notification->expects($this->once())
+ ->method('isValidParsed')
+ ->willReturn(false);
+
+ /** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $notifier */
+ $notifier = $this->getMockBuilder('OC\Notification\INotifier')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $notifier->expects($this->once())
+ ->method('prepare')
+ ->with($notification, 'de')
+ ->willReturnArgument(0);
+
+ $this->manager->registerNotifier(function() use ($notifier) {
+ return $notifier;
+ });
+
+ $this->manager->prepare($notification, 'de');
+ }
+
+ public function testPrepareNotifierThrows() {
+ /** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */
+ $notification = $this->getMockBuilder('OC\Notification\INotification')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $notification->expects($this->once())
+ ->method('isValidParsed')
+ ->willReturn(true);
+
+ /** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $notifier */
+ $notifier = $this->getMockBuilder('OC\Notification\INotifier')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $notifier->expects($this->once())
+ ->method('prepare')
+ ->with($notification, 'de')
+ ->willThrowException(new \InvalidArgumentException);
+
+ $this->manager->registerNotifier(function() use ($notifier) {
+ return $notifier;
+ });
+
+ $this->assertEquals($notification, $this->manager->prepare($notification, 'de'));
+ }
+
+ /**
+ * @expectedException \InvalidArgumentException
+ */
+ public function testPrepareNoNotifier() {
+ /** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */
+ $notification = $this->getMockBuilder('OC\Notification\INotification')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $notification->expects($this->once())
+ ->method('isValidParsed')
+ ->willReturn(false);
+
+ $this->manager->prepare($notification, 'en');
+ }
+
+ public function testMarkProcessed() {
+ /** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */
+ $notification = $this->getMockBuilder('OC\Notification\INotification')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ /** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $app */
+ $app = $this->getMockBuilder('OC\Notification\IApp')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $app->expects($this->once())
+ ->method('markProcessed')
+ ->with($notification);
+
+ /** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $app2 */
+ $app2 = $this->getMockBuilder('OC\Notification\IApp')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $app2->expects($this->once())
+ ->method('markProcessed')
+ ->with($notification);
+
+ $this->manager->registerApp(function() use ($app) {
+ return $app;
+ });
+ $this->manager->registerApp(function() use ($app2) {
+ return $app2;
+ });
+
+ $this->manager->markProcessed($notification);
+ }
+
+ public function testGetCount() {
+ /** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */
+ $notification = $this->getMockBuilder('OC\Notification\INotification')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ /** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $app */
+ $app = $this->getMockBuilder('OC\Notification\IApp')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $app->expects($this->once())
+ ->method('getCount')
+ ->with($notification)
+ ->willReturn(21);
+
+ /** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $app2 */
+ $app2 = $this->getMockBuilder('OC\Notification\IApp')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $app2->expects($this->once())
+ ->method('getCount')
+ ->with($notification)
+ ->willReturn(42);
+
+ $this->manager->registerApp(function() use ($app) {
+ return $app;
+ });
+ $this->manager->registerApp(function() use ($app2) {
+ return $app2;
+ });
+
+ $this->assertSame(63, $this->manager->getCount($notification));
+ }
+}
diff --git a/tests/lib/notification/notificationtest.php b/tests/lib/notification/notificationtest.php
new file mode 100644
index 00000000000..a790a53eaa7
--- /dev/null
+++ b/tests/lib/notification/notificationtest.php
@@ -0,0 +1,601 @@
+<?php
+/**
+ * @author Joas Schilling <nickvergessen@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * 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, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace Test\Notification;
+
+
+use OC\Notification\Notification;
+use OC\Notification\INotification;
+use Test\TestCase;
+
+class NotificationTest extends TestCase {
+ /** @var INotification */
+ protected $notification;
+
+ public function setUp() {
+ parent::setUp();
+ $this->notification = new Notification();
+ }
+
+ protected function dataValidString($maxLength) {
+ $dataSets = [
+ ['test1'],
+ [str_repeat('a', 1)],
+ ];
+ if ($maxLength !== false) {
+ $dataSets[] = [str_repeat('a', $maxLength)];
+ }
+ return $dataSets;
+ }
+
+ protected function dataInvalidString($maxLength) {
+ $dataSets = [
+ [true],
+ [false],
+ [0],
+ [1],
+ [''],
+ [[]],
+ ];
+ if ($maxLength !== false) {
+ $dataSets[] = [str_repeat('a', $maxLength + 1)];
+ $dataSets[] = [[str_repeat('a', $maxLength + 1)]];
+ }
+ return $dataSets;
+ }
+
+ protected function dataValidInt() {
+ return [
+ [0],
+ [1],
+ [time()],
+ ];
+ }
+
+ protected function dataInvalidInt() {
+ return [
+ [true],
+ [false],
+ [''],
+ ['a'],
+ [str_repeat('a', 256)],
+ [[]],
+ [['a']],
+ [[str_repeat('a', 256)]],
+ ];
+ }
+
+ public function dataSetApp() {
+ return $this->dataValidString(32);
+ }
+
+ /**
+ * @dataProvider dataSetApp
+ * @param string $app
+ */
+ public function testSetApp($app) {
+ $this->assertSame('', $this->notification->getApp());
+ $this->notification->setApp($app);
+ $this->assertSame($app, $this->notification->getApp());
+ }
+
+ public function dataSetAppInvalid() {
+ return $this->dataInvalidString(32);
+ }
+
+ /**
+ * @dataProvider dataSetAppInvalid
+ * @param mixed $app
+ *
+ * @expectedException \InvalidArgumentException
+ */
+ public function testSetAppInvalid($app) {
+ $this->notification->setApp($app);
+ }
+
+ public function dataSetUser() {
+ return $this->dataValidString(64);
+ }
+
+ /**
+ * @dataProvider dataSetUser
+ * @param string $user
+ */
+ public function testSetUser($user) {
+ $this->assertSame('', $this->notification->getUser());
+ $this->notification->setUser($user);
+ $this->assertSame($user, $this->notification->getUser());
+ }
+
+ public function dataSetUserInvalid() {
+ return $this->dataInvalidString(64);
+ }
+
+ /**
+ * @dataProvider dataSetUserInvalid
+ * @param mixed $user
+ *
+ * @expectedException \InvalidArgumentException
+ */
+ public function testSetUserInvalid($user) {
+ $this->notification->setUser($user);
+ }
+
+ public function dataSetTimestamp() {
+ return $this->dataValidInt();
+ }
+
+ /**
+ * @dataProvider dataSetTimestamp
+ * @param int $timestamp
+ */
+ public function testSetTimestamp($timestamp) {
+ $this->assertSame(0, $this->notification->getTimestamp());
+ $this->notification->setTimestamp($timestamp);
+ $this->assertSame($timestamp, $this->notification->getTimestamp());
+ }
+
+ public function dataSetTimestampInvalid() {
+ return $this->dataInvalidInt();
+ }
+
+ /**
+ * @dataProvider dataSetTimestampInvalid
+ * @param mixed $timestamp
+ *
+ * @expectedException \InvalidArgumentException
+ */
+ public function testSetTimestampInvalid($timestamp) {
+ $this->notification->setTimestamp($timestamp);
+ }
+
+ public function dataSetObject() {
+ return [
+ ['a', 1],
+ [str_repeat('a', 64), time()],
+ ];
+ }
+
+ /**
+ * @dataProvider dataSetObject
+ * @param string $type
+ * @param int $id
+ */
+ public function testSetObject($type, $id) {
+ $this->assertSame('', $this->notification->getObjectType());
+ $this->assertSame(0, $this->notification->getObjectId());
+ $this->notification->setObject($type, $id);
+ $this->assertSame($type, $this->notification->getObjectType());
+ $this->assertSame($id, $this->notification->getObjectId());
+ }
+
+ public function dataSetObjectTypeInvalid() {
+ return $this->dataInvalidString(64);
+ }
+
+ /**
+ * @dataProvider dataSetObjectTypeInvalid
+ * @param mixed $type
+ *
+ * @expectedException \InvalidArgumentException
+ * @expectedMessage 'The given object type is invalid'
+ */
+ public function testSetObjectTypeInvalid($type) {
+ $this->notification->setObject($type, 1337);
+ }
+
+ public function dataSetObjectIdInvalid() {
+ return $this->dataInvalidInt();
+ }
+
+ /**
+ * @dataProvider dataSetObjectIdInvalid
+ * @param mixed $id
+ *
+ * @expectedException \InvalidArgumentException
+ * @expectedMessage 'The given object id is invalid'
+ */
+ public function testSetObjectIdInvalid($id) {
+ $this->notification->setObject('object', $id);
+ }
+
+ public function dataSetSubject() {
+ return [
+ ['a', []],
+ [str_repeat('a', 64), [str_repeat('a', 160)]],
+ [str_repeat('a', 64), array_fill(0, 160, 'a')],
+ ];
+ }
+
+ /**
+ * @dataProvider dataSetSubject
+ * @param string $subject
+ * @param array $parameters
+ */
+ public function testSetSubject($subject, $parameters) {
+ $this->assertSame('', $this->notification->getSubject());
+ $this->assertSame([], $this->notification->getSubjectParameters());
+ $this->notification->setSubject($subject, $parameters);
+ $this->assertSame($subject, $this->notification->getSubject());
+ $this->assertSame($parameters, $this->notification->getSubjectParameters());
+ }
+
+ public function dataSetSubjectInvalidSubject() {
+ return $this->dataInvalidString(64);
+ }
+
+ /**
+ * @dataProvider dataSetSubjectInvalidSubject
+ * @param mixed $subject
+ *
+ * @expectedException \InvalidArgumentException
+ */
+ public function testSetSubjectInvalidSubject($subject) {
+ $this->notification->setSubject($subject, []);
+ }
+
+ public function dataSetParsedSubject() {
+ return $this->dataValidString(false);
+ }
+
+ /**
+ * @dataProvider dataSetParsedSubject
+ * @param string $subject
+ */
+ public function testSetParsedSubject($subject) {
+ $this->assertSame('', $this->notification->getParsedSubject());
+ $this->notification->setParsedSubject($subject);
+ $this->assertSame($subject, $this->notification->getParsedSubject());
+ }
+
+ public function dataSetParsedSubjectInvalid() {
+ return $this->dataInvalidString(false);
+ }
+
+ /**
+ * @dataProvider dataSetParsedSubjectInvalid
+ * @param mixed $subject
+ *
+ * @expectedException \InvalidArgumentException
+ */
+ public function testSetParsedSubjectInvalid($subject) {
+ $this->notification->setParsedSubject($subject);
+ }
+
+ public function dataSetMessage() {
+ return [
+ ['a', []],
+ [str_repeat('a', 64), [str_repeat('a', 160)]],
+ [str_repeat('a', 64), array_fill(0, 160, 'a')],
+ ];
+ }
+
+ /**
+ * @dataProvider dataSetMessage
+ * @param string $message
+ * @param array $parameters
+ */
+ public function testSetMessage($message, $parameters) {
+ $this->assertSame('', $this->notification->getMessage());
+ $this->assertSame([], $this->notification->getMessageParameters());
+ $this->notification->setMessage($message, $parameters);
+ $this->assertSame($message, $this->notification->getMessage());
+ $this->assertSame($parameters, $this->notification->getMessageParameters());
+ }
+
+ public function dataSetMessageInvalidMessage() {
+ return $this->dataInvalidString(64);
+ }
+
+ /**
+ * @dataProvider dataSetMessageInvalidMessage
+ * @param mixed $message
+ *
+ * @expectedException \InvalidArgumentException
+ */
+ public function testSetMessageInvalidMessage($message) {
+ $this->notification->setMessage($message, []);
+ }
+
+ public function dataSetParsedMessage() {
+ return $this->dataValidString(false);
+ }
+
+ /**
+ * @dataProvider dataSetParsedMessage
+ * @param string $message
+ */
+ public function testSetParsedMessage($message) {
+ $this->assertSame('', $this->notification->getParsedMessage());
+ $this->notification->setParsedMessage($message);
+ $this->assertSame($message, $this->notification->getParsedMessage());
+ }
+
+ public function dataSetParsedMessageInvalid() {
+ return $this->dataInvalidString(false);
+ }
+
+ /**
+ * @dataProvider dataSetParsedMessageInvalid
+ * @param mixed $message
+ *
+ * @expectedException \InvalidArgumentException
+ */
+ public function testSetParsedMessageInvalid($message) {
+ $this->notification->setParsedMessage($message);
+ }
+
+ public function dataSetLink() {
+ return $this->dataValidString(4000);
+ }
+
+ /**
+ * @dataProvider dataSetLink
+ * @param string $link
+ */
+ public function testSetLink($link) {
+ $this->assertSame('', $this->notification->getLink());
+ $this->notification->setLink($link);
+ $this->assertSame($link, $this->notification->getLink());
+ }
+
+ public function dataSetLinkInvalid() {
+ return $this->dataInvalidString(4000);
+ }
+
+ /**
+ * @dataProvider dataSetLinkInvalid
+ * @param mixed $link
+ *
+ * @expectedException \InvalidArgumentException
+ */
+ public function testSetLinkInvalid($link) {
+ $this->notification->setLink($link);
+ }
+
+ public function dataSetIcon() {
+ return $this->dataValidString(64);
+ }
+
+ /**
+ * @dataProvider dataSetIcon
+ * @param string $icon
+ */
+ public function testSetIcon($icon) {
+ $this->assertSame('', $this->notification->getIcon());
+ $this->notification->setIcon($icon);
+ $this->assertSame($icon, $this->notification->getIcon());
+ }
+
+ public function dataSetIconInvalid() {
+ return $this->dataInvalidString(64);
+ }
+
+ /**
+ * @dataProvider dataSetIconInvalid
+ * @param mixed $icon
+ *
+ * @expectedException \InvalidArgumentException
+ */
+ public function testSetIconInvalid($icon) {
+ $this->notification->setIcon($icon);
+ }
+
+ public function testCreateAction() {
+ $action = $this->notification->createAction();
+ $this->assertInstanceOf('OC\Notification\IAction', $action);
+ }
+
+ public function testAddAction() {
+ /** @var \OC\Notification\IAction|\PHPUnit_Framework_MockObject_MockObject $action */
+ $action = $this->getMockBuilder('OC\Notification\IAction')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $action->expects($this->once())
+ ->method('isValid')
+ ->willReturn(true);
+ $action->expects($this->never())
+ ->method('isValidParsed');
+
+ $this->notification->addAction($action);
+
+ $this->assertEquals([$action], $this->notification->getActions());
+ $this->assertEquals([], $this->notification->getParsedActions());
+ }
+
+ /**
+ * @expectedException \InvalidArgumentException
+ */
+ public function testAddActionInvalid() {
+ /** @var \OC\Notification\IAction|\PHPUnit_Framework_MockObject_MockObject $action */
+ $action = $this->getMockBuilder('OC\Notification\IAction')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $action->expects($this->once())
+ ->method('isValid')
+ ->willReturn(false);
+ $action->expects($this->never())
+ ->method('isValidParsed');
+
+ $this->notification->addAction($action);
+ }
+
+ public function testAddParsedAction() {
+ /** @var \OC\Notification\IAction|\PHPUnit_Framework_MockObject_MockObject $action */
+ $action = $this->getMockBuilder('OC\Notification\IAction')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $action->expects($this->once())
+ ->method('isValidParsed')
+ ->willReturn(true);
+ $action->expects($this->never())
+ ->method('isValid');
+
+ $this->notification->addParsedAction($action);
+
+ $this->assertEquals([$action], $this->notification->getParsedActions());
+ $this->assertEquals([], $this->notification->getActions());
+ }
+
+ /**
+ * @expectedException \InvalidArgumentException
+ */
+ public function testAddParsedActionInvalid() {
+ /** @var \OC\Notification\IAction|\PHPUnit_Framework_MockObject_MockObject $action */
+ $action = $this->getMockBuilder('OC\Notification\IAction')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $action->expects($this->once())
+ ->method('isValidParsed')
+ ->willReturn(false);
+ $action->expects($this->never())
+ ->method('isValid');
+
+ $this->notification->addParsedAction($action);
+ }
+
+ public function dataIsValid() {
+ return [
+ [false, '', false],
+ [true, '', false],
+ [false, 'a', false],
+ [true, 'a', true],
+ ];
+ }
+
+ /**
+ * @dataProvider dataIsValid
+ *
+ * @param bool $isValidCommon
+ * @param string $subject
+ * @param bool $expected
+ */
+ public function testIsValid($isValidCommon, $subject, $expected) {
+ /** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */
+ $notification = $this->getMockBuilder('\OC\Notification\Notification')
+ ->setMethods([
+ 'isValidCommon',
+ 'getSubject',
+ ])
+ ->getMock();
+
+ $notification->expects($this->once())
+ ->method('isValidCommon')
+ ->willReturn($isValidCommon);
+
+ $notification->expects(!$isValidCommon ? $this->never() : $this->once())
+ ->method('getSubject')
+ ->willReturn($subject);
+
+ $notification->expects($this->never())
+ ->method('getParsedSubject')
+ ->willReturn($subject);
+
+ $this->assertEquals($expected, $notification->isValid());
+ }
+
+ /**
+ * @dataProvider dataIsValid
+ *
+ * @param bool $isValidCommon
+ * @param string $subject
+ * @param bool $expected
+ */
+ public function testIsParsedValid($isValidCommon, $subject, $expected) {
+ /** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */
+ $notification = $this->getMockBuilder('\OC\Notification\Notification')
+ ->setMethods([
+ 'isValidCommon',
+ 'getParsedSubject',
+ ])
+ ->getMock();
+
+ $notification->expects($this->once())
+ ->method('isValidCommon')
+ ->willReturn($isValidCommon);
+
+ $notification->expects(!$isValidCommon ? $this->never() : $this->once())
+ ->method('getParsedSubject')
+ ->willReturn($subject);
+
+ $notification->expects($this->never())
+ ->method('getSubject')
+ ->willReturn($subject);
+
+ $this->assertEquals($expected, $notification->isValidParsed());
+ }
+
+ public function dataIsValidCommon() {
+ return [
+ ['', '', 0, '', 0, false],
+ ['app', '', 0, '', 0, false],
+ ['app', 'user', 0, '', 0, false],
+ ['app', 'user', time(), '', 0, false],
+ ['app', 'user', time(), 'type', 0, false],
+ ['app', 'user', time(), 'type', 42, true],
+ ];
+ }
+
+ /**
+ * @dataProvider dataIsValidCommon
+ *
+ * @param string $app
+ * @param string $user
+ * @param int $timestamp
+ * @param string $objectType
+ * @param int $objectId
+ * @param bool $expected
+ */
+ public function testIsValidCommon($app, $user, $timestamp, $objectType, $objectId, $expected) {
+ /** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */
+ $notification = $this->getMockBuilder('\OC\Notification\Notification')
+ ->setMethods([
+ 'getApp',
+ 'getUser',
+ 'getTimestamp',
+ 'getObjectType',
+ 'getObjectId',
+ ])
+ ->getMock();
+
+ $notification->expects($this->any())
+ ->method('getApp')
+ ->willReturn($app);
+
+ $notification->expects($this->any())
+ ->method('getUser')
+ ->willReturn($user);
+
+ $notification->expects($this->any())
+ ->method('getTimestamp')
+ ->willReturn($timestamp);
+
+ $notification->expects($this->any())
+ ->method('getObjectType')
+ ->willReturn($objectType);
+
+ $notification->expects($this->any())
+ ->method('getObjectId')
+ ->willReturn($objectId);
+
+ $this->assertEquals($expected, $this->invokePrivate($notification, 'isValidCommon'));
+ }
+}
diff --git a/tests/lib/server.php b/tests/lib/server.php
index e73fc8b3ab1..96a476bd4d1 100644
--- a/tests/lib/server.php
+++ b/tests/lib/server.php
@@ -104,6 +104,8 @@ class Server extends \Test\TestCase {
['NavigationManager', '\OC\NavigationManager'],
['NavigationManager', '\OCP\INavigationManager'],
+ ['NotificationManager', '\OC\Notification\Manager'],
+ ['NotificationManager', '\OC\Notification\IManager'],
['UserCache', '\OC\Cache\File'],
['UserCache', '\OCP\ICache'],