Signed-off-by: Georg Ehrke <developer@georgehrke.com>pull/6840/head
parent
556b2a2b6f
commit
fa416e031b
@ -0,0 +1,119 @@ |
||||
<?php |
||||
/** |
||||
* @copyright 2017, Georg Ehrke <oc.list@georgehrke.com> |
||||
* |
||||
* @author Georg Ehrke <oc.list@georgehrke.com> |
||||
* |
||||
* @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 <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
namespace OCA\DAV\CalDAV; |
||||
|
||||
use OCP\Constants; |
||||
use OCP\Calendar\ICalendar; |
||||
|
||||
class CalendarImpl implements ICalendar { |
||||
|
||||
/** @var CalDavBackend */ |
||||
private $backend; |
||||
|
||||
/** @var Calendar */ |
||||
private $calendar; |
||||
|
||||
/** @var array */ |
||||
private $calendarInfo; |
||||
|
||||
/** |
||||
* CalendarImpl constructor. |
||||
* |
||||
* @param Calendar $calendar |
||||
* @param array $calendarInfo |
||||
* @param CalDavBackend $backend |
||||
*/ |
||||
public function __construct(Calendar $calendar, array $calendarInfo, |
||||
CalDavBackend $backend) { |
||||
$this->calendar = $calendar; |
||||
$this->calendarInfo = $calendarInfo; |
||||
$this->backend = $backend; |
||||
} |
||||
|
||||
/** |
||||
* @return string defining the technical unique key |
||||
* @since 13.0.0 |
||||
*/ |
||||
public function getKey() { |
||||
return $this->calendarInfo['id']; |
||||
} |
||||
|
||||
/** |
||||
* In comparison to getKey() this function returns a human readable (maybe translated) name |
||||
* @return null|string |
||||
* @since 13.0.0 |
||||
*/ |
||||
public function getDisplayName() { |
||||
return $this->calendarInfo['{DAV:}displayname']; |
||||
} |
||||
|
||||
/** |
||||
* Calendar color |
||||
* @return null|string |
||||
* @since 13.0.0 |
||||
*/ |
||||
public function getDisplayColor() { |
||||
return $this->calendarInfo['{http://apple.com/ns/ical/}calendar-color']; |
||||
} |
||||
|
||||
/** |
||||
* @param string $pattern which should match within the $searchProperties |
||||
* @param array $searchProperties defines the properties within the query pattern should match |
||||
* @param array $options - optional parameters: |
||||
* ['timerange' => ['start' => new DateTime(...), 'end' => new DateTime(...)]] |
||||
* @param integer|null $limit - limit number of search results |
||||
* @param integer|null $offset - offset for paging of search results |
||||
* @return array an array of events/journals/todos which are arrays of key-value-pairs |
||||
* @since 13.0.0 |
||||
*/ |
||||
public function search($pattern, array $searchProperties=[], array $options=[], $limit=null, $offset=null) { |
||||
return $this->backend->search($this->calendarInfo, $pattern, |
||||
$searchProperties, $options, $limit, $offset); |
||||
} |
||||
|
||||
/** |
||||
* @return integer build up using \OCP\Constants |
||||
* @since 13.0.0 |
||||
*/ |
||||
public function getPermissions() { |
||||
$permissions = $this->calendar->getACL(); |
||||
$result = 0; |
||||
foreach ($permissions as $permission) { |
||||
switch($permission['privilege']) { |
||||
case '{DAV:}read': |
||||
$result |= Constants::PERMISSION_READ; |
||||
break; |
||||
case '{DAV:}write': |
||||
$result |= Constants::PERMISSION_CREATE; |
||||
$result |= Constants::PERMISSION_UPDATE; |
||||
break; |
||||
case '{DAV:}all': |
||||
$result |= Constants::PERMISSION_ALL; |
||||
break; |
||||
} |
||||
} |
||||
|
||||
return $result; |
||||
} |
||||
} |
||||
@ -0,0 +1,71 @@ |
||||
<?php |
||||
/** |
||||
* @copyright 2017, Georg Ehrke <oc.list@georgehrke.com> |
||||
* |
||||
* @author Georg Ehrke <oc.list@georgehrke.com> |
||||
* |
||||
* @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 <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
namespace OCA\DAV\CalDAV; |
||||
|
||||
use OCP\Calendar\IManager; |
||||
use OCP\IL10N; |
||||
|
||||
class CalendarManager { |
||||
|
||||
/** @var CalDavBackend */ |
||||
private $backend; |
||||
|
||||
/** @var IL10N */ |
||||
private $l10n; |
||||
|
||||
/** |
||||
* CalendarManager constructor. |
||||
* |
||||
* @param CalDavBackend $backend |
||||
* @param IL10N $l10n |
||||
*/ |
||||
public function __construct(CalDavBackend $backend, IL10N $l10n) { |
||||
$this->backend = $backend; |
||||
$this->l10n = $l10n; |
||||
} |
||||
|
||||
/** |
||||
* @param IManager $cm |
||||
* @param string $userId |
||||
*/ |
||||
public function setupCalendarProvider(IManager $cm, $userId) { |
||||
$calendars = $this->backend->getCalendarsForUser("principals/users/$userId"); |
||||
$this->register($cm, $calendars); |
||||
} |
||||
|
||||
/** |
||||
* @param IManager $cm |
||||
* @param array $calendars |
||||
*/ |
||||
private function register(IManager $cm, array $calendars) { |
||||
foreach($calendars as $calendarInfo) { |
||||
$calendar = new Calendar($this->backend, $calendarInfo, $this->l10n); |
||||
$cm->registerCalendar(new CalendarImpl( |
||||
$calendar, |
||||
$calendarInfo, |
||||
$this->backend |
||||
)); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,126 @@ |
||||
<?php |
||||
/** |
||||
* @copyright 2017, Georg Ehrke <oc.list@georgehrke.com> |
||||
* |
||||
* @author Georg Ehrke <oc.list@georgehrke.com> |
||||
* |
||||
* @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 <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
namespace OCA\DAV\Tests\unit\CalDAV; |
||||
|
||||
use OCA\DAV\CalDAV\CalDavBackend; |
||||
use OCA\DAV\CalDAV\Calendar; |
||||
use OCA\DAV\CalDAV\CalendarImpl; |
||||
|
||||
class CalendarImplTest extends \Test\TestCase { |
||||
|
||||
/** @var CalendarImpl */ |
||||
private $calendarImpl; |
||||
|
||||
/** @var Calendar | \PHPUnit_Framework_MockObject_MockObject */ |
||||
private $calendar; |
||||
|
||||
/** @var array */ |
||||
private $calendarInfo; |
||||
|
||||
/** @var CalDavBackend | \PHPUnit_Framework_MockObject_MockObject */ |
||||
private $backend; |
||||
|
||||
protected function setUp() { |
||||
parent::setUp(); |
||||
|
||||
$this->calendar = $this->createMock(Calendar::class); |
||||
$this->calendarInfo = [ |
||||
'id' => 'fancy_id_123', |
||||
'{DAV:}displayname' => 'user readable name 123', |
||||
'{http://apple.com/ns/ical/}calendar-color' => '#AABBCC', |
||||
]; |
||||
$this->backend = $this->createMock(CalDavBackend::class); |
||||
|
||||
$this->calendarImpl = new CalendarImpl($this->calendar, |
||||
$this->calendarInfo, $this->backend); |
||||
} |
||||
|
||||
|
||||
public function testGetKey() { |
||||
$this->assertEquals($this->calendarImpl->getKey(), 'fancy_id_123'); |
||||
} |
||||
|
||||
public function testGetDisplayname() { |
||||
$this->assertEquals($this->calendarImpl->getDisplayName(),'user readable name 123'); |
||||
} |
||||
|
||||
public function testGetDisplayColor() { |
||||
$this->assertEquals($this->calendarImpl->getDisplayColor(), '#AABBCC'); |
||||
} |
||||
|
||||
public function testSearch() { |
||||
$this->backend->expects($this->once()) |
||||
->method('search') |
||||
->with($this->calendarInfo, 'abc', ['def'], ['ghi'], 42, 1337) |
||||
->will($this->returnValue(['SEARCHRESULTS'])); |
||||
|
||||
$result = $this->calendarImpl->search('abc', ['def'], ['ghi'], 42, 1337); |
||||
$this->assertEquals($result, ['SEARCHRESULTS']); |
||||
} |
||||
|
||||
public function testGetPermissionRead() { |
||||
$this->calendar->expects($this->once()) |
||||
->method('getACL') |
||||
->with() |
||||
->will($this->returnValue([ |
||||
['privilege' => '{DAV:}read'] |
||||
])); |
||||
|
||||
$this->assertEquals(1, $this->calendarImpl->getPermissions()); |
||||
} |
||||
|
||||
public function testGetPermissionWrite() { |
||||
$this->calendar->expects($this->once()) |
||||
->method('getACL') |
||||
->with() |
||||
->will($this->returnValue([ |
||||
['privilege' => '{DAV:}write'] |
||||
])); |
||||
|
||||
$this->assertEquals(6, $this->calendarImpl->getPermissions()); |
||||
} |
||||
|
||||
public function testGetPermissionReadWrite() { |
||||
$this->calendar->expects($this->once()) |
||||
->method('getACL') |
||||
->with() |
||||
->will($this->returnValue([ |
||||
['privilege' => '{DAV:}read'], |
||||
['privilege' => '{DAV:}write'] |
||||
])); |
||||
|
||||
$this->assertEquals(7, $this->calendarImpl->getPermissions()); |
||||
} |
||||
|
||||
public function testGetPermissionAll() { |
||||
$this->calendar->expects($this->once()) |
||||
->method('getACL') |
||||
->with() |
||||
->will($this->returnValue([ |
||||
['privilege' => '{DAV:}all'] |
||||
])); |
||||
|
||||
$this->assertEquals(31, $this->calendarImpl->getPermissions()); |
||||
} |
||||
} |
||||
@ -0,0 +1,81 @@ |
||||
<?php |
||||
/** |
||||
* @copyright 2017, Georg Ehrke <oc.list@georgehrke.com> |
||||
* |
||||
* @author Georg Ehrke <oc.list@georgehrke.com> |
||||
* |
||||
* @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 <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
namespace OCA\DAV\Tests\unit\CalDAV; |
||||
|
||||
use OC\Calendar\Manager; |
||||
use OCA\DAV\CalDAV\CalDavBackend; |
||||
use OCA\DAV\CalDAV\CalendarImpl; |
||||
use OCA\DAV\CalDAV\CalendarManager; |
||||
use OCP\Calendar\IManager; |
||||
use OCP\IL10N; |
||||
|
||||
class CalendarManagerTest extends \Test\TestCase { |
||||
|
||||
/** @var CalDavBackend | \PHPUnit_Framework_MockObject_MockObject */ |
||||
private $backend; |
||||
|
||||
/** @var IL10N | \PHPUnit_Framework_MockObject_MockObject */ |
||||
private $l10n; |
||||
|
||||
/** @var CalendarManager */ |
||||
private $manager; |
||||
|
||||
protected function setUp() { |
||||
parent::setUp(); |
||||
$this->backend = $this->createMock(CalDavBackend::class); |
||||
$this->l10n = $this->createMock(IL10N::class); |
||||
$this->manager = new CalendarManager($this->backend, |
||||
$this->l10n); |
||||
} |
||||
|
||||
public function testSetupCalendarProvider() { |
||||
$this->backend->expects($this->once()) |
||||
->method('getCalendarsForUser') |
||||
->with('principals/users/user123') |
||||
->will($this->returnValue([ |
||||
['id' => 123, 'uri' => 'blablub1'], |
||||
['id' => 456, 'uri' => 'blablub2'], |
||||
])); |
||||
|
||||
/** @var IManager | \PHPUnit_Framework_MockObject_MockObject $calendarManager */ |
||||
$calendarManager = $this->createMock(Manager::class); |
||||
$calendarManager->expects($this->at(0)) |
||||
->method('registerCalendar') |
||||
->will($this->returnCallback(function() { |
||||
$parameter = func_get_arg(0); |
||||
$this->assertInstanceOf(CalendarImpl::class, $parameter); |
||||
$this->assertEquals(123, $parameter->getKey()); |
||||
})); |
||||
|
||||
$calendarManager->expects($this->at(1)) |
||||
->method('registerCalendar') |
||||
->will($this->returnCallback(function() { |
||||
$parameter = func_get_arg(0); |
||||
$this->assertInstanceOf(CalendarImpl::class, $parameter); |
||||
$this->assertEquals(456, $parameter->getKey()); |
||||
})); |
||||
|
||||
$this->manager->setupCalendarProvider($calendarManager, 'user123'); |
||||
} |
||||
} |
||||
Loading…
Reference in new issue