summaryrefslogtreecommitdiffstats
path: root/apps/dav/tests
diff options
context:
space:
mode:
authorLukas Reschke <lukas@statuscode.ch>2016-09-27 18:51:40 +0200
committerGitHub <noreply@github.com>2016-09-27 18:51:40 +0200
commit06e969cb74aacc3d6490d3207a625cc712941968 (patch)
tree5b5a47b35ae419bdacf37768da99fa37c1ab9f87 /apps/dav/tests
parent6ca8ce62288aa5b181f97c45ad62c35976dbb65f (diff)
parentdcc23114e9328d822539782644bedcf5cba7e72d (diff)
downloadnextcloud-server-06e969cb74aacc3d6490d3207a625cc712941968.tar.gz
nextcloud-server-06e969cb74aacc3d6490d3207a625cc712941968.zip
Merge pull request #1197 from nextcloud/oc-public-sharing
CalDAV calendar public sharing
Diffstat (limited to 'apps/dav/tests')
-rw-r--r--apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php13
-rw-r--r--apps/dav/tests/unit/CalDAV/CalDavBackendTest.php29
-rw-r--r--apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php122
-rw-r--r--apps/dav/tests/unit/CalDAV/Publishing/PublisherTest.php56
-rw-r--r--apps/dav/tests/unit/CalDAV/Publishing/PublishingTest.php82
-rw-r--r--apps/dav/tests/unit/DAV/SystemPrincipalBackendTest.php7
6 files changed, 306 insertions, 3 deletions
diff --git a/apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php b/apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php
index 0e2e1b0ee51..2559ecbbf89 100644
--- a/apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php
+++ b/apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php
@@ -28,6 +28,8 @@ use OCA\DAV\CalDAV\CalDavBackend;
use OCA\DAV\CalDAV\Calendar;
use OCA\DAV\Connector\Sabre\Principal;
use OCP\IL10N;
+use OCP\IConfig;
+use OCP\Security\ISecureRandom;
use Sabre\CalDAV\Xml\Property\SupportedCalendarComponentSet;
use Sabre\DAV\PropPatch;
use Sabre\DAV\Xml\Property\Href;
@@ -51,6 +53,12 @@ abstract class AbstractCalDavBackendTest extends TestCase {
/** @var \OCP\IUserManager|\PHPUnit_Framework_MockObject_MockObject */
protected $userManager;
+
+ /** var OCP\IConfig */
+ protected $config;
+
+ /** @var ISecureRandom */
+ private $random;
const UNIT_TEST_USER = 'principals/users/caldav-unit-test';
const UNIT_TEST_USER1 = 'principals/users/caldav-unit-test1';
@@ -75,8 +83,9 @@ abstract class AbstractCalDavBackendTest extends TestCase {
->willReturn([self::UNIT_TEST_GROUP]);
$db = \OC::$server->getDatabaseConnection();
- $this->backend = new CalDavBackend($db, $this->principal, $this->userManager);
-
+ $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();
}
diff --git a/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php b/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php
index 1a5673161de..8349d98cd94 100644
--- a/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php
+++ b/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php
@@ -334,6 +334,35 @@ EOD;
$this->assertEquals($event, $changes['added'][0]);
}
+ public function testPublications() {
+ $this->backend->createCalendar(self::UNIT_TEST_USER, 'Example', []);
+
+ $calendarInfo = $this->backend->getCalendarsForUser(self::UNIT_TEST_USER)[0];
+
+ $l10n = $this->getMockBuilder('\OCP\IL10N')
+ ->disableOriginalConstructor()->getMock();
+
+ $calendar = new Calendar($this->backend, $calendarInfo, $l10n);
+ $calendar->setPublishStatus(true);
+ $this->assertNotEquals(false, $calendar->getPublishStatus());
+
+ $publicCalendars = $this->backend->getPublicCalendars();
+ $this->assertEquals(1, count($publicCalendars));
+ $this->assertEquals(true, $publicCalendars[0]['{http://owncloud.org/ns}public']);
+
+ $publicCalendarURI = $publicCalendars[0]['uri'];
+ $publicCalendar = $this->backend->getPublicCalendar($publicCalendarURI);
+ $this->assertEquals(true, $publicCalendar['{http://owncloud.org/ns}public']);
+
+ $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);
+
+ }
+
public function testSubscriptions() {
$id = $this->backend->createSubscription(self::UNIT_TEST_USER, 'Subscription', [
'{http://calendarserver.org/ns/}source' => new Href('test-source'),
diff --git a/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php b/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php
new file mode 100644
index 00000000000..6dfec6d7e1f
--- /dev/null
+++ b/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php
@@ -0,0 +1,122 @@
+<?php
+
+namespace OCA\DAV\Tests\unit\CalDAV;
+
+use OCA\DAV\CalDAV\Calendar;
+use OCA\DAV\Connector\Sabre\Principal;
+use OCP\IL10N;
+use OCA\DAV\CalDAV\CalDavBackend;
+use OCA\DAV\CalDAV\PublicCalendarRoot;
+use OCP\IUserManager;
+use OCP\Security\ISecureRandom;
+use Test\TestCase;
+
+/**
+ * Class PublicCalendarRootTest
+ *
+ * @group DB
+ *
+ * @package OCA\DAV\Tests\unit\CalDAV
+ */
+class PublicCalendarRootTest extends TestCase {
+
+ const UNIT_TEST_USER = 'principals/users/caldav-unit-test';
+ /** @var CalDavBackend */
+ private $backend;
+ /** @var PublicCalendarRoot */
+ private $publicCalendarRoot;
+ /** @var IL10N */
+ private $l10n;
+ /** @var IUserManager */
+ private $userManager;
+ /** @var Principal */
+ private $principal;
+ /** var IConfig */
+ protected $config;
+ /** @var ISecureRandom */
+ private $random;
+
+ public function setUp() {
+ 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->random = \OC::$server->getSecureRandom();
+
+ $this->backend = new CalDavBackend(
+ $db,
+ $this->principal,
+ $this->userManager,
+ $this->config,
+ $this->random
+ );
+
+ $this->publicCalendarRoot = new PublicCalendarRoot($this->backend);
+
+ $this->l10n = $this->getMockBuilder('\OCP\IL10N')
+ ->disableOriginalConstructor()->getMock();
+ }
+
+ public function tearDown() {
+ parent::tearDown();
+
+ if (is_null($this->backend)) {
+ return;
+ }
+ $books = $this->backend->getCalendarsForUser(self::UNIT_TEST_USER);
+ foreach ($books as $book) {
+ $this->backend->deleteCalendar($book['id']);
+ }
+ }
+
+ public function testGetName() {
+ $name = $this->publicCalendarRoot->getName();
+ $this->assertEquals('public-calendars', $name);
+ }
+
+ public function testGetChild() {
+
+ $calendar = $this->createPublicCalendar();
+
+ $publicCalendars = $this->backend->getPublicCalendars();
+ $this->assertEquals(1, count($publicCalendars));
+ $this->assertEquals(true, $publicCalendars[0]['{http://owncloud.org/ns}public']);
+
+ $publicCalendarURI = $publicCalendars[0]['uri'];
+
+ $calendarResult = $this->publicCalendarRoot->getChild($publicCalendarURI);
+ $this->assertEquals($calendar, $calendarResult);
+ }
+
+ public function testGetChildren() {
+ $this->createPublicCalendar();
+
+ $publicCalendars = $this->backend->getPublicCalendars();
+
+ $calendarResults = $this->publicCalendarRoot->getChildren();
+
+ $this->assertEquals(1, count($calendarResults));
+ $this->assertEquals(new Calendar($this->backend, $publicCalendars[0], $this->l10n), $calendarResults[0]);
+ }
+
+ /**
+ * @return Calendar
+ */
+ protected function createPublicCalendar() {
+ $this->backend->createCalendar(self::UNIT_TEST_USER, 'Example', []);
+
+ $calendarInfo = $this->backend->getCalendarsForUser(self::UNIT_TEST_USER)[0];
+ $calendar = new Calendar($this->backend, $calendarInfo, $this->l10n);
+ $publicUri = $calendar->setPublishStatus(true);
+
+ $calendarInfo = $this->backend->getPublicCalendar($publicUri);
+ $calendar = new Calendar($this->backend, $calendarInfo, $this->l10n);
+
+ return $calendar;
+ }
+
+}
diff --git a/apps/dav/tests/unit/CalDAV/Publishing/PublisherTest.php b/apps/dav/tests/unit/CalDAV/Publishing/PublisherTest.php
new file mode 100644
index 00000000000..b6b1e4381b5
--- /dev/null
+++ b/apps/dav/tests/unit/CalDAV/Publishing/PublisherTest.php
@@ -0,0 +1,56 @@
+<?php
+
+namespace OCA\DAV\Tests\unit\CalDAV\Publishing;
+
+use OCA\DAV\CalDAV\Publishing\Xml\Publisher;
+use Sabre\Xml\Writer;
+
+class PublisherTest extends \PHPUnit_Framework_TestCase {
+
+ const NS_CALENDARSERVER = 'http://calendarserver.org/ns/';
+
+ public function testSerializePublished() {
+ $publish = new Publisher('urltopublish', true);
+
+ $xml = $this->write([
+ '{' . self::NS_CALENDARSERVER . '}publish-url' => $publish,
+ ]);
+
+ $this->assertEquals('urltopublish', $publish->getValue());
+
+ $this->assertXmlStringEqualsXmlString(
+ '<?xml version="1.0"?>
+ <x1:publish-url xmlns:d="DAV:" xmlns:x1="' . self::NS_CALENDARSERVER . '">
+ <d:href>urltopublish</d:href>
+ </x1:publish-url>', $xml);
+ }
+
+ public function testSerializeNotPublished() {
+ $publish = new Publisher('urltopublish', false);
+
+ $xml = $this->write([
+ '{' . self::NS_CALENDARSERVER . '}pre-publish-url' => $publish,
+ ]);
+
+ $this->assertEquals('urltopublish', $publish->getValue());
+
+ $this->assertXmlStringEqualsXmlString(
+ '<?xml version="1.0"?>
+ <x1:pre-publish-url xmlns:d="DAV:" xmlns:x1="' . self::NS_CALENDARSERVER . '">urltopublish</x1:pre-publish-url>', $xml);
+ }
+
+
+ protected $elementMap = [];
+ protected $namespaceMap = ['DAV:' => 'd'];
+ protected $contextUri = '/';
+
+ private function write($input) {
+ $writer = new Writer();
+ $writer->contextUri = $this->contextUri;
+ $writer->namespaceMap = $this->namespaceMap;
+ $writer->openMemory();
+ $writer->setIndent(true);
+ $writer->write($input);
+ return $writer->outputMemory();
+ }
+}
diff --git a/apps/dav/tests/unit/CalDAV/Publishing/PublishingTest.php b/apps/dav/tests/unit/CalDAV/Publishing/PublishingTest.php
new file mode 100644
index 00000000000..69de507dac5
--- /dev/null
+++ b/apps/dav/tests/unit/CalDAV/Publishing/PublishingTest.php
@@ -0,0 +1,82 @@
+<?php
+
+namespace OCA\DAV\Tests\unit\CalDAV\Publishing;
+
+use OCA\DAV\CalDAV\Calendar;
+use OCA\DAV\CalDAV\Publishing\PublishPlugin;
+use OCP\IRequest;
+use OCP\IURLGenerator;
+use OCP\IConfig;
+use Sabre\DAV\Server;
+use Sabre\DAV\SimpleCollection;
+use Sabre\HTTP\Request;
+use Sabre\HTTP\Response;
+use Test\TestCase;
+
+class PluginTest extends TestCase {
+
+ /** @var PublishPlugin */
+ private $plugin;
+ /** @var Server */
+ private $server;
+ /** @var Calendar | \PHPUnit_Framework_MockObject_MockObject */
+ private $book;
+ /** @var IConfig | \PHPUnit_Framework_MockObject_MockObject */
+ private $config;
+ /** @var IURLGenerator | \PHPUnit_Framework_MockObject_MockObject */
+ private $urlGenerator;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->config = $this->getMockBuilder('\OCP\IConfig')->
+ disableOriginalConstructor()->
+ getMock();
+ $this->config->expects($this->any())->method('getSystemValue')
+ ->with($this->equalTo('secret'))
+ ->willReturn('mysecret');
+
+ $this->urlGenerator = $this->getMockBuilder('OCP\IURLGenerator')->
+ disableOriginalConstructor()->
+ getMock();
+
+ /** @var IRequest $request */
+ $this->plugin = new PublishPlugin($this->config, $this->urlGenerator);
+
+ $root = new SimpleCollection('calendars');
+ $this->server = new Server($root);
+ /** @var SimpleCollection $node */
+ $this->book = $this->getMockBuilder('OCA\DAV\CalDAV\Calendar')->
+ disableOriginalConstructor()->
+ getMock();
+ $this->book->method('getName')->willReturn('cal1');
+ $root->addChild($this->book);
+ $this->plugin->initialize($this->server);
+ }
+
+ public function testPublishing() {
+
+ $this->book->expects($this->once())->method('setPublishStatus')->with(true);
+
+ // setup request
+ $request = new Request();
+ $request->addHeader('Content-Type', 'application/xml');
+ $request->setUrl('cal1');
+ $request->setBody('<o:publish-calendar xmlns:o="http://calendarserver.org/ns/"/>');
+ $response = new Response();
+ $this->plugin->httpPost($request, $response);
+ }
+
+ public function testUnPublishing() {
+
+ $this->book->expects($this->once())->method('setPublishStatus')->with(false);
+
+ // setup request
+ $request = new Request();
+ $request->addHeader('Content-Type', 'application/xml');
+ $request->setUrl('cal1');
+ $request->setBody('<o:unpublish-calendar xmlns:o="http://calendarserver.org/ns/"/>');
+ $response = new Response();
+ $this->plugin->httpPost($request, $response);
+ }
+}
diff --git a/apps/dav/tests/unit/DAV/SystemPrincipalBackendTest.php b/apps/dav/tests/unit/DAV/SystemPrincipalBackendTest.php
index 3a5566e8f70..71bdfb3b2bc 100644
--- a/apps/dav/tests/unit/DAV/SystemPrincipalBackendTest.php
+++ b/apps/dav/tests/unit/DAV/SystemPrincipalBackendTest.php
@@ -45,7 +45,12 @@ class SystemPrincipalBackendTest extends TestCase {
[[[
'uri' => 'principals/system/system',
'{DAV:}displayname' => 'system',
- ]], 'principals/system'],
+ ],
+ [
+ 'uri' => 'principals/system/public',
+ '{DAV:}displayname' => 'public',
+ ]
+ ], 'principals/system'],
];
}