diff options
author | Lukas Reschke <lukas@owncloud.com> | 2015-09-10 15:26:36 +0200 |
---|---|---|
committer | Lukas Reschke <lukas@owncloud.com> | 2015-09-10 15:26:36 +0200 |
commit | fb717f254fe81065912c13e0907ba374c8167f98 (patch) | |
tree | 1a34b7c8bed92bb5686d73a1521998b2057276cf /tests | |
parent | 89cd9295600f6707579240f3f010d4b75a2d85cd (diff) | |
parent | 38001d824b142ca9c47f2afafce91ab8b76f1a9a (diff) | |
download | nextcloud-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.php | 236 | ||||
-rw-r--r-- | tests/lib/notification/managertest.php | 345 | ||||
-rw-r--r-- | tests/lib/notification/notificationtest.php | 601 | ||||
-rw-r--r-- | tests/lib/server.php | 2 |
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'], |