* * @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 * */ namespace Test\Notification; use OC\AppFramework\Bootstrap\Coordinator; use OC\AppFramework\Bootstrap\RegistrationContext; use OC\AppFramework\Bootstrap\ServiceRegistration; use OC\Notification\Manager; use OCP\ILogger; use OCP\Notification\IManager; use OCP\Notification\INotification; use OCP\RichObjectStrings\IValidator; use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class ManagerTest extends TestCase { /** @var IManager */ protected $manager; /** @var IValidator|MockObject */ protected $validator; /** @var ILogger|MockObject */ protected $logger; /** @var Coordinator|MockObject */ protected $coordinator; /** @var RegistrationContext|MockObject */ protected $registrationContext; protected function setUp(): void { parent::setUp(); $this->validator = $this->createMock(IValidator::class); $this->logger = $this->createMock(ILogger::class); $this->registrationContext = $this->createMock(RegistrationContext::class); $this->coordinator = $this->createMock(Coordinator::class); $this->coordinator->method('getRegistrationContext') ->willReturn($this->registrationContext); $this->manager = new Manager($this->validator, $this->logger, $this->coordinator); } public function testRegisterApp() { $this->assertEquals([], self::invokePrivate($this->manager, 'getApps')); $this->manager->registerApp(DummyApp::class); $this->assertCount(1, self::invokePrivate($this->manager, 'getApps')); $this->assertCount(1, self::invokePrivate($this->manager, 'getApps')); $this->manager->registerApp(DummyApp::class); $this->assertCount(2, self::invokePrivate($this->manager, 'getApps')); } public function testRegisterAppInvalid() { $this->manager->registerApp(DummyNotifier::class); $this->logger->expects($this->once()) ->method('error'); self::invokePrivate($this->manager, 'getApps'); } public function testRegisterNotifier() { $this->assertEquals([], self::invokePrivate($this->manager, 'getNotifiers')); $this->manager->registerNotifierService(DummyNotifier::class); $this->assertCount(1, self::invokePrivate($this->manager, 'getNotifiers')); $this->assertCount(1, self::invokePrivate($this->manager, 'getNotifiers')); $this->manager->registerNotifierService(DummyNotifier::class); $this->assertCount(2, self::invokePrivate($this->manager, 'getNotifiers')); } public function testRegisterNotifierBootstrap() { $this->registrationContext->method('getNotifierServices') ->willReturn([ new ServiceRegistration('app', DummyNotifier::class), ]); $this->assertCount(1, self::invokePrivate($this->manager, 'getNotifiers')); $this->assertCount(1, self::invokePrivate($this->manager, 'getNotifiers')); } public function testRegisterNotifierInvalid() { $this->manager->registerNotifierService(DummyApp::class); $this->logger->expects($this->once()) ->method('error'); self::invokePrivate($this->manager, 'getNotifiers'); } public function testCreateNotification() { $action = $this->manager->createNotification(); $this->assertInstanceOf('OCP\Notification\INotification', $action); } public function testNotify() { /** @var \OCP\Notification\INotification|\PHPUnit\Framework\MockObject\MockObject $notification */ $notification = $this->getMockBuilder(INotification::class) ->disableOriginalConstructor() ->getMock(); $notification->expects($this->once()) ->method('isValid') ->willReturn(true); $manager = $this->getMockBuilder(Manager::class) ->setConstructorArgs([ $this->validator, $this->logger, $this->coordinator, ]) ->setMethods(['getApps']) ->getMock(); $manager->expects($this->once()) ->method('getApps') ->willReturn([]); $manager->notify($notification); } public function testNotifyInvalid() { $this->expectException(\InvalidArgumentException::class); /** @var \OCP\Notification\INotification|\PHPUnit\Framework\MockObject\MockObject $notification */ $notification = $this->getMockBuilder(INotification::class) ->disableOriginalConstructor() ->getMock(); $notification->expects($this->once()) ->method('isValid') ->willReturn(false); $manager = $this->getMockBuilder(Manager::class) ->setConstructorArgs([ $this->validator, $this->logger, $this->coordinator, ]) ->setMethods(['getApps']) ->getMock(); $manager->expects($this->never()) ->method('getApps'); $manager->notify($notification); } public function testMarkProcessed() { /** @var \OCP\Notification\INotification|\PHPUnit\Framework\MockObject\MockObject $notification */ $notification = $this->getMockBuilder(INotification::class) ->disableOriginalConstructor() ->getMock(); $manager = $this->getMockBuilder(Manager::class) ->setConstructorArgs([ $this->validator, $this->logger, $this->coordinator, ]) ->setMethods(['getApps']) ->getMock(); $manager->expects($this->once()) ->method('getApps') ->willReturn([]); $manager->markProcessed($notification); } public function testGetCount() { /** @var \OCP\Notification\INotification|\PHPUnit\Framework\MockObject\MockObject $notification */ $notification = $this->getMockBuilder(INotification::class) ->disableOriginalConstructor() ->getMock(); $manager = $this->getMockBuilder(Manager::class) ->setConstructorArgs([ $this->validator, $this->logger, $this->coordinator, ]) ->setMethods(['getApps']) ->getMock(); $manager->expects($this->once()) ->method('getApps') ->willReturn([]); $manager->getCount($notification); } }