diff options
author | Joas Schilling <nickvergessen@gmx.de> | 2016-05-20 15:38:20 +0200 |
---|---|---|
committer | Thomas Müller <DeepDiver1975@users.noreply.github.com> | 2016-05-20 15:38:20 +0200 |
commit | 94ad54ec9b96d41a614fbbad4a97b34c41a6901f (patch) | |
tree | f3eb7cdda2704aaf0cd59d58efe66bcbd34cb67d /tests/lib/Activity | |
parent | 2ef751b1ec28f7b5c7113af60ec8c9fa0ae1cf87 (diff) | |
download | nextcloud-server-94ad54ec9b96d41a614fbbad4a97b34c41a6901f.tar.gz nextcloud-server-94ad54ec9b96d41a614fbbad4a97b34c41a6901f.zip |
Move tests/ to PSR-4 (#24731)
* Move a-b to PSR-4
* Move c-d to PSR-4
* Move e+g to PSR-4
* Move h-l to PSR-4
* Move m-r to PSR-4
* Move s-u to PSR-4
* Move files/ to PSR-4
* Move remaining tests to PSR-4
* Remove Test\ from old autoloader
Diffstat (limited to 'tests/lib/Activity')
-rw-r--r-- | tests/lib/Activity/ManagerTest.php | 572 |
1 files changed, 572 insertions, 0 deletions
diff --git a/tests/lib/Activity/ManagerTest.php b/tests/lib/Activity/ManagerTest.php new file mode 100644 index 00000000000..cf855dd2813 --- /dev/null +++ b/tests/lib/Activity/ManagerTest.php @@ -0,0 +1,572 @@ +<?php + +/** + * Copyright (c) 2014 Thomas Müller <deepdiver@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + * +*/ + +namespace Test\Activity; + +use Test\TestCase; + +class ManagerTest extends TestCase { + + /** @var \OC\Activity\Manager */ + private $activityManager; + + /** @var \OCP\IRequest|\PHPUnit_Framework_MockObject_MockObject */ + protected $request; + + /** @var \OCP\IUserSession|\PHPUnit_Framework_MockObject_MockObject */ + protected $session; + + /** @var \OCP\IConfig|\PHPUnit_Framework_MockObject_MockObject */ + protected $config; + + protected function setUp() { + parent::setUp(); + + $this->request = $this->getMockBuilder('OCP\IRequest') + ->disableOriginalConstructor() + ->getMock(); + $this->session = $this->getMockBuilder('OCP\IUserSession') + ->disableOriginalConstructor() + ->getMock(); + $this->config = $this->getMockBuilder('OCP\IConfig') + ->disableOriginalConstructor() + ->getMock(); + + $this->activityManager = new \OC\Activity\Manager( + $this->request, + $this->session, + $this->config + ); + + $this->assertSame([], $this->invokePrivate($this->activityManager, 'getConsumers')); + $this->assertSame([], $this->invokePrivate($this->activityManager, 'getExtensions')); + + $this->activityManager->registerConsumer(function() { + return new NoOpConsumer(); + }); + $this->activityManager->registerExtension(function() { + return new NoOpExtension(); + }); + $this->activityManager->registerExtension(function() { + return new SimpleExtension(); + }); + + $this->assertNotEmpty($this->invokePrivate($this->activityManager, 'getConsumers')); + $this->assertNotEmpty($this->invokePrivate($this->activityManager, 'getConsumers')); + $this->assertNotEmpty($this->invokePrivate($this->activityManager, 'getExtensions')); + $this->assertNotEmpty($this->invokePrivate($this->activityManager, 'getExtensions')); + } + + public function testGetConsumers() { + $consumers = $this->invokePrivate($this->activityManager, 'getConsumers'); + + $this->assertNotEmpty($consumers); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testGetConsumersInvalidConsumer() { + $this->activityManager->registerConsumer(function() { + return new \stdClass(); + }); + + $this->invokePrivate($this->activityManager, 'getConsumers'); + } + + public function testGetExtensions() { + $extensions = $this->invokePrivate($this->activityManager, 'getExtensions'); + + $this->assertNotEmpty($extensions); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testGetExtensionsInvalidExtension() { + $this->activityManager->registerExtension(function() { + return new \stdClass(); + }); + + $this->invokePrivate($this->activityManager, 'getExtensions'); + } + + public function testNotificationTypes() { + $result = $this->activityManager->getNotificationTypes('en'); + $this->assertTrue(is_array($result)); + $this->assertEquals(2, sizeof($result)); + } + + public function testDefaultTypes() { + $result = $this->activityManager->getDefaultTypes('stream'); + $this->assertTrue(is_array($result)); + $this->assertEquals(1, sizeof($result)); + + $result = $this->activityManager->getDefaultTypes('email'); + $this->assertTrue(is_array($result)); + $this->assertEquals(0, sizeof($result)); + } + + public function testTypeIcon() { + $result = $this->activityManager->getTypeIcon('NT1'); + $this->assertEquals('icon-nt-one', $result); + + $result = $this->activityManager->getTypeIcon('NT2'); + $this->assertEquals('', $result); + } + + public function testTranslate() { + $result = $this->activityManager->translate('APP0', '', array(), false, false, 'en'); + $this->assertEquals('Stupid translation', $result); + + $result = $this->activityManager->translate('APP1', '', array(), false, false, 'en'); + $this->assertFalse($result); + } + + public function testGetSpecialParameterList() { + $result = $this->activityManager->getSpecialParameterList('APP0', ''); + $this->assertEquals(array(0 => 'file', 1 => 'username'), $result); + + $result = $this->activityManager->getSpecialParameterList('APP1', ''); + $this->assertFalse($result); + } + + public function testGroupParameter() { + $result = $this->activityManager->getGroupParameter(array()); + $this->assertEquals(5, $result); + } + + public function testNavigation() { + $result = $this->activityManager->getNavigation(); + $this->assertEquals(4, sizeof($result['apps'])); + $this->assertEquals(2, sizeof($result['top'])); + } + + public function testIsFilterValid() { + $result = $this->activityManager->isFilterValid('fv01'); + $this->assertTrue($result); + + $result = $this->activityManager->isFilterValid('InvalidFilter'); + $this->assertFalse($result); + } + + public function testFilterNotificationTypes() { + $result = $this->activityManager->filterNotificationTypes(array('NT0', 'NT1', 'NT2', 'NT3'), 'fv01'); + $this->assertTrue(is_array($result)); + $this->assertEquals(3, sizeof($result)); + + $result = $this->activityManager->filterNotificationTypes(array('NT0', 'NT1', 'NT2', 'NT3'), 'InvalidFilter'); + $this->assertTrue(is_array($result)); + $this->assertEquals(4, sizeof($result)); + } + + public function testQueryForFilter() { + // Register twice, to test the created sql part + $this->activityManager->registerExtension(function() { + return new SimpleExtension(); + }); + + $result = $this->activityManager->getQueryForFilter('fv01'); + $this->assertEquals( + array( + ' and ((`app` = ? and `message` like ?) or (`app` = ? and `message` like ?))', + array('mail', 'ownCloud%', 'mail', 'ownCloud%') + ), $result + ); + + $result = $this->activityManager->getQueryForFilter('InvalidFilter'); + $this->assertEquals(array(null, null), $result); + } + + public function getUserFromTokenThrowInvalidTokenData() { + return [ + [null, []], + ['', []], + ['12345678901234567890123456789', []], + ['1234567890123456789012345678901', []], + ['123456789012345678901234567890', []], + ['123456789012345678901234567890', ['user1', 'user2']], + ]; + } + + /** + * @expectedException \UnexpectedValueException + * @dataProvider getUserFromTokenThrowInvalidTokenData + * + * @param string $token + * @param array $users + */ + public function testGetUserFromTokenThrowInvalidToken($token, $users) { + $this->mockRSSToken($token, $token, $users); + self::invokePrivate($this->activityManager, 'getUserFromToken'); + } + + public function getUserFromTokenData() { + return [ + [null, '123456789012345678901234567890', 'user1'], + ['user2', null, 'user2'], + ['user2', '123456789012345678901234567890', 'user2'], + ]; + } + + /** + * @dataProvider getUserFromTokenData + * + * @param string $userLoggedIn + * @param string $token + * @param string $expected + */ + public function testGetUserFromToken($userLoggedIn, $token, $expected) { + if ($userLoggedIn !== null) { + $this->mockUserSession($userLoggedIn); + } + $this->mockRSSToken($token, '123456789012345678901234567890', ['user1']); + + $this->assertEquals($expected, $this->activityManager->getCurrentUserId()); + } + + protected function mockRSSToken($requestToken, $userToken, $users) { + if ($requestToken !== null) { + $this->request->expects($this->any()) + ->method('getParam') + ->with('token', '') + ->willReturn($requestToken); + } + + $this->config->expects($this->any()) + ->method('getUsersForUserValue') + ->with('activity', 'rsstoken', $userToken) + ->willReturn($users); + } + + protected function mockUserSession($user) { + $mockUser = $this->getMockBuilder('\OCP\IUser') + ->disableOriginalConstructor() + ->getMock(); + $mockUser->expects($this->any()) + ->method('getUID') + ->willReturn($user); + + $this->session->expects($this->any()) + ->method('isLoggedIn') + ->willReturn(true); + $this->session->expects($this->any()) + ->method('getUser') + ->willReturn($mockUser); + } + + /** + * @expectedException \BadMethodCallException + * @expectedExceptionMessage App not set + * @expectedExceptionCode 10 + */ + public function testPublishExceptionNoApp() { + $event = new \OC\Activity\Event(); + $this->activityManager->publish($event); + } + + /** + * @expectedException \BadMethodCallException + * @expectedExceptionMessage Type not set + * @expectedExceptionCode 11 + */ + public function testPublishExceptionNoType() { + $event = new \OC\Activity\Event(); + $event->setApp('test'); + $this->activityManager->publish($event); + } + + /** + * @expectedException \BadMethodCallException + * @expectedExceptionMessage Affected user not set + * @expectedExceptionCode 12 + */ + public function testPublishExceptionNoAffectedUser() { + $event = new \OC\Activity\Event(); + $event->setApp('test') + ->setType('test_type'); + $this->activityManager->publish($event); + } + + /** + * @expectedException \BadMethodCallException + * @expectedExceptionMessage Subject not set + * @expectedExceptionCode 13 + */ + public function testPublishExceptionNoSubject() { + $event = new \OC\Activity\Event(); + $event->setApp('test') + ->setType('test_type') + ->setAffectedUser('test_affected'); + $this->activityManager->publish($event); + } + + public function dataPublish() { + return [ + [null], + ['test_author'], + ]; + } + + /** + * @dataProvider dataPublish + * @param string $author + */ + public function testPublish($author) { + if ($author !== null) { + $authorObject = $this->getMockBuilder('OCP\IUser') + ->disableOriginalConstructor() + ->getMock(); + $authorObject->expects($this->once()) + ->method('getUID') + ->willReturn($author); + $this->session->expects($this->atLeastOnce()) + ->method('getUser') + ->willReturn($authorObject); + } + + $event = new \OC\Activity\Event(); + $event->setApp('test') + ->setType('test_type') + ->setSubject('test_subject', []) + ->setAffectedUser('test_affected'); + + $consumer = $this->getMockBuilder('OCP\Activity\IConsumer') + ->disableOriginalConstructor() + ->getMock(); + $consumer->expects($this->once()) + ->method('receive') + ->with($event) + ->willReturnCallback(function(\OCP\Activity\IEvent $event) use ($author) { + $this->assertLessThanOrEqual(time() + 2, $event->getTimestamp(), 'Timestamp not set correctly'); + $this->assertGreaterThanOrEqual(time() - 2, $event->getTimestamp(), 'Timestamp not set correctly'); + $this->assertSame($author, $event->getAuthor(), 'Author name not set correctly'); + }); + $this->activityManager->registerConsumer(function () use ($consumer) { + return $consumer; + }); + + $this->activityManager->publish($event); + } + + public function testPublishAllManually() { + $event = new \OC\Activity\Event(); + $event->setApp('test_app') + ->setType('test_type') + ->setAffectedUser('test_affected') + ->setAuthor('test_author') + ->setTimestamp(1337) + ->setSubject('test_subject', ['test_subject_param']) + ->setMessage('test_message', ['test_message_param']) + ->setObject('test_object_type', 42, 'test_object_name') + ->setLink('test_link') + ; + + $consumer = $this->getMockBuilder('OCP\Activity\IConsumer') + ->disableOriginalConstructor() + ->getMock(); + $consumer->expects($this->once()) + ->method('receive') + ->willReturnCallback(function(\OCP\Activity\IEvent $event) { + $this->assertSame('test_app', $event->getApp(), 'App not set correctly'); + $this->assertSame('test_type', $event->getType(), 'Type not set correctly'); + $this->assertSame('test_affected', $event->getAffectedUser(), 'Affected user not set correctly'); + $this->assertSame('test_author', $event->getAuthor(), 'Author not set correctly'); + $this->assertSame(1337, $event->getTimestamp(), 'Timestamp not set correctly'); + $this->assertSame('test_subject', $event->getSubject(), 'Subject not set correctly'); + $this->assertSame(['test_subject_param'], $event->getSubjectParameters(), 'Subject parameter not set correctly'); + $this->assertSame('test_message', $event->getMessage(), 'Message not set correctly'); + $this->assertSame(['test_message_param'], $event->getMessageParameters(), 'Message parameter not set correctly'); + $this->assertSame('test_object_type', $event->getObjectType(), 'Object type not set correctly'); + $this->assertSame(42, $event->getObjectId(), 'Object ID not set correctly'); + $this->assertSame('test_object_name', $event->getObjectName(), 'Object name not set correctly'); + $this->assertSame('test_link', $event->getLink(), 'Link not set correctly'); + }); + $this->activityManager->registerConsumer(function () use ($consumer) { + return $consumer; + }); + + $this->activityManager->publish($event); + } + + public function testDeprecatedPublishActivity() { + $event = new \OC\Activity\Event(); + $event->setApp('test_app') + ->setType('test_type') + ->setAffectedUser('test_affected') + ->setAuthor('test_author') + ->setTimestamp(1337) + ->setSubject('test_subject', ['test_subject_param']) + ->setMessage('test_message', ['test_message_param']) + ->setObject('test_object_type', 42, 'test_object_name') + ->setLink('test_link') + ; + + $consumer = $this->getMockBuilder('OCP\Activity\IConsumer') + ->disableOriginalConstructor() + ->getMock(); + $consumer->expects($this->once()) + ->method('receive') + ->willReturnCallback(function(\OCP\Activity\IEvent $event) { + $this->assertSame('test_app', $event->getApp(), 'App not set correctly'); + $this->assertSame('test_type', $event->getType(), 'Type not set correctly'); + $this->assertSame('test_affected', $event->getAffectedUser(), 'Affected user not set correctly'); + $this->assertSame('test_subject', $event->getSubject(), 'Subject not set correctly'); + $this->assertSame(['test_subject_param'], $event->getSubjectParameters(), 'Subject parameter not set correctly'); + $this->assertSame('test_message', $event->getMessage(), 'Message not set correctly'); + $this->assertSame(['test_message_param'], $event->getMessageParameters(), 'Message parameter not set correctly'); + $this->assertSame('test_object_name', $event->getObjectName(), 'Object name not set correctly'); + $this->assertSame('test_link', $event->getLink(), 'Link not set correctly'); + + // The following values can not be used via publishActivity() + $this->assertLessThanOrEqual(time() + 2, $event->getTimestamp(), 'Timestamp not set correctly'); + $this->assertGreaterThanOrEqual(time() - 2, $event->getTimestamp(), 'Timestamp not set correctly'); + $this->assertSame(null, $event->getAuthor(), 'Author not set correctly'); + $this->assertSame('', $event->getObjectType(), 'Object type should not be set'); + $this->assertSame(0, $event->getObjectId(), 'Object ID should not be set'); + }); + $this->activityManager->registerConsumer(function () use ($consumer) { + return $consumer; + }); + + $this->activityManager->publishActivity( + $event->getApp(), + $event->getSubject(), $event->getSubjectParameters(), + $event->getMessage(), $event->getMessageParameters(), + $event->getObjectName(), + $event->getLink(), + $event->getAffectedUser(), + $event->getType(), + \OCP\Activity\IExtension::PRIORITY_MEDIUM + ); + } +} + +class SimpleExtension implements \OCP\Activity\IExtension { + + public function getNotificationTypes($languageCode) { + return array('NT1', 'NT2'); + } + + public function getDefaultTypes($method) { + if ($method === 'stream') { + return array('DT0'); + } + + return array(); + } + + public function getTypeIcon($type) { + if ($type === 'NT1') { + return 'icon-nt-one'; + } + return ''; + } + + public function translate($app, $text, $params, $stripPath, $highlightParams, $languageCode) { + if ($app === 'APP0') { + return "Stupid translation"; + } + + return false; + } + + public function getSpecialParameterList($app, $text) { + if ($app === 'APP0') { + return array(0 => 'file', 1 => 'username'); + } + + return false; + } + + public function getGroupParameter($activity) { + return 5; + } + + public function getNavigation() { + return array( + 'apps' => array('nav1', 'nav2', 'nav3', 'nav4'), + 'top' => array('top1', 'top2') + ); + } + + public function isFilterValid($filterValue) { + if ($filterValue === 'fv01') { + return true; + } + + return false; + } + + public function filterNotificationTypes($types, $filter) { + if ($filter === 'fv01') { + unset($types[0]); + } + return $types; + } + + public function getQueryForFilter($filter) { + if ($filter === 'fv01') { + return array('`app` = ? and `message` like ?', array('mail', 'ownCloud%')); + } + + return false; + } +} + +class NoOpExtension implements \OCP\Activity\IExtension { + + public function getNotificationTypes($languageCode) { + return false; + } + + public function getDefaultTypes($method) { + return false; + } + + public function getTypeIcon($type) { + return false; + } + + public function translate($app, $text, $params, $stripPath, $highlightParams, $languageCode) { + return false; + } + + public function getSpecialParameterList($app, $text) { + return false; + } + + public function getGroupParameter($activity) { + return false; + } + + public function getNavigation() { + return false; + } + + public function isFilterValid($filterValue) { + return false; + } + + public function filterNotificationTypes($types, $filter) { + return false; + } + + public function getQueryForFilter($filter) { + return false; + } +} + +class NoOpConsumer implements \OCP\Activity\IConsumer { + + public function receive(\OCP\Activity\IEvent $event) { + + } +} |