From 07f6747305d23dfb16ad3c63b968f974771aa145 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 13 Oct 2016 11:04:22 +0200 Subject: Move the methods into a new class Signed-off-by: Joas Schilling --- .../unit/CalDAV/AbstractCalDavBackendTest.php | 40 +++++++-------- apps/dav/tests/unit/CalDAV/CalDavBackendTest.php | 4 +- .../tests/unit/CalDAV/PublicCalendarRootTest.php | 57 +++++++++++++++++----- 3 files changed, 67 insertions(+), 34 deletions(-) (limited to 'apps/dav/tests') diff --git a/apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php b/apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php index 2559ecbbf89..a674c65c286 100644 --- a/apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php +++ b/apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php @@ -22,18 +22,15 @@ namespace OCA\DAV\Tests\unit\CalDAV; -use DateTime; -use DateTimeZone; +use OCA\DAV\CalDAV\Activity\Backend as ActivityBackend; use OCA\DAV\CalDAV\CalDavBackend; -use OCA\DAV\CalDAV\Calendar; use OCA\DAV\Connector\Sabre\Principal; -use OCP\IL10N; -use OCP\IConfig; +use OCP\Activity\IManager as IActivityManager; +use OCP\IGroupManager; +use OCP\IUserManager; +use OCP\IUserSession; use OCP\Security\ISecureRandom; use Sabre\CalDAV\Xml\Property\SupportedCalendarComponentSet; -use Sabre\DAV\PropPatch; -use Sabre\DAV\Xml\Property\Href; -use Sabre\DAVACL\IACL; use Test\TestCase; /** @@ -50,12 +47,10 @@ abstract class AbstractCalDavBackendTest extends TestCase { /** @var Principal | \PHPUnit_Framework_MockObject_MockObject */ protected $principal; - - /** @var \OCP\IUserManager|\PHPUnit_Framework_MockObject_MockObject */ + /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */ protected $userManager; - - /** var OCP\IConfig */ - protected $config; + /** @var ActivityBackend|\PHPUnit_Framework_MockObject_MockObject */ + protected $activityBackend; /** @var ISecureRandom */ private $random; @@ -67,9 +62,10 @@ abstract class AbstractCalDavBackendTest extends TestCase { public function setUp() { parent::setUp(); - $this->userManager = $this->getMockBuilder('OCP\IUserManager') - ->disableOriginalConstructor() - ->getMock(); + $this->userManager = $this->createMock(IUserManager::class); + $groupManager = $this->createMock(IGroupManager::class); + $activityManager = $this->createMock(IActivityManager::class); + $userSession = $this->createMock(IUserSession::class); $this->principal = $this->getMockBuilder('OCA\DAV\Connector\Sabre\Principal') ->disableOriginalConstructor() ->setMethods(['getPrincipalByPath', 'getGroupMembership']) @@ -83,15 +79,21 @@ abstract class AbstractCalDavBackendTest extends TestCase { ->willReturn([self::UNIT_TEST_GROUP]); $db = \OC::$server->getDatabaseConnection(); - $this->config = \OC::$server->getConfig(); $this->random = \OC::$server->getSecureRandom(); - $this->backend = new CalDavBackend($db, $this->principal, $this->userManager, $this->config, $this->random); - $this->tearDown(); + $this->backend = new CalDavBackend($db, $this->principal, $this->userManager, $groupManager, $this->random, $activityManager, $userSession); + + $this->activityBackend = $this->createMock(ActivityBackend::class); + $this->invokePrivate($this->backend, 'activityBackend', [$this->activityBackend]); + + $this->cleanUpBackend(); } public function tearDown() { + $this->cleanUpBackend(); parent::tearDown(); + } + public function cleanUpBackend() { if (is_null($this->backend)) { return; } diff --git a/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php b/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php index 8349d98cd94..4d60e983b13 100644 --- a/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php +++ b/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php @@ -357,10 +357,8 @@ EOD; $calendar->setPublishStatus(false); $this->assertEquals(false, $calendar->getPublishStatus()); - $publicCalendarURI = md5($this->config->getSystemValue('secret', '') . $calendar->getResourceId()); $this->setExpectedException('Sabre\DAV\Exception\NotFound'); - $publicCalendar = $this->backend->getPublicCalendar($publicCalendarURI); - + $this->backend->getPublicCalendar($publicCalendarURI); } public function testSubscriptions() { diff --git a/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php b/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php index 6dfec6d7e1f..c3a3d783e18 100644 --- a/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php +++ b/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php @@ -2,12 +2,16 @@ namespace OCA\DAV\Tests\unit\CalDAV; +use OCA\DAV\CalDAV\Activity\Backend as ActivityBackend; use OCA\DAV\CalDAV\Calendar; use OCA\DAV\Connector\Sabre\Principal; +use OCP\Activity\IManager as IActivityManager; +use OCP\IGroupManager; use OCP\IL10N; use OCA\DAV\CalDAV\CalDavBackend; use OCA\DAV\CalDAV\PublicCalendarRoot; use OCP\IUserManager; +use OCP\IUserSession; use OCP\Security\ISecureRandom; use Test\TestCase; @@ -27,12 +31,19 @@ class PublicCalendarRootTest extends TestCase { private $publicCalendarRoot; /** @var IL10N */ private $l10n; - /** @var IUserManager */ - private $userManager; - /** @var Principal */ + /** @var Principal|\PHPUnit_Framework_MockObject_MockObject */ private $principal; - /** var IConfig */ - protected $config; + /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */ + protected $userManager; + /** @var IGroupManager|\PHPUnit_Framework_MockObject_MockObject */ + protected $groupManager; + /** @var IActivityManager|\PHPUnit_Framework_MockObject_MockObject */ + protected $activityManager; + /** @var IUserSession|\PHPUnit_Framework_MockObject_MockObject */ + protected $userSession; + /** @var ActivityBackend|\PHPUnit_Framework_MockObject_MockObject */ + protected $activityBackend; + /** @var ISecureRandom */ private $random; @@ -40,21 +51,26 @@ class PublicCalendarRootTest extends TestCase { parent::setUp(); $db = \OC::$server->getDatabaseConnection(); - $this->principal = $this->getMockBuilder('OCA\DAV\Connector\Sabre\Principal') - ->disableOriginalConstructor() - ->getMock(); - $this->config = \OC::$server->getConfig(); - $this->userManager = $this->getMockBuilder('\OCP\IUserManager')->getMock(); + $this->principal = $this->createMock('OCA\DAV\Connector\Sabre\Principal'); + $this->userManager = $this->createMock(IUserManager::class); + $groupManager = $this->createMock(IGroupManager::class); + $activityManager = $this->createMock(IActivityManager::class); + $userSession = $this->createMock(IUserSession::class); $this->random = \OC::$server->getSecureRandom(); $this->backend = new CalDavBackend( $db, $this->principal, $this->userManager, - $this->config, - $this->random + $groupManager, + $this->random, + $activityManager, + $userSession ); + $this->activityBackend = $this->createMock(ActivityBackend::class); + $this->invokePrivate($this->backend, 'activityBackend', [$this->activityBackend]); + $this->publicCalendarRoot = new PublicCalendarRoot($this->backend); $this->l10n = $this->getMockBuilder('\OCP\IL10N') @@ -79,6 +95,14 @@ class PublicCalendarRootTest extends TestCase { } public function testGetChild() { + $this->activityBackend->expects($this->exactly(1)) + ->method('addCalendar'); + $this->activityBackend->expects($this->never()) + ->method('updateCalendar'); + $this->activityBackend->expects($this->never()) + ->method('deleteCalendar'); + $this->activityBackend->expects($this->never()) + ->method('updateCalendarShares'); $calendar = $this->createPublicCalendar(); @@ -93,6 +117,15 @@ class PublicCalendarRootTest extends TestCase { } public function testGetChildren() { + $this->activityBackend->expects($this->exactly(1)) + ->method('addCalendar'); + $this->activityBackend->expects($this->never()) + ->method('updateCalendar'); + $this->activityBackend->expects($this->never()) + ->method('deleteCalendar'); + $this->activityBackend->expects($this->never()) + ->method('updateCalendarShares'); + $this->createPublicCalendar(); $publicCalendars = $this->backend->getPublicCalendars(); -- cgit v1.2.3 From 52dd27892b80ab91d0776c45d05d8447ac24b76e Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 13 Oct 2016 15:34:26 +0200 Subject: Use the event dispatcher Signed-off-by: Joas Schilling --- apps/dav/appinfo/v1/caldav.php | 6 +- apps/dav/lib/AppInfo/Application.php | 57 ++++++++ apps/dav/lib/CalDAV/Activity/Backend.php | 143 +++++++-------------- apps/dav/lib/CalDAV/CalDavBackend.php | 93 ++++++++++---- apps/dav/lib/Command/CreateCalendar.php | 5 +- apps/dav/lib/RootCollection.php | 5 +- .../unit/CalDAV/AbstractCalDavBackendTest.php | 16 +-- .../tests/unit/CalDAV/PublicCalendarRootTest.php | 41 +----- 8 files changed, 189 insertions(+), 177 deletions(-) (limited to 'apps/dav/tests') diff --git a/apps/dav/appinfo/v1/caldav.php b/apps/dav/appinfo/v1/caldav.php index ecd6a171235..9f12a92f4cd 100644 --- a/apps/dav/appinfo/v1/caldav.php +++ b/apps/dav/appinfo/v1/caldav.php @@ -48,10 +48,8 @@ $principalBackend = new Principal( $db = \OC::$server->getDatabaseConnection(); $userManager = \OC::$server->getUserManager(); $random = \OC::$server->getSecureRandom(); -$groupManager = \OC::$server->getGroupManager(); -$activityManager = \OC::$server->getActivityManager(); -$userSession = \OC::$server->getUserSession(); -$calDavBackend = new CalDavBackend($db, $principalBackend, $userManager, $groupManager, $random, $activityManager, $userSession); +$dispatcher = \OC::$server->getEventDispatcher(); +$calDavBackend = new CalDavBackend($db, $principalBackend, $userManager, $random, $dispatcher); $debugging = \OC::$server->getConfig()->getSystemValue('debug', false); diff --git a/apps/dav/lib/AppInfo/Application.php b/apps/dav/lib/AppInfo/Application.php index 32483e8fd8e..c777f5e5a35 100644 --- a/apps/dav/lib/AppInfo/Application.php +++ b/apps/dav/lib/AppInfo/Application.php @@ -24,6 +24,7 @@ */ namespace OCA\DAV\AppInfo; +use OCA\DAV\CalDAV\Activity\Backend; use OCA\DAV\CalDAV\Activity\Extension; use OCA\DAV\CalDAV\BirthdayService; use OCA\DAV\Capabilities; @@ -90,6 +91,62 @@ class Application extends App { } }); + $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::createCalendar', function(GenericEvent $event) { + /** @var Backend $backend */ + $backend = $this->getContainer()->query(Backend::class); + $backend->onCalendarAdd( + $event->getArgument('calendarData') + ); + }); + $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::updateCalendar', function(GenericEvent $event) { + /** @var Backend $backend */ + $backend = $this->getContainer()->query(Backend::class); + $backend->onCalendarUpdate( + $event->getArgument('calendarData'), + $event->getArgument('shares'), + $event->getArgument('propertyMutations') + ); + }); + $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::deleteCalendar', function(GenericEvent $event) { + /** @var Backend $backend */ + $backend = $this->getContainer()->query(Backend::class); + $backend->onCalendarDelete( + $event->getArgument('calendarData'), + $event->getArgument('shares') + ); + }); + $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::updateShares', function(GenericEvent $event) { + /** @var Backend $backend */ + $backend = $this->getContainer()->query(Backend::class); + $backend->onCalendarUpdateShares( + $event->getArgument('calendarData'), + $event->getArgument('shares'), + $event->getArgument('add'), + $event->getArgument('remove') + ); + }); + + $listener = function(GenericEvent $event, $eventName) { + /** @var Backend $backend */ + $backend = $this->getContainer()->query(Backend::class); + + $subject = Extension::SUBJECT_OBJECT_ADD; + if ($eventName === '\OCA\DAV\CalDAV\CalDavBackend::updateCalendarObject') { + $subject = Extension::SUBJECT_OBJECT_UPDATE; + } else if ($eventName === '\OCA\DAV\CalDAV\CalDavBackend::deleteCalendarObject') { + $subject = Extension::SUBJECT_OBJECT_DELETE; + } + $backend->onTouchCalendarObject( + $subject, + $event->getArgument('calendarData'), + $event->getArgument('shares'), + $event->getArgument('objectData') + ); + }; + $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject', $listener); + $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::updateCalendarObject', $listener); + $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::deleteCalendarObject', $listener); + $aM = $this->getContainer()->getServer()->getActivityManager(); $aM->registerExtension(function() { return $this->getContainer()->query(Extension::class); diff --git a/apps/dav/lib/CalDAV/Activity/Backend.php b/apps/dav/lib/CalDAV/Activity/Backend.php index 1c1637cd562..6cf09f6de46 100644 --- a/apps/dav/lib/CalDAV/Activity/Backend.php +++ b/apps/dav/lib/CalDAV/Activity/Backend.php @@ -22,8 +22,6 @@ namespace OCA\DAV\CalDAV\Activity; -use OCA\DAV\CalDAV\CalDavBackend; -use OCA\DAV\CalDAV\Calendar; use OCP\Activity\IEvent; use OCP\Activity\IManager as IActivityManager; use OCP\IGroup; @@ -39,9 +37,6 @@ use Sabre\VObject\Reader; */ class Backend { - /** @var CalDavBackend */ - protected $calDavBackend; - /** @var IActivityManager */ protected $activityManager; @@ -52,13 +47,11 @@ class Backend { protected $userSession; /** - * @param CalDavBackend $calDavBackend * @param IActivityManager $activityManager * @param IGroupManager $groupManager * @param IUserSession $userSession */ - public function __construct(CalDavBackend $calDavBackend, IActivityManager $activityManager, IGroupManager $groupManager, IUserSession $userSession) { - $this->calDavBackend = $calDavBackend; + public function __construct(IActivityManager $activityManager, IGroupManager $groupManager, IUserSession $userSession) { $this->activityManager = $activityManager; $this->groupManager = $groupManager; $this->userSession = $userSession; @@ -67,46 +60,47 @@ class Backend { /** * Creates activities when a calendar was creates * - * @param int $calendarId - * @param array $properties + * @param array $calendarData */ - public function addCalendar($calendarId, array $properties) { - $this->triggerCalendarActivity(Extension::SUBJECT_ADD, $calendarId, $properties); + public function onCalendarAdd(array $calendarData) { + $this->triggerCalendarActivity(Extension::SUBJECT_ADD, $calendarData); } /** * Creates activities when a calendar was updated * - * @param int $calendarId + * @param array $calendarData + * @param array $shares * @param array $properties */ - public function updateCalendar($calendarId, array $properties) { - $this->triggerCalendarActivity(Extension::SUBJECT_UPDATE, $calendarId, $properties); + public function onCalendarUpdate(array $calendarData, array $shares, array $properties) { + $this->triggerCalendarActivity(Extension::SUBJECT_UPDATE, $calendarData, $shares, $properties); } /** * Creates activities when a calendar was deleted * - * @param int $calendarId + * @param array $calendarData + * @param array $shares */ - public function deleteCalendar($calendarId) { - $this->triggerCalendarActivity(Extension::SUBJECT_DELETE, $calendarId); + public function onCalendarDelete(array $calendarData, array $shares) { + $this->triggerCalendarActivity(Extension::SUBJECT_DELETE, $calendarData, $shares); } /** * Creates activities for all related users when a calendar was touched * * @param string $action - * @param int $calendarId + * @param array $calendarData + * @param array $shares * @param array $changedProperties */ - protected function triggerCalendarActivity($action, $calendarId, array $changedProperties = []) { - $properties = $this->calDavBackend->getCalendarById($calendarId); - if (!isset($properties['principaluri'])) { + protected function triggerCalendarActivity($action, array $calendarData, array $shares = [], array $changedProperties = []) { + if (!isset($calendarData['principaluri'])) { return; } - $principal = explode('/', $properties['principaluri']); + $principal = explode('/', $calendarData['principaluri']); $owner = $principal[2]; $currentUser = $this->userSession->getUser(); @@ -118,7 +112,7 @@ class Backend { $event = $this->activityManager->generateEvent(); $event->setApp('dav') - ->setObject(Extension::CALENDAR, $calendarId) + ->setObject(Extension::CALENDAR, $calendarData['id']) ->setType(Extension::CALENDAR) ->setAuthor($currentUser); @@ -127,10 +121,10 @@ class Backend { '{http://apple.com/ns/ical/}calendar-color' ], array_keys($changedProperties)); - if ($action === Extension::SUBJECT_UPDATE && empty($changedVisibleInformation)) { + if (empty($shares) || ($action === Extension::SUBJECT_UPDATE && empty($changedVisibleInformation))) { $users = [$owner]; } else { - $users = $this->getUsersForCalendar($calendarId); + $users = $this->getUsersForShares($shares); $users[] = $owner; } @@ -140,7 +134,7 @@ class Backend { $user === $currentUser ? $action . '_self' : $action, [ $currentUser, - $properties['{DAV:}displayname'], + $calendarData['{DAV:}displayname'], ] ); $this->activityManager->publish($event); @@ -150,16 +144,13 @@ class Backend { /** * Creates activities for all related users when a calendar was (un-)shared * - * @param Calendar $calendar + * @param array $calendarData + * @param array $shares * @param array $add * @param array $remove */ - public function updateCalendarShares(Calendar $calendar, array $add, array $remove) { - $calendarId = $calendar->getResourceId(); - $shares = $this->calDavBackend->getShares($calendarId); - - $properties = $this->calDavBackend->getCalendarById($calendarId); - $principal = explode('/', $properties['principaluri']); + public function onCalendarUpdateShares(array $calendarData, array $shares, array $add, array $remove) { + $principal = explode('/', $calendarData['principaluri']); $owner = $principal[2]; $currentUser = $this->userSession->getUser(); @@ -171,7 +162,7 @@ class Backend { $event = $this->activityManager->generateEvent(); $event->setApp('dav') - ->setObject(Extension::CALENDAR, $calendarId) + ->setObject(Extension::CALENDAR, $calendarData['id']) ->setType(Extension::CALENDAR) ->setAuthor($currentUser); @@ -187,7 +178,7 @@ class Backend { $this->triggerActivityUser( $principal[2], $event, - $properties, + $calendarData, Extension::SUBJECT_UNSHARE_USER, Extension::SUBJECT_DELETE . '_self' ); @@ -195,7 +186,7 @@ class Backend { if ($owner !== $principal[2]) { $parameters = [ $principal[2], - $properties['{DAV:}displayname'], + $calendarData['{DAV:}displayname'], ]; if ($owner === $event->getAuthor()) { @@ -216,11 +207,11 @@ class Backend { $this->activityManager->publish($event); } } else if ($principal[1] === 'groups') { - $this->triggerActivityGroup($principal[2], $event, $properties, Extension::SUBJECT_UNSHARE_USER); + $this->triggerActivityGroup($principal[2], $event, $calendarData, Extension::SUBJECT_UNSHARE_USER); $parameters = [ $principal[2], - $properties['{DAV:}displayname'], + $calendarData['{DAV:}displayname'], ]; if ($owner === $event->getAuthor()) { @@ -253,12 +244,12 @@ class Backend { $principal = explode('/', $parts[1]); if ($principal[1] === 'users') { - $this->triggerActivityUser($principal[2], $event, $properties, Extension::SUBJECT_SHARE_USER); + $this->triggerActivityUser($principal[2], $event, $calendarData, Extension::SUBJECT_SHARE_USER); if ($owner !== $principal[2]) { $parameters = [ $principal[2], - $properties['{DAV:}displayname'], + $calendarData['{DAV:}displayname'], ]; if ($owner === $event->getAuthor()) { @@ -277,11 +268,11 @@ class Backend { $this->activityManager->publish($event); } } else if ($principal[1] === 'groups') { - $this->triggerActivityGroup($principal[2], $event, $properties, Extension::SUBJECT_SHARE_USER); + $this->triggerActivityGroup($principal[2], $event, $calendarData, Extension::SUBJECT_SHARE_USER); $parameters = [ $principal[2], - $properties['{DAV:}displayname'], + $calendarData['{DAV:}displayname'], ]; if ($owner === $event->getAuthor()) { @@ -363,49 +354,19 @@ class Backend { } /** - * Creates activities when a calendar object was created - * - * @param int $calendarId - * @param string $objectUri - */ - public function addCalendarObject($calendarId, $objectUri) { - $this->triggerCalendarObjectActivity(Extension::SUBJECT_OBJECT_ADD, $calendarId, $objectUri); - } - - /** - * Creates activities when a calendar object was updated - * - * @param int $calendarId - * @param string $objectUri - */ - public function updateCalendarObject($calendarId, $objectUri) { - $this->triggerCalendarObjectActivity(Extension::SUBJECT_OBJECT_UPDATE, $calendarId, $objectUri); - } - - /** - * Creates activities when a calendar object was deleted - * - * @param int $calendarId - * @param string $objectUri - */ - public function deleteCalendarObject($calendarId, $objectUri) { - $this->triggerCalendarObjectActivity(Extension::SUBJECT_OBJECT_DELETE, $calendarId, $objectUri); - } - - /** - * Creates activities for all related users when a calendar was touched + * Creates activities when a calendar object was created/updated/deleted * * @param string $action - * @param int $calendarId - * @param string $objectUri + * @param array $calendarData + * @param array $shares + * @param array $objectData */ - protected function triggerCalendarObjectActivity($action, $calendarId, $objectUri) { - $properties = $this->calDavBackend->getCalendarById($calendarId); - if (!isset($properties['principaluri'])) { + public function onTouchCalendarObject($action, array $calendarData, array $shares, array $objectData) { + if (!isset($calendarData['principaluri'])) { return; } - $principal = explode('/', $properties['principaluri']); + $principal = explode('/', $calendarData['principaluri']); $owner = $principal[2]; $currentUser = $this->userSession->getUser(); @@ -415,7 +376,7 @@ class Backend { $currentUser = $owner; } - $object = $this->getObjectNameAndType($calendarId, $objectUri); + $object = $this->getObjectNameAndType($objectData); $action = $action . '_' . $object['type']; if ($object['type'] === 'todo' && strpos($action, Extension::SUBJECT_OBJECT_UPDATE) === 0 && $object['status'] === 'COMPLETED') { @@ -426,11 +387,11 @@ class Backend { $event = $this->activityManager->generateEvent(); $event->setApp('dav') - ->setObject(Extension::CALENDAR, $calendarId) + ->setObject(Extension::CALENDAR, $calendarData['id']) ->setType($object['type'] === 'event' ? Extension::CALENDAR_EVENT : Extension::CALENDAR_TODO) ->setAuthor($currentUser); - $users = $this->getUsersForCalendar($calendarId); + $users = $this->getUsersForShares($shares); $users[] = $owner; foreach ($users as $user) { @@ -439,7 +400,7 @@ class Backend { $user === $currentUser ? $action . '_self' : $action, [ $currentUser, - $properties['{DAV:}displayname'], + $calendarData['{DAV:}displayname'], $object['name'], ] ); @@ -448,14 +409,11 @@ class Backend { } /** - * @param int $calendarId - * @param string $objectUri + * @param array $objectData * @return string[]|bool */ - protected function getObjectNameAndType($calendarId, $objectUri) { - $data = $this->calDavBackend->getCalendarObject($calendarId, $objectUri); - - $vObject = Reader::read($data['calendardata']); + protected function getObjectNameAndType(array $objectData) { + $vObject = Reader::read($objectData['calendardata']); $component = $componentType = null; foreach($vObject->getComponents() as $component) { if (in_array($component->name, ['VEVENT', 'VTODO'])) { @@ -478,12 +436,11 @@ class Backend { /** * Get all users that have access to a given calendar * - * @param int $calendarId + * @param array $shares * @return string[] */ - protected function getUsersForCalendar($calendarId) { + protected function getUsersForShares(array $shares) { $users = $groups = []; - $shares = $this->calDavBackend->getShares($calendarId); foreach ($shares as $share) { $prinical = explode('/', $share['{http://owncloud.org/ns}principal']); if ($prinical[1] === 'users') { diff --git a/apps/dav/lib/CalDAV/CalDavBackend.php b/apps/dav/lib/CalDAV/CalDavBackend.php index 660114e462a..fb608c2009d 100644 --- a/apps/dav/lib/CalDAV/CalDavBackend.php +++ b/apps/dav/lib/CalDAV/CalDavBackend.php @@ -26,16 +26,12 @@ namespace OCA\DAV\CalDAV; use OCA\DAV\DAV\Sharing\IShareable; -use OCA\DAV\CalDAV\Activity\Backend as ActivityBackend; -use OCP\Activity\IManager as IActivityManager; use OCP\DB\QueryBuilder\IQueryBuilder; use OCA\DAV\Connector\Sabre\Principal; use OCA\DAV\DAV\Sharing\Backend; use OCP\IDBConnection; -use OCP\IGroupManager; use OCP\IUser; use OCP\IUserManager; -use OCP\IUserSession; use OCP\Security\ISecureRandom; use Sabre\CalDAV\Backend\AbstractBackend; use Sabre\CalDAV\Backend\SchedulingSupport; @@ -52,6 +48,8 @@ use Sabre\HTTP\URLUtil; use Sabre\VObject\DateTimeParser; use Sabre\VObject\Reader; use Sabre\VObject\Recur\EventIterator; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\EventDispatcher\GenericEvent; /** * Class CalDavBackend @@ -131,8 +129,8 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription /** @var ISecureRandom */ private $random; - /** @var ActivityBackend */ - private $activityBackend; + /** @var EventDispatcherInterface */ + private $dispatcher; /** * CalDavBackend constructor. @@ -140,25 +138,20 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription * @param IDBConnection $db * @param Principal $principalBackend * @param IUserManager $userManager - * @param IGroupManager $groupManager * @param ISecureRandom $random - * @param IActivityManager $activityManager - * @param IUserSession $userSession + * @param EventDispatcherInterface $dispatcher */ public function __construct(IDBConnection $db, Principal $principalBackend, IUserManager $userManager, - IGroupManager $groupManager, ISecureRandom $random, - IActivityManager $activityManager, - IUserSession $userSession) { + EventDispatcherInterface $dispatcher) { $this->db = $db; $this->principalBackend = $principalBackend; $this->userManager = $userManager; - $this->userManager = $groupManager; $this->sharingBackend = new Backend($this->db, $principalBackend, 'calendar'); - $this->activityBackend = new ActivityBackend($this, $activityManager, $groupManager, $userSession); $this->random = $random; + $this->dispatcher = $dispatcher; } /** @@ -623,7 +616,12 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription $query->execute(); $calendarId = $query->getLastInsertId(); - $this->activityBackend->addCalendar($calendarId, $values); + $this->dispatcher->dispatch('\OCA\DAV\CalDAV\CalDavBackend::createCalendar', new GenericEvent( + '\OCA\DAV\CalDAV\CalDavBackend::createCalendar', + [ + 'calendarId' => $calendarId, + 'calendarData' => $this->getCalendarById($calendarId), + ])); return $calendarId; } @@ -673,7 +671,14 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription $this->addChange($calendarId, "", 2); - $this->activityBackend->updateCalendar($calendarId, $mutations); + $this->dispatcher->dispatch('\OCA\DAV\CalDAV\CalDavBackend::updateCalendar', new GenericEvent( + '\OCA\DAV\CalDAV\CalDavBackend::updateCalendar', + [ + 'calendarId' => $calendarId, + 'calendarData' => $this->getCalendarById($calendarId), + 'shares' => $this->getShares($calendarId), + 'propertyMutations' => $mutations, + ])); return true; }); @@ -686,7 +691,13 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription * @return void */ function deleteCalendar($calendarId) { - $this->activityBackend->deleteCalendar($calendarId); + $this->dispatcher->dispatch('\OCA\DAV\CalDAV\CalDavBackend::deleteCalendar', new GenericEvent( + '\OCA\DAV\CalDAV\CalDavBackend::deleteCalendar', + [ + 'calendarId' => $calendarId, + 'calendarData' => $this->getCalendarById($calendarId), + 'shares' => $this->getShares($calendarId), + ])); $stmt = $this->db->prepare('DELETE FROM `*PREFIX*calendarobjects` WHERE `calendarid` = ?'); $stmt->execute([$calendarId]); @@ -892,7 +903,15 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription ]) ->execute(); - $this->activityBackend->addCalendarObject($calendarId, $objectUri); + $this->dispatcher->dispatch('\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject', new GenericEvent( + '\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject', + [ + 'calendarId' => $calendarId, + 'calendarData' => $this->getCalendarById($calendarId), + 'shares' => $this->getShares($calendarId), + 'objectData' => $this->getCalendarObject($calendarId, $objectUri), + ] + )); $this->addChange($calendarId, $objectUri, 1); return '"' . $extraData['etag'] . '"'; @@ -934,7 +953,18 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription ->andWhere($query->expr()->eq('uri', $query->createNamedParameter($objectUri))) ->execute(); - $this->activityBackend->updateCalendarObject($calendarId, $objectUri); + $data = $this->getCalendarObject($calendarId, $objectUri); + if (is_array($data)) { + $this->dispatcher->dispatch('\OCA\DAV\CalDAV\CalDavBackend::updateCalendarObject', new GenericEvent( + '\OCA\DAV\CalDAV\CalDavBackend::updateCalendarObject', + [ + 'calendarId' => $calendarId, + 'calendarData' => $this->getCalendarById($calendarId), + 'shares' => $this->getShares($calendarId), + 'objectData' => $data, + ] + )); + } $this->addChange($calendarId, $objectUri, 2); return '"' . $extraData['etag'] . '"'; @@ -967,7 +997,18 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription * @return void */ function deleteCalendarObject($calendarId, $objectUri) { - $this->activityBackend->deleteCalendarObject($calendarId, $objectUri); + $data = $this->getCalendarObject($calendarId, $objectUri); + if (is_array($data)) { + $this->dispatcher->dispatch('\OCA\DAV\CalDAV\CalDavBackend::deleteCalendarObject', new GenericEvent( + '\OCA\DAV\CalDAV\CalDavBackend::deleteCalendarObject', + [ + 'calendarId' => $calendarId, + 'calendarData' => $this->getCalendarById($calendarId), + 'shares' => $this->getShares($calendarId), + 'objectData' => $data, + ] + )); + } $stmt = $this->db->prepare('DELETE FROM `*PREFIX*calendarobjects` WHERE `calendarid` = ? AND `uri` = ?'); $stmt->execute([$calendarId, $objectUri]); @@ -1668,8 +1709,16 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription * @param array $remove */ public function updateShares($shareable, $add, $remove) { - /** @var Calendar $shareable */ - $this->activityBackend->updateCalendarShares($shareable, $add, $remove); + $calendarId = $shareable->getResourceId(); + $this->dispatcher->dispatch('\OCA\DAV\CalDAV\CalDavBackend::updateShares', new GenericEvent( + '\OCA\DAV\CalDAV\CalDavBackend::updateShares', + [ + 'calendarId' => $calendarId, + 'calendarData' => $this->getCalendarById($calendarId), + 'shares' => $this->getShares($calendarId), + 'add' => $add, + 'remove' => $remove, + ])); $this->sharingBackend->updateShares($shareable, $add, $remove); } diff --git a/apps/dav/lib/Command/CreateCalendar.php b/apps/dav/lib/Command/CreateCalendar.php index 6fea6082443..24990352fab 100644 --- a/apps/dav/lib/Command/CreateCalendar.php +++ b/apps/dav/lib/Command/CreateCalendar.php @@ -76,11 +76,10 @@ class CreateCalendar extends Command { $this->groupManager ); $random = \OC::$server->getSecureRandom(); - $activityManager = \OC::$server->getActivityManager(); - $userSession = \OC::$server->getUserSession(); + $dispatcher = \OC::$server->getEventDispatcher(); $name = $input->getArgument('name'); - $caldav = new CalDavBackend($this->dbConnection, $principalBackend, $this->userManager, $this->groupManager, $random, $activityManager, $userSession); + $caldav = new CalDavBackend($this->dbConnection, $principalBackend, $this->userManager, $random, $dispatcher); $caldav->createCalendar("principals/users/$user", $name, []); } } diff --git a/apps/dav/lib/RootCollection.php b/apps/dav/lib/RootCollection.php index 38b4ec795d2..478f0929c20 100644 --- a/apps/dav/lib/RootCollection.php +++ b/apps/dav/lib/RootCollection.php @@ -41,9 +41,6 @@ class RootCollection extends SimpleCollection { $config = \OC::$server->getConfig(); $random = \OC::$server->getSecureRandom(); $userManager = \OC::$server->getUserManager(); - $groupManager = \OC::$server->getGroupManager(); - $activityManager = \OC::$server->getActivityManager(); - $userSession = \OC::$server->getUserSession(); $db = \OC::$server->getDatabaseConnection(); $dispatcher = \OC::$server->getEventDispatcher(); $userPrincipalBackend = new Principal( @@ -65,7 +62,7 @@ class RootCollection extends SimpleCollection { $systemPrincipals->disableListing = $disableListing; $filesCollection = new Files\RootCollection($userPrincipalBackend, 'principals/users'); $filesCollection->disableListing = $disableListing; - $caldavBackend = new CalDavBackend($db, $userPrincipalBackend, $userManager, $groupManager, $random, $activityManager, $userSession); + $caldavBackend = new CalDavBackend($db, $userPrincipalBackend, $userManager, $random, $dispatcher); $calendarRoot = new CalendarRoot($userPrincipalBackend, $caldavBackend, 'principals/users'); $calendarRoot->disableListing = $disableListing; $publicCalendarRoot = new PublicCalendarRoot($caldavBackend); diff --git a/apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php b/apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php index a674c65c286..7d2e033e0b1 100644 --- a/apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php +++ b/apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php @@ -22,15 +22,12 @@ namespace OCA\DAV\Tests\unit\CalDAV; -use OCA\DAV\CalDAV\Activity\Backend as ActivityBackend; use OCA\DAV\CalDAV\CalDavBackend; use OCA\DAV\Connector\Sabre\Principal; -use OCP\Activity\IManager as IActivityManager; -use OCP\IGroupManager; use OCP\IUserManager; -use OCP\IUserSession; use OCP\Security\ISecureRandom; use Sabre\CalDAV\Xml\Property\SupportedCalendarComponentSet; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Test\TestCase; /** @@ -49,8 +46,6 @@ abstract class AbstractCalDavBackendTest extends TestCase { protected $principal; /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */ protected $userManager; - /** @var ActivityBackend|\PHPUnit_Framework_MockObject_MockObject */ - protected $activityBackend; /** @var ISecureRandom */ private $random; @@ -63,9 +58,7 @@ abstract class AbstractCalDavBackendTest extends TestCase { parent::setUp(); $this->userManager = $this->createMock(IUserManager::class); - $groupManager = $this->createMock(IGroupManager::class); - $activityManager = $this->createMock(IActivityManager::class); - $userSession = $this->createMock(IUserSession::class); + $dispatcher = $this->createMock(EventDispatcherInterface::class); $this->principal = $this->getMockBuilder('OCA\DAV\Connector\Sabre\Principal') ->disableOriginalConstructor() ->setMethods(['getPrincipalByPath', 'getGroupMembership']) @@ -80,10 +73,7 @@ abstract class AbstractCalDavBackendTest extends TestCase { $db = \OC::$server->getDatabaseConnection(); $this->random = \OC::$server->getSecureRandom(); - $this->backend = new CalDavBackend($db, $this->principal, $this->userManager, $groupManager, $this->random, $activityManager, $userSession); - - $this->activityBackend = $this->createMock(ActivityBackend::class); - $this->invokePrivate($this->backend, 'activityBackend', [$this->activityBackend]); + $this->backend = new CalDavBackend($db, $this->principal, $this->userManager, $this->random, $dispatcher); $this->cleanUpBackend(); } diff --git a/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php b/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php index c3a3d783e18..59fa4747a93 100644 --- a/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php +++ b/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php @@ -2,17 +2,14 @@ namespace OCA\DAV\Tests\unit\CalDAV; -use OCA\DAV\CalDAV\Activity\Backend as ActivityBackend; use OCA\DAV\CalDAV\Calendar; use OCA\DAV\Connector\Sabre\Principal; -use OCP\Activity\IManager as IActivityManager; -use OCP\IGroupManager; use OCP\IL10N; use OCA\DAV\CalDAV\CalDavBackend; use OCA\DAV\CalDAV\PublicCalendarRoot; use OCP\IUserManager; -use OCP\IUserSession; use OCP\Security\ISecureRandom; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Test\TestCase; /** @@ -35,14 +32,6 @@ class PublicCalendarRootTest extends TestCase { private $principal; /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */ protected $userManager; - /** @var IGroupManager|\PHPUnit_Framework_MockObject_MockObject */ - protected $groupManager; - /** @var IActivityManager|\PHPUnit_Framework_MockObject_MockObject */ - protected $activityManager; - /** @var IUserSession|\PHPUnit_Framework_MockObject_MockObject */ - protected $userSession; - /** @var ActivityBackend|\PHPUnit_Framework_MockObject_MockObject */ - protected $activityBackend; /** @var ISecureRandom */ private $random; @@ -53,24 +42,17 @@ class PublicCalendarRootTest extends TestCase { $db = \OC::$server->getDatabaseConnection(); $this->principal = $this->createMock('OCA\DAV\Connector\Sabre\Principal'); $this->userManager = $this->createMock(IUserManager::class); - $groupManager = $this->createMock(IGroupManager::class); - $activityManager = $this->createMock(IActivityManager::class); - $userSession = $this->createMock(IUserSession::class); $this->random = \OC::$server->getSecureRandom(); + $dispatcher = $this->createMock(EventDispatcherInterface::class); $this->backend = new CalDavBackend( $db, $this->principal, $this->userManager, - $groupManager, $this->random, - $activityManager, - $userSession + $dispatcher ); - $this->activityBackend = $this->createMock(ActivityBackend::class); - $this->invokePrivate($this->backend, 'activityBackend', [$this->activityBackend]); - $this->publicCalendarRoot = new PublicCalendarRoot($this->backend); $this->l10n = $this->getMockBuilder('\OCP\IL10N') @@ -95,14 +77,6 @@ class PublicCalendarRootTest extends TestCase { } public function testGetChild() { - $this->activityBackend->expects($this->exactly(1)) - ->method('addCalendar'); - $this->activityBackend->expects($this->never()) - ->method('updateCalendar'); - $this->activityBackend->expects($this->never()) - ->method('deleteCalendar'); - $this->activityBackend->expects($this->never()) - ->method('updateCalendarShares'); $calendar = $this->createPublicCalendar(); @@ -117,15 +91,6 @@ class PublicCalendarRootTest extends TestCase { } public function testGetChildren() { - $this->activityBackend->expects($this->exactly(1)) - ->method('addCalendar'); - $this->activityBackend->expects($this->never()) - ->method('updateCalendar'); - $this->activityBackend->expects($this->never()) - ->method('deleteCalendar'); - $this->activityBackend->expects($this->never()) - ->method('updateCalendarShares'); - $this->createPublicCalendar(); $publicCalendars = $this->backend->getPublicCalendars(); -- cgit v1.2.3 From e8f82c6b61ec293c354c417762d4279a877372a4 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 3 Nov 2016 12:28:12 +0100 Subject: Add tests for dispatching of the events Signed-off-by: Joas Schilling --- .../unit/CalDAV/AbstractCalDavBackendTest.php | 25 +++++++++--- apps/dav/tests/unit/CalDAV/CalDavBackendTest.php | 46 ++++++++++++++++++++++ 2 files changed, 66 insertions(+), 5 deletions(-) (limited to 'apps/dav/tests') diff --git a/apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php b/apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php index 7d2e033e0b1..d15be72c77b 100644 --- a/apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php +++ b/apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php @@ -46,6 +46,8 @@ abstract class AbstractCalDavBackendTest extends TestCase { protected $principal; /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */ protected $userManager; + /** @var EventDispatcherInterface|\PHPUnit_Framework_MockObject_MockObject */ + protected $dispatcher; /** @var ISecureRandom */ private $random; @@ -58,7 +60,7 @@ abstract class AbstractCalDavBackendTest extends TestCase { parent::setUp(); $this->userManager = $this->createMock(IUserManager::class); - $dispatcher = $this->createMock(EventDispatcherInterface::class); + $this->dispatcher = $this->createMock(EventDispatcherInterface::class); $this->principal = $this->getMockBuilder('OCA\DAV\Connector\Sabre\Principal') ->disableOriginalConstructor() ->setMethods(['getPrincipalByPath', 'getGroupMembership']) @@ -73,7 +75,7 @@ abstract class AbstractCalDavBackendTest extends TestCase { $db = \OC::$server->getDatabaseConnection(); $this->random = \OC::$server->getSecureRandom(); - $this->backend = new CalDavBackend($db, $this->principal, $this->userManager, $this->random, $dispatcher); + $this->backend = new CalDavBackend($db, $this->principal, $this->userManager, $this->random, $this->dispatcher); $this->cleanUpBackend(); } @@ -87,9 +89,13 @@ abstract class AbstractCalDavBackendTest extends TestCase { if (is_null($this->backend)) { return; } - $books = $this->backend->getCalendarsForUser(self::UNIT_TEST_USER); - foreach ($books as $book) { - $this->backend->deleteCalendar($book['id']); + $calendars = $this->backend->getCalendarsForUser(self::UNIT_TEST_USER); + foreach ($calendars as $calendar) { + $this->dispatcher->expects($this->at(0)) + ->method('dispatch') + ->with('\OCA\DAV\CalDAV\CalDavBackend::deleteCalendar'); + + $this->backend->deleteCalendar($calendar['id']); } $subscriptions = $this->backend->getSubscriptionsForUser(self::UNIT_TEST_USER); foreach ($subscriptions as $subscription) { @@ -98,6 +104,10 @@ abstract class AbstractCalDavBackendTest extends TestCase { } protected function createTestCalendar() { + $this->dispatcher->expects($this->at(0)) + ->method('dispatch') + ->with('\OCA\DAV\CalDAV\CalDavBackend::createCalendar'); + $this->backend->createCalendar(self::UNIT_TEST_USER, 'Example', [ '{http://apple.com/ns/ical/}calendar-color' => '#1C4587FF' ]); @@ -135,6 +145,11 @@ END:VEVENT END:VCALENDAR EOD; $uri0 = $this->getUniqueID('event'); + + $this->dispatcher->expects($this->at(0)) + ->method('dispatch') + ->with('\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject'); + $this->backend->createCalendarObject($calendarId, $uri0, $calData); return $uri0; diff --git a/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php b/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php index 4d60e983b13..b5e700e8bc4 100644 --- a/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php +++ b/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php @@ -51,6 +51,9 @@ class CalDavBackendTest extends AbstractCalDavBackendTest { '{DAV:}displayname' => 'Unit test', '{urn:ietf:params:xml:ns:caldav}calendar-description' => 'Calendar used for unit testing' ]); + $this->dispatcher->expects($this->at(0)) + ->method('dispatch') + ->with('\OCA\DAV\CalDAV\CalDavBackend::updateCalendar'); $this->backend->updateCalendar($calendarId, $patch); $patch->commit(); $this->assertEquals(1, $this->backend->getCalendarsForUserCount(self::UNIT_TEST_USER)); @@ -60,6 +63,9 @@ class CalDavBackendTest extends AbstractCalDavBackendTest { $this->assertEquals('Calendar used for unit testing', $books[0]['{urn:ietf:params:xml:ns:caldav}calendar-description']); // delete the address book + $this->dispatcher->expects($this->at(0)) + ->method('dispatch') + ->with('\OCA\DAV\CalDAV\CalDavBackend::deleteCalendar'); $this->backend->deleteCalendar($books[0]['id']); $books = $this->backend->getCalendarsForUser(self::UNIT_TEST_USER); $this->assertEquals(0, count($books)); @@ -106,6 +112,9 @@ class CalDavBackendTest extends AbstractCalDavBackendTest { $books = $this->backend->getCalendarsForUser(self::UNIT_TEST_USER); $this->assertEquals(1, count($books)); $calendar = new Calendar($this->backend, $books[0], $l10n); + $this->dispatcher->expects($this->at(0)) + ->method('dispatch') + ->with('\OCA\DAV\CalDAV\CalDavBackend::updateShares'); $this->backend->updateShares($calendar, $add, []); $books = $this->backend->getCalendarsForUser(self::UNIT_TEST_USER1); $this->assertEquals(1, count($books)); @@ -138,6 +147,9 @@ END:VEVENT END:VCALENDAR EOD; + $this->dispatcher->expects($this->at(0)) + ->method('dispatch') + ->with('\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject'); $this->backend->createCalendarObject($calendarId, $uri, $calData); /** @var IACL $child */ @@ -151,6 +163,9 @@ EOD; $this->assertAccess($groupCanWrite, self::UNIT_TEST_GROUP, '{DAV:}write', $acl); // delete the address book + $this->dispatcher->expects($this->at(0)) + ->method('dispatch') + ->with('\OCA\DAV\CalDAV\CalDavBackend::deleteCalendar'); $this->backend->deleteCalendar($books[0]['id']); $books = $this->backend->getCalendarsForUser(self::UNIT_TEST_USER); $this->assertEquals(0, count($books)); @@ -179,6 +194,9 @@ END:VEVENT END:VCALENDAR EOD; + $this->dispatcher->expects($this->at(0)) + ->method('dispatch') + ->with('\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject'); $this->backend->createCalendarObject($calendarId, $uri, $calData); // get all the cards @@ -214,11 +232,17 @@ DTEND;VALUE=DATE-TIME:20130912T140000Z END:VEVENT END:VCALENDAR EOD; + $this->dispatcher->expects($this->at(0)) + ->method('dispatch') + ->with('\OCA\DAV\CalDAV\CalDavBackend::updateCalendarObject'); $this->backend->updateCalendarObject($calendarId, $uri, $calData); $calendarObject = $this->backend->getCalendarObject($calendarId, $uri); $this->assertEquals($calData, $calendarObject['calendardata']); // delete the card + $this->dispatcher->expects($this->at(0)) + ->method('dispatch') + ->with('\OCA\DAV\CalDAV\CalDavBackend::deleteCalendarObject'); $this->backend->deleteCalendarObject($calendarId, $uri); $calendarObjects = $this->backend->getCalendarObjects($calendarId); $this->assertEquals(0, count($calendarObjects)); @@ -246,10 +270,19 @@ END:VEVENT END:VCALENDAR EOD; $uri0 = $this->getUniqueID('card'); + $this->dispatcher->expects($this->at(0)) + ->method('dispatch') + ->with('\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject'); $this->backend->createCalendarObject($calendarId, $uri0, $calData); $uri1 = $this->getUniqueID('card'); + $this->dispatcher->expects($this->at(0)) + ->method('dispatch') + ->with('\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject'); $this->backend->createCalendarObject($calendarId, $uri1, $calData); $uri2 = $this->getUniqueID('card'); + $this->dispatcher->expects($this->at(0)) + ->method('dispatch') + ->with('\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject'); $this->backend->createCalendarObject($calendarId, $uri2, $calData); // get all the cards @@ -270,8 +303,17 @@ EOD; } // delete the card + $this->dispatcher->expects($this->at(0)) + ->method('dispatch') + ->with('\OCA\DAV\CalDAV\CalDavBackend::deleteCalendarObject'); $this->backend->deleteCalendarObject($calendarId, $uri0); + $this->dispatcher->expects($this->at(0)) + ->method('dispatch') + ->with('\OCA\DAV\CalDAV\CalDavBackend::deleteCalendarObject'); $this->backend->deleteCalendarObject($calendarId, $uri1); + $this->dispatcher->expects($this->at(0)) + ->method('dispatch') + ->with('\OCA\DAV\CalDAV\CalDavBackend::deleteCalendarObject'); $this->backend->deleteCalendarObject($calendarId, $uri2); $calendarObjects = $this->backend->getCalendarObjects($calendarId); $this->assertEquals(0, count($calendarObjects)); @@ -335,6 +377,10 @@ EOD; } public function testPublications() { + $this->dispatcher->expects($this->at(0)) + ->method('dispatch') + ->with('\OCA\DAV\CalDAV\CalDavBackend::createCalendar'); + $this->backend->createCalendar(self::UNIT_TEST_USER, 'Example', []); $calendarInfo = $this->backend->getCalendarsForUser(self::UNIT_TEST_USER)[0]; -- cgit v1.2.3 From c4775a5bce4f2b804fa4bd15cdf77698d3831d7a Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 3 Nov 2016 12:57:40 +0100 Subject: Start unit tests for the activity listener Signed-off-by: Joas Schilling --- .../dav/tests/unit/CalDAV/Activity/BackendTest.php | 100 +++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 apps/dav/tests/unit/CalDAV/Activity/BackendTest.php (limited to 'apps/dav/tests') diff --git a/apps/dav/tests/unit/CalDAV/Activity/BackendTest.php b/apps/dav/tests/unit/CalDAV/Activity/BackendTest.php new file mode 100644 index 00000000000..60afeee8c02 --- /dev/null +++ b/apps/dav/tests/unit/CalDAV/Activity/BackendTest.php @@ -0,0 +1,100 @@ + + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see . + * + */ + +namespace OCA\DAV\Tests\unit\CalDAV\Activity; + +use OCA\DAV\CalDAV\Activity\Backend; +use OCA\DAV\CalDAV\Activity\Extension; +use OCP\Activity\IManager; +use OCP\IGroupManager; +use OCP\IUserSession; +use Test\TestCase; + +class BackendTest extends TestCase { + + /** @var IManager */ + protected $activityManager; + + /** @var IGroupManager */ + protected $groupManager; + + /** @var IUserSession */ + protected $userSession; + + protected function setUp() { + parent::setUp(); + $this->activityManager = $this->createMock(IManager::class); + $this->groupManager = $this->createMock(IGroupManager::class); + $this->userSession = $this->createMock(IUserSession::class); + } + + /** + * @param array $methods + * @return Backend|\PHPUnit_Framework_MockObject_MockObject + */ + protected function getBackend(array $methods = []) { + if (empty($methods)) { + return new Backend( + $this->activityManager, + $this->groupManager, + $this->userSession + ); + } else { + return $this->getMockBuilder(Backend::class) + ->setConstructorArgs([ + $this->activityManager, + $this->groupManager, + $this->userSession, + ]) + ->setMethods($methods) + ->getMock(); + } + } + + public function dataCallTriggerCalendarActivity() { + return [ + ['onCalendarAdd', [['data']], Extension::SUBJECT_ADD, [['data'], [], []]], + ['onCalendarUpdate', [['data'], ['shares'], ['properties']], Extension::SUBJECT_UPDATE, [['data'], ['shares'], ['properties']]], + ['onCalendarDelete', [['data'], ['shares']], Extension::SUBJECT_DELETE, [['data'], ['shares'], []]], + ]; + } + + /** + * @dataProvider dataCallTriggerCalendarActivity + * + * @param string $method + * @param array $payload + * @param string $expectedSubject + * @param array $expectedPayload + */ + public function testCallTriggerCalendarActivity($method, array $payload, $expectedSubject, array $expectedPayload) { + $backend = $this->getBackend(['triggerCalendarActivity']); + $backend->expects($this->once()) + ->method('triggerCalendarActivity') + ->willReturnCallback(function() use($expectedPayload, $expectedSubject) { + $arguments = func_get_args(); + $this->assertSame($expectedSubject, array_shift($arguments)); + $this->assertEquals($expectedPayload, $arguments); + }); + + call_user_func_array([$backend, $method], $payload); + } +} -- cgit v1.2.3 From 36b656e2076484a979d0d00dc1df942960098898 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 3 Nov 2016 14:30:02 +0100 Subject: Add tests for triggerCalendarActivity Signed-off-by: Joas Schilling --- .../dav/tests/unit/CalDAV/Activity/BackendTest.php | 143 ++++++++++++++++++++- 1 file changed, 139 insertions(+), 4 deletions(-) (limited to 'apps/dav/tests') diff --git a/apps/dav/tests/unit/CalDAV/Activity/BackendTest.php b/apps/dav/tests/unit/CalDAV/Activity/BackendTest.php index 60afeee8c02..74a2bac584d 100644 --- a/apps/dav/tests/unit/CalDAV/Activity/BackendTest.php +++ b/apps/dav/tests/unit/CalDAV/Activity/BackendTest.php @@ -23,20 +23,22 @@ namespace OCA\DAV\Tests\unit\CalDAV\Activity; use OCA\DAV\CalDAV\Activity\Backend; use OCA\DAV\CalDAV\Activity\Extension; +use OCP\Activity\IEvent; use OCP\Activity\IManager; use OCP\IGroupManager; +use OCP\IUser; use OCP\IUserSession; use Test\TestCase; class BackendTest extends TestCase { - /** @var IManager */ + /** @var IManager|\PHPUnit_Framework_MockObject_MockObject */ protected $activityManager; - /** @var IGroupManager */ + /** @var IGroupManager|\PHPUnit_Framework_MockObject_MockObject */ protected $groupManager; - /** @var IUserSession */ + /** @var IUserSession|\PHPUnit_Framework_MockObject_MockObject */ protected $userSession; protected function setUp() { @@ -72,7 +74,7 @@ class BackendTest extends TestCase { public function dataCallTriggerCalendarActivity() { return [ ['onCalendarAdd', [['data']], Extension::SUBJECT_ADD, [['data'], [], []]], - ['onCalendarUpdate', [['data'], ['shares'], ['properties']], Extension::SUBJECT_UPDATE, [['data'], ['shares'], ['properties']]], + ['onCalendarUpdate', [['data'], ['shares'], ['changed-properties']], Extension::SUBJECT_UPDATE, [['data'], ['shares'], ['changed-properties']]], ['onCalendarDelete', [['data'], ['shares']], Extension::SUBJECT_DELETE, [['data'], ['shares'], []]], ]; } @@ -97,4 +99,137 @@ class BackendTest extends TestCase { call_user_func_array([$backend, $method], $payload); } + + public function dataTriggerCalendarActivity() { + return [ + // Add calendar + [Extension::SUBJECT_ADD, [], [], [], '', '', null, []], + [Extension::SUBJECT_ADD, [ + 'principaluri' => 'principal/user/admin', + 'id' => 42, + '{DAV:}displayname' => 'Name of calendar', + ], [], [], '', 'admin', null, ['admin']], + [Extension::SUBJECT_ADD, [ + 'principaluri' => 'principal/user/admin', + 'id' => 42, + '{DAV:}displayname' => 'Name of calendar', + ], [], [], 'test2', 'test2', null, ['admin']], + + // Update calendar + [Extension::SUBJECT_UPDATE, [], [], [], '', '', null, []], + // No visible change - owner only + [Extension::SUBJECT_UPDATE, [ + 'principaluri' => 'principal/user/admin', + 'id' => 42, + '{DAV:}displayname' => 'Name of calendar', + ], ['shares'], [], '', 'admin', null, ['admin']], + // Visible change + [Extension::SUBJECT_UPDATE, [ + 'principaluri' => 'principal/user/admin', + 'id' => 42, + '{DAV:}displayname' => 'Name of calendar', + ], ['shares'], ['{DAV:}displayname' => 'Name'], '', 'admin', ['user1'], ['user1', 'admin']], + [Extension::SUBJECT_UPDATE, [ + 'principaluri' => 'principal/user/admin', + 'id' => 42, + '{DAV:}displayname' => 'Name of calendar', + ], ['shares'], ['{DAV:}displayname' => 'Name'], 'test2', 'test2', ['user1'], ['user1', 'admin']], + + // Delete calendar + [Extension::SUBJECT_DELETE, [], [], [], '', '', null, []], + [Extension::SUBJECT_DELETE, [ + 'principaluri' => 'principal/user/admin', + 'id' => 42, + '{DAV:}displayname' => 'Name of calendar', + ], ['shares'], [], '', 'admin', [], ['admin']], + [Extension::SUBJECT_DELETE, [ + 'principaluri' => 'principal/user/admin', + 'id' => 42, + '{DAV:}displayname' => 'Name of calendar', + ], ['shares'], [], '', 'admin', ['user1'], ['user1', 'admin']], + [Extension::SUBJECT_DELETE, [ + 'principaluri' => 'principal/user/admin', + 'id' => 42, + '{DAV:}displayname' => 'Name of calendar', + ], ['shares'], [], 'test2', 'test2', ['user1'], ['user1', 'admin']], + ]; + } + + /** + * @dataProvider dataTriggerCalendarActivity + * @param string $action + * @param array $data + * @param array $shares + * @param array $changedProperties + * @param string $currentUser + * @param string $author + * @param string[]|null $shareUsers + * @param string[] $users + */ + public function testTriggerCalendarActivity($action, array $data, array $shares, array $changedProperties, $currentUser, $author, $shareUsers, array $users) { + $backend = $this->getBackend(['getUsersForShares']); + + if ($shareUsers === null) { + $backend->expects($this->never()) + ->method('getUsersForShares'); + } else { + $backend->expects($this->once()) + ->method('getUsersForShares') + ->with($shares) + ->willReturn($shareUsers); + } + + if ($author !== '') { + if ($currentUser !== '') { + $user = $this->createMock(IUser::class); + $this->userSession->expects($this->once()) + ->method('getUser') + ->willReturn($user); + $user->expects($this->once()) + ->method('getUID') + ->willReturn($currentUser); + } else { + $this->userSession->expects($this->once()) + ->method('getUser') + ->willReturn(null); + } + + $event = $this->createMock(IEvent::class); + $this->activityManager->expects($this->once()) + ->method('generateEvent') + ->willReturn($event); + + $event->expects($this->once()) + ->method('setApp') + ->with('dav') + ->willReturnSelf(); + $event->expects($this->once()) + ->method('setObject') + ->with(Extension::CALENDAR, $data['id']) + ->willReturnSelf(); + $event->expects($this->once()) + ->method('setType') + ->with(Extension::CALENDAR) + ->willReturnSelf(); + $event->expects($this->once()) + ->method('setAuthor') + ->with($author) + ->willReturnSelf(); + + $event->expects($this->exactly(sizeof($users))) + ->method('setAffectedUser') + ->willReturnSelf(); + $event->expects($this->exactly(sizeof($users))) + ->method('setSubject') + ->willReturnSelf(); + $this->activityManager->expects($this->exactly(sizeof($users))) + ->method('publish') + ->with($event); + } else { + $this->activityManager->expects($this->never()) + ->method('generateEvent'); + } + + $this->invokePrivate($backend, 'triggerCalendarActivity', [$action, $data, $shares, $changedProperties]); + } } -- cgit v1.2.3 From 7a0e003adee4e42e1801e35485b731a543f820e6 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 3 Nov 2016 15:24:18 +0100 Subject: Add more tests Signed-off-by: Joas Schilling --- .../dav/tests/unit/CalDAV/Activity/BackendTest.php | 107 ++++++++++++++++++++- 1 file changed, 102 insertions(+), 5 deletions(-) (limited to 'apps/dav/tests') diff --git a/apps/dav/tests/unit/CalDAV/Activity/BackendTest.php b/apps/dav/tests/unit/CalDAV/Activity/BackendTest.php index 74a2bac584d..3585d69bad3 100644 --- a/apps/dav/tests/unit/CalDAV/Activity/BackendTest.php +++ b/apps/dav/tests/unit/CalDAV/Activity/BackendTest.php @@ -25,6 +25,7 @@ use OCA\DAV\CalDAV\Activity\Backend; use OCA\DAV\CalDAV\Activity\Extension; use OCP\Activity\IEvent; use OCP\Activity\IManager; +use OCP\IGroup; use OCP\IGroupManager; use OCP\IUser; use OCP\IUserSession; @@ -181,13 +182,9 @@ class BackendTest extends TestCase { if ($author !== '') { if ($currentUser !== '') { - $user = $this->createMock(IUser::class); $this->userSession->expects($this->once()) ->method('getUser') - ->willReturn($user); - $user->expects($this->once()) - ->method('getUID') - ->willReturn($currentUser); + ->willReturn($this->getUserMock($currentUser)); } else { $this->userSession->expects($this->once()) ->method('getUser') @@ -232,4 +229,104 @@ class BackendTest extends TestCase { $this->invokePrivate($backend, 'triggerCalendarActivity', [$action, $data, $shares, $changedProperties]); } + + public function dataGetUsersForShares() { + return [ + [ + [], + [], + [], + ], + [ + [ + ['{http://owncloud.org/ns}principal' => 'principal/users/user1'], + ['{http://owncloud.org/ns}principal' => 'principal/users/user2'], + ['{http://owncloud.org/ns}principal' => 'principal/users/user2'], + ['{http://owncloud.org/ns}principal' => 'principal/users/user2'], + ['{http://owncloud.org/ns}principal' => 'principal/users/user3'], + ], + [], + ['user1', 'user2', 'user3'], + ], + [ + [ + ['{http://owncloud.org/ns}principal' => 'principal/users/user1'], + ['{http://owncloud.org/ns}principal' => 'principal/users/user2'], + ['{http://owncloud.org/ns}principal' => 'principal/users/user2'], + ['{http://owncloud.org/ns}principal' => 'principal/groups/group2'], + ['{http://owncloud.org/ns}principal' => 'principal/groups/group3'], + ], + ['group2' => null, 'group3' => null], + ['user1', 'user2'], + ], + [ + [ + ['{http://owncloud.org/ns}principal' => 'principal/users/user1'], + ['{http://owncloud.org/ns}principal' => 'principal/users/user2'], + ['{http://owncloud.org/ns}principal' => 'principal/users/user2'], + ['{http://owncloud.org/ns}principal' => 'principal/groups/group2'], + ['{http://owncloud.org/ns}principal' => 'principal/groups/group3'], + ], + ['group2' => ['user1', 'user2', 'user3'], 'group3' => ['user2', 'user3', 'user4']], + ['user1', 'user2', 'user3', 'user4'], + ], + ]; + } + + /** + * @dataProvider dataGetUsersForShares + * @param array $shares + * @param array $groups + * @param array $expected + */ + public function testGetUsersForShares(array $shares, array $groups, array $expected) { + $backend = $this->getBackend(); + + $getGroups = []; + foreach ($groups as $gid => $members) { + if ($members === null) { + $getGroups[] = [$gid, null]; + continue; + } + + $group = $this->createMock(IGroup::class); + $group->expects($this->once()) + ->method('getUsers') + ->willReturn($this->getUsers($members)); + + $getGroups[] = [$gid, $group]; + } + + $this->groupManager->expects($this->exactly(sizeof($getGroups))) + ->method('get') + ->willReturnMap($getGroups); + + $users = $this->invokePrivate($backend, 'getUsersForShares', [$shares]); + sort($users); + $this->assertEquals($expected, $users); + } + + /** + * @param string[] $users + * @return IUser[]|\PHPUnit_Framework_MockObject_MockObject[] + */ + protected function getUsers(array $users) { + $list = []; + foreach ($users as $user) { + $list[] = $this->getUserMock($user); + } + return $list; + } + + /** + * @param string $uid + * @return IUser|\PHPUnit_Framework_MockObject_MockObject + */ + protected function getUserMock($uid) { + $user = $this->createMock(IUser::class); + $user->expects($this->once()) + ->method('getUID') + ->willReturn($uid); + return $user; + } } -- cgit v1.2.3