2015-10-31 03:28:21 +03:00
< ? php
/**
2016-07-21 17:49:16 +03:00
* @ copyright Copyright ( c ) 2016 , ownCloud , Inc .
*
* @ author Joas Schilling < coding @ schilljs . com >
* @ author Thomas Citharel < tcit @ tcit . fr >
2016-01-12 17:02:16 +03:00
* @ author Thomas Müller < thomas . mueller @ tmit . eu >
2015-10-31 03:28:21 +03:00
*
* @ 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 < http :// www . gnu . org / licenses />
*
*/
2016-05-25 17:04:15 +03:00
namespace OCA\DAV\Tests\unit\CalDAV ;
2015-10-31 03:28:21 +03:00
use DateTime ;
use DateTimeZone ;
use OCA\DAV\CalDAV\CalDavBackend ;
2016-01-28 19:16:11 +03:00
use OCA\DAV\CalDAV\Calendar ;
2016-04-21 14:36:52 +03:00
use OCP\IL10N ;
2015-10-31 03:28:21 +03:00
use Sabre\DAV\PropPatch ;
2015-11-20 15:35:23 +03:00
use Sabre\DAV\Xml\Property\Href ;
2016-01-28 22:30:40 +03:00
use Sabre\DAVACL\IACL ;
2015-10-31 03:28:21 +03:00
/**
* Class CalDavBackendTest
*
* @ group DB
*
2016-05-25 17:04:15 +03:00
* @ package OCA\DAV\Tests\unit\CalDAV
2015-10-31 03:28:21 +03:00
*/
2016-05-31 18:16:28 +03:00
class CalDavBackendTest extends AbstractCalDavBackendTest {
2015-10-31 03:28:21 +03:00
public function testCalendarOperations () {
$calendarId = $this -> createTestCalendar ();
// update it's display name
$patch = new PropPatch ([
'{DAV:}displayname' => 'Unit test' ,
'{urn:ietf:params:xml:ns:caldav}calendar-description' => 'Calendar used for unit testing'
]);
$this -> backend -> updateCalendar ( $calendarId , $patch );
$patch -> commit ();
2016-08-30 16:11:33 +03:00
$this -> assertEquals ( 1 , $this -> backend -> getCalendarsForUserCount ( self :: UNIT_TEST_USER ));
2015-10-31 03:28:21 +03:00
$books = $this -> backend -> getCalendarsForUser ( self :: UNIT_TEST_USER );
$this -> assertEquals ( 1 , count ( $books ));
$this -> assertEquals ( 'Unit test' , $books [ 0 ][ '{DAV:}displayname' ]);
$this -> assertEquals ( 'Calendar used for unit testing' , $books [ 0 ][ '{urn:ietf:params:xml:ns:caldav}calendar-description' ]);
// delete the address book
$this -> backend -> deleteCalendar ( $books [ 0 ][ 'id' ]);
$books = $this -> backend -> getCalendarsForUser ( self :: UNIT_TEST_USER );
$this -> assertEquals ( 0 , count ( $books ));
}
2016-01-28 22:30:40 +03:00
public function providesSharingData () {
return [
[ true , true , true , false , [
[
'href' => 'principal:' . self :: UNIT_TEST_USER1 ,
'readOnly' => false
],
[
'href' => 'principal:' . self :: UNIT_TEST_GROUP ,
'readOnly' => true
]
]],
[ true , false , false , false , [
[
'href' => 'principal:' . self :: UNIT_TEST_USER1 ,
'readOnly' => true
],
]],
];
}
/**
* @ dataProvider providesSharingData
*/
public function testCalendarSharing ( $userCanRead , $userCanWrite , $groupCanRead , $groupCanWrite , $add ) {
2016-01-28 19:16:11 +03:00
2016-04-21 14:36:52 +03:00
/** @var IL10N | \PHPUnit_Framework_MockObject_MockObject $l10n */
2016-04-14 16:38:00 +03:00
$l10n = $this -> getMockBuilder ( '\OCP\IL10N' )
-> disableOriginalConstructor () -> getMock ();
$l10n
-> expects ( $this -> any ())
-> method ( 't' )
-> will ( $this -> returnCallback ( function ( $text , $parameters = array ()) {
return vsprintf ( $text , $parameters );
}));
2016-01-28 22:30:40 +03:00
$calendarId = $this -> createTestCalendar ();
2016-01-28 19:16:11 +03:00
$books = $this -> backend -> getCalendarsForUser ( self :: UNIT_TEST_USER );
$this -> assertEquals ( 1 , count ( $books ));
2016-04-14 16:38:00 +03:00
$calendar = new Calendar ( $this -> backend , $books [ 0 ], $l10n );
2016-01-28 22:30:40 +03:00
$this -> backend -> updateShares ( $calendar , $add , []);
2016-01-28 19:16:11 +03:00
$books = $this -> backend -> getCalendarsForUser ( self :: UNIT_TEST_USER1 );
$this -> assertEquals ( 1 , count ( $books ));
2016-04-14 16:38:00 +03:00
$calendar = new Calendar ( $this -> backend , $books [ 0 ], $l10n );
2016-01-28 22:30:40 +03:00
$acl = $calendar -> getACL ();
$this -> assertAcl ( self :: UNIT_TEST_USER , '{DAV:}read' , $acl );
$this -> assertAcl ( self :: UNIT_TEST_USER , '{DAV:}write' , $acl );
$this -> assertAccess ( $userCanRead , self :: UNIT_TEST_USER1 , '{DAV:}read' , $acl );
$this -> assertAccess ( $userCanWrite , self :: UNIT_TEST_USER1 , '{DAV:}write' , $acl );
$this -> assertAccess ( $groupCanRead , self :: UNIT_TEST_GROUP , '{DAV:}read' , $acl );
$this -> assertAccess ( $groupCanWrite , self :: UNIT_TEST_GROUP , '{DAV:}write' , $acl );
$this -> assertEquals ( self :: UNIT_TEST_USER , $calendar -> getOwner ());
// test acls on the child
$uri = $this -> getUniqueID ( 'calobj' );
$calData = <<< 'EOD'
BEGIN : VCALENDAR
VERSION : 2.0
PRODID : ownCloud Calendar
BEGIN : VEVENT
CREATED ; VALUE = DATE - TIME : 20130910 T125139Z
UID : 47 d15e3ec8
LAST - MODIFIED ; VALUE = DATE - TIME : 20130910 T125139Z
DTSTAMP ; VALUE = DATE - TIME : 20130910 T125139Z
SUMMARY : Test Event
DTSTART ; VALUE = DATE - TIME : 20130912 T130000Z
DTEND ; VALUE = DATE - TIME : 20130912 T140000Z
CLASS : PUBLIC
END : VEVENT
END : VCALENDAR
EOD ;
$this -> backend -> createCalendarObject ( $calendarId , $uri , $calData );
/** @var IACL $child */
$child = $calendar -> getChild ( $uri );
$acl = $child -> getACL ();
$this -> assertAcl ( self :: UNIT_TEST_USER , '{DAV:}read' , $acl );
$this -> assertAcl ( self :: UNIT_TEST_USER , '{DAV:}write' , $acl );
$this -> assertAccess ( $userCanRead , self :: UNIT_TEST_USER1 , '{DAV:}read' , $acl );
$this -> assertAccess ( $userCanWrite , self :: UNIT_TEST_USER1 , '{DAV:}write' , $acl );
$this -> assertAccess ( $groupCanRead , self :: UNIT_TEST_GROUP , '{DAV:}read' , $acl );
$this -> assertAccess ( $groupCanWrite , self :: UNIT_TEST_GROUP , '{DAV:}write' , $acl );
2016-01-28 19:16:11 +03:00
// delete the address book
$this -> backend -> deleteCalendar ( $books [ 0 ][ 'id' ]);
$books = $this -> backend -> getCalendarsForUser ( self :: UNIT_TEST_USER );
$this -> assertEquals ( 0 , count ( $books ));
}
2015-10-31 03:28:21 +03:00
public function testCalendarObjectsOperations () {
$calendarId = $this -> createTestCalendar ();
// create a card
$uri = $this -> getUniqueID ( 'calobj' );
$calData = <<< 'EOD'
BEGIN : VCALENDAR
VERSION : 2.0
PRODID : ownCloud Calendar
BEGIN : VEVENT
CREATED ; VALUE = DATE - TIME : 20130910 T125139Z
UID : 47 d15e3ec8
LAST - MODIFIED ; VALUE = DATE - TIME : 20130910 T125139Z
DTSTAMP ; VALUE = DATE - TIME : 20130910 T125139Z
SUMMARY : Test Event
DTSTART ; VALUE = DATE - TIME : 20130912 T130000Z
DTEND ; VALUE = DATE - TIME : 20130912 T140000Z
CLASS : PUBLIC
END : VEVENT
END : VCALENDAR
EOD ;
$this -> backend -> createCalendarObject ( $calendarId , $uri , $calData );
// get all the cards
$calendarObjects = $this -> backend -> getCalendarObjects ( $calendarId );
$this -> assertEquals ( 1 , count ( $calendarObjects ));
$this -> assertEquals ( $calendarId , $calendarObjects [ 0 ][ 'calendarid' ]);
2016-05-31 18:16:28 +03:00
$this -> assertArrayHasKey ( 'classification' , $calendarObjects [ 0 ]);
2015-10-31 03:28:21 +03:00
// get the cards
$calendarObject = $this -> backend -> getCalendarObject ( $calendarId , $uri );
$this -> assertNotNull ( $calendarObject );
$this -> assertArrayHasKey ( 'id' , $calendarObject );
$this -> assertArrayHasKey ( 'uri' , $calendarObject );
$this -> assertArrayHasKey ( 'lastmodified' , $calendarObject );
$this -> assertArrayHasKey ( 'etag' , $calendarObject );
$this -> assertArrayHasKey ( 'size' , $calendarObject );
2016-05-31 18:16:28 +03:00
$this -> assertArrayHasKey ( 'classification' , $calendarObject );
2015-10-31 03:28:21 +03:00
$this -> assertEquals ( $calData , $calendarObject [ 'calendardata' ]);
// update the card
$calData = <<< 'EOD'
BEGIN : VCALENDAR
VERSION : 2.0
PRODID : ownCloud Calendar
BEGIN : VEVENT
CREATED ; VALUE = DATE - TIME : 20130910 T125139Z
UID : 47 d15e3ec8
LAST - MODIFIED ; VALUE = DATE - TIME : 20130910 T125139Z
DTSTAMP ; VALUE = DATE - TIME : 20130910 T125139Z
SUMMARY : Test Event
DTSTART ; VALUE = DATE - TIME : 20130912 T130000Z
DTEND ; VALUE = DATE - TIME : 20130912 T140000Z
END : VEVENT
END : VCALENDAR
EOD ;
$this -> backend -> updateCalendarObject ( $calendarId , $uri , $calData );
$calendarObject = $this -> backend -> getCalendarObject ( $calendarId , $uri );
$this -> assertEquals ( $calData , $calendarObject [ 'calendardata' ]);
// delete the card
$this -> backend -> deleteCalendarObject ( $calendarId , $uri );
$calendarObjects = $this -> backend -> getCalendarObjects ( $calendarId );
$this -> assertEquals ( 0 , count ( $calendarObjects ));
}
public function testMultiCalendarObjects () {
$calendarId = $this -> createTestCalendar ();
// create an event
$calData = <<< 'EOD'
BEGIN : VCALENDAR
VERSION : 2.0
PRODID : ownCloud Calendar
BEGIN : VEVENT
CREATED ; VALUE = DATE - TIME : 20130910 T125139Z
UID : 47 d15e3ec8
LAST - MODIFIED ; VALUE = DATE - TIME : 20130910 T125139Z
DTSTAMP ; VALUE = DATE - TIME : 20130910 T125139Z
SUMMARY : Test Event
DTSTART ; VALUE = DATE - TIME : 20130912 T130000Z
DTEND ; VALUE = DATE - TIME : 20130912 T140000Z
CLASS : PUBLIC
END : VEVENT
END : VCALENDAR
EOD ;
$uri0 = $this -> getUniqueID ( 'card' );
$this -> backend -> createCalendarObject ( $calendarId , $uri0 , $calData );
$uri1 = $this -> getUniqueID ( 'card' );
$this -> backend -> createCalendarObject ( $calendarId , $uri1 , $calData );
$uri2 = $this -> getUniqueID ( 'card' );
$this -> backend -> createCalendarObject ( $calendarId , $uri2 , $calData );
// get all the cards
$calendarObjects = $this -> backend -> getCalendarObjects ( $calendarId );
$this -> assertEquals ( 3 , count ( $calendarObjects ));
// get the cards
$calendarObjects = $this -> backend -> getMultipleCalendarObjects ( $calendarId , [ $uri1 , $uri2 ]);
$this -> assertEquals ( 2 , count ( $calendarObjects ));
foreach ( $calendarObjects as $card ) {
$this -> assertArrayHasKey ( 'id' , $card );
$this -> assertArrayHasKey ( 'uri' , $card );
$this -> assertArrayHasKey ( 'lastmodified' , $card );
$this -> assertArrayHasKey ( 'etag' , $card );
$this -> assertArrayHasKey ( 'size' , $card );
2016-05-31 18:16:28 +03:00
$this -> assertArrayHasKey ( 'classification' , $card );
2015-10-31 03:28:21 +03:00
$this -> assertEquals ( $calData , $card [ 'calendardata' ]);
}
// delete the card
$this -> backend -> deleteCalendarObject ( $calendarId , $uri0 );
$this -> backend -> deleteCalendarObject ( $calendarId , $uri1 );
$this -> backend -> deleteCalendarObject ( $calendarId , $uri2 );
$calendarObjects = $this -> backend -> getCalendarObjects ( $calendarId );
$this -> assertEquals ( 0 , count ( $calendarObjects ));
}
/**
* @ dataProvider providesCalendarQueryParameters
*/
public function testCalendarQuery ( $expectedEventsInResult , $propFilters , $compFilter ) {
$calendarId = $this -> createTestCalendar ();
$events = [];
$events [ 0 ] = $this -> createEvent ( $calendarId , '20130912T130000Z' , '20130912T140000Z' );
$events [ 1 ] = $this -> createEvent ( $calendarId , '20130912T150000Z' , '20130912T170000Z' );
$events [ 2 ] = $this -> createEvent ( $calendarId , '20130912T173000Z' , '20130912T220000Z' );
2016-04-25 15:32:41 +03:00
$events [ 3 ] = $this -> createEvent ( $calendarId , '21130912T130000Z' , '22130912T130000Z' );
2015-10-31 03:28:21 +03:00
$result = $this -> backend -> calendarQuery ( $calendarId , [
'name' => '' ,
'prop-filters' => $propFilters ,
'comp-filters' => $compFilter
]);
$expectedEventsInResult = array_map ( function ( $index ) use ( $events ) {
return $events [ $index ];
}, $expectedEventsInResult );
$this -> assertEquals ( $expectedEventsInResult , $result , '' , 0.0 , 10 , true );
}
public function testGetCalendarObjectByUID () {
$calendarId = $this -> createTestCalendar ();
$this -> createEvent ( $calendarId , '20130912T130000Z' , '20130912T140000Z' );
$co = $this -> backend -> getCalendarObjectByUID ( self :: UNIT_TEST_USER , '47d15e3ec8' );
$this -> assertNotNull ( $co );
}
public function providesCalendarQueryParameters () {
return [
2016-04-25 15:32:41 +03:00
'all' => [[ 0 , 1 , 2 , 3 ], [], []],
2015-10-31 03:28:21 +03:00
'only-todos' => [[], [ 'name' => 'VTODO' ], []],
2016-04-25 15:32:41 +03:00
'only-events' => [[ 0 , 1 , 2 , 3 ], [], [[ 'name' => 'VEVENT' , 'is-not-defined' => false , 'comp-filters' => [], 'time-range' => [ 'start' => null , 'end' => null ], 'prop-filters' => []]],],
'start' => [[ 1 , 2 , 3 ], [], [[ 'name' => 'VEVENT' , 'is-not-defined' => false , 'comp-filters' => [], 'time-range' => [ 'start' => new DateTime ( '2013-09-12 14:00:00' , new DateTimeZone ( 'UTC' )), 'end' => null ], 'prop-filters' => []]],],
2015-10-31 03:28:21 +03:00
'end' => [[ 0 ], [], [[ 'name' => 'VEVENT' , 'is-not-defined' => false , 'comp-filters' => [], 'time-range' => [ 'start' => null , 'end' => new DateTime ( '2013-09-12 14:00:00' , new DateTimeZone ( 'UTC' ))], 'prop-filters' => []]],],
2016-04-25 15:32:41 +03:00
'future' => [[ 3 ], [], [[ 'name' => 'VEVENT' , 'is-not-defined' => false , 'comp-filters' => [], 'time-range' => [ 'start' => new DateTime ( '2099-09-12 14:00:00' , new DateTimeZone ( 'UTC' )), 'end' => null ], 'prop-filters' => []]],],
2015-10-31 03:28:21 +03:00
];
}
public function testSyncSupport () {
$calendarId = $this -> createTestCalendar ();
// fist call without synctoken
$changes = $this -> backend -> getChangesForCalendar ( $calendarId , '' , 1 );
$syncToken = $changes [ 'syncToken' ];
// add a change
$event = $this -> createEvent ( $calendarId , '20130912T130000Z' , '20130912T140000Z' );
// look for changes
$changes = $this -> backend -> getChangesForCalendar ( $calendarId , $syncToken , 1 );
$this -> assertEquals ( $event , $changes [ 'added' ][ 0 ]);
}
public function testSubscriptions () {
$id = $this -> backend -> createSubscription ( self :: UNIT_TEST_USER , 'Subscription' , [
2016-07-01 14:42:35 +03:00
'{http://calendarserver.org/ns/}source' => new Href ( 'test-source' ),
'{http://apple.com/ns/ical/}calendar-color' => '#1C4587' ,
'{http://calendarserver.org/ns/}subscribed-strip-todos' => ''
2015-10-31 03:28:21 +03:00
]);
$subscriptions = $this -> backend -> getSubscriptionsForUser ( self :: UNIT_TEST_USER );
$this -> assertEquals ( 1 , count ( $subscriptions ));
2016-07-01 14:42:35 +03:00
$this -> assertEquals ( '#1C4587' , $subscriptions [ 0 ][ '{http://apple.com/ns/ical/}calendar-color' ]);
$this -> assertEquals ( true , $subscriptions [ 0 ][ '{http://calendarserver.org/ns/}subscribed-strip-todos' ]);
2015-10-31 03:28:21 +03:00
$this -> assertEquals ( $id , $subscriptions [ 0 ][ 'id' ]);
$patch = new PropPatch ([
'{DAV:}displayname' => 'Unit test' ,
2016-07-01 14:42:35 +03:00
'{http://apple.com/ns/ical/}calendar-color' => '#ac0606' ,
2015-10-31 03:28:21 +03:00
]);
$this -> backend -> updateSubscription ( $id , $patch );
$patch -> commit ();
$subscriptions = $this -> backend -> getSubscriptionsForUser ( self :: UNIT_TEST_USER );
$this -> assertEquals ( 1 , count ( $subscriptions ));
$this -> assertEquals ( $id , $subscriptions [ 0 ][ 'id' ]);
$this -> assertEquals ( 'Unit test' , $subscriptions [ 0 ][ '{DAV:}displayname' ]);
2016-07-01 14:42:35 +03:00
$this -> assertEquals ( '#ac0606' , $subscriptions [ 0 ][ '{http://apple.com/ns/ical/}calendar-color' ]);
2015-10-31 03:28:21 +03:00
$this -> backend -> deleteSubscription ( $id );
$subscriptions = $this -> backend -> getSubscriptionsForUser ( self :: UNIT_TEST_USER );
$this -> assertEquals ( 0 , count ( $subscriptions ));
}
2015-11-16 17:49:46 +03:00
public function testScheduling () {
$this -> backend -> createSchedulingObject ( self :: UNIT_TEST_USER , 'Sample Schedule' , '' );
$sos = $this -> backend -> getSchedulingObjects ( self :: UNIT_TEST_USER );
$this -> assertEquals ( 1 , count ( $sos ));
$so = $this -> backend -> getSchedulingObject ( self :: UNIT_TEST_USER , 'Sample Schedule' );
$this -> assertNotNull ( $so );
$this -> backend -> deleteSchedulingObject ( self :: UNIT_TEST_USER , 'Sample Schedule' );
$sos = $this -> backend -> getSchedulingObjects ( self :: UNIT_TEST_USER );
$this -> assertEquals ( 0 , count ( $sos ));
}
2016-01-28 22:30:40 +03:00
2016-03-09 20:13:34 +03:00
/**
* @ dataProvider providesCalDataForGetDenormalizedData
*/
2016-04-19 12:33:37 +03:00
public function testGetDenormalizedData ( $expected , $key , $calData ) {
$actual = $this -> backend -> getDenormalizedData ( $calData );
$this -> assertEquals ( $expected , $actual [ $key ]);
2016-03-09 20:13:34 +03:00
}
public function providesCalDataForGetDenormalizedData () {
return [
2016-04-19 12:33:37 +03:00
'first occurrence before unix epoch starts' => [ 0 , 'firstOccurence' , " BEGIN:VCALENDAR \r \n VERSION:2.0 \r \n PRODID:-//Sabre//Sabre VObject 3.5.0//EN \r \n CALSCALE:GREGORIAN \r \n BEGIN:VEVENT \r \n UID:413F269B-B51B-46B1-AFB6-40055C53A4DC \r \n DTSTAMP:20160309T095056Z \r \n DTSTART;VALUE=DATE:16040222 \r \n DTEND;VALUE=DATE:16040223 \r \n RRULE:FREQ=YEARLY \r \n SUMMARY:SUMMARY \r \n TRANSP:TRANSPARENT \r \n END:VEVENT \r \n END:VCALENDAR \r \n " ],
'no first occurrence because yearly' => [ null , 'firstOccurence' , " BEGIN:VCALENDAR \r \n VERSION:2.0 \r \n PRODID:-//Sabre//Sabre VObject 3.5.0//EN \r \n CALSCALE:GREGORIAN \r \n BEGIN:VEVENT \r \n UID:413F269B-B51B-46B1-AFB6-40055C53A4DC \r \n DTSTAMP:20160309T095056Z \r \n RRULE:FREQ=YEARLY \r \n SUMMARY:SUMMARY \r \n TRANSP:TRANSPARENT \r \n END:VEVENT \r \n END:VCALENDAR \r \n " ],
'CLASS:PRIVATE' => [ CalDavBackend :: CLASSIFICATION_PRIVATE , 'classification' , " BEGIN:VCALENDAR \r \n VERSION:2.0 \r \n PRODID:-//dmfs.org//mimedir.icalendar//EN \r \n BEGIN:VTIMEZONE \r \n TZID:Europe/Berlin \r \n X-LIC-LOCATION:Europe/Berlin \r \n BEGIN:DAYLIGHT \r \n TZOFFSETFROM:+0100 \r \n TZOFFSETTO:+0200 \r \n TZNAME:CEST \r \n DTSTART:19700329T020000 \r \n RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU \r \n END:DAYLIGHT \r \n BEGIN:STANDARD \r \n TZOFFSETFROM:+0200 \r \n TZOFFSETTO:+0100 \r \n TZNAME:CET \r \n DTSTART:19701025T030000 \r \n RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU \r \n END:STANDARD \r \n END:VTIMEZONE \r \n BEGIN:VEVENT \r \n DTSTART;TZID=Europe/Berlin:20160419T130000 \r \n SUMMARY:Test \r \n CLASS:PRIVATE \r \n TRANSP:OPAQUE \r \n STATUS:CONFIRMED \r \n DTEND;TZID=Europe/Berlin:20160419T140000 \r \n LAST-MODIFIED:20160419T074202Z \r \n DTSTAMP:20160419T074202Z \r \n CREATED:20160419T074202Z \r \n UID:2e468c48-7860-492e-bc52-92fa0daeeccf.1461051722310 \r \n END:VEVENT \r \n END:VCALENDAR " ],
'CLASS:PUBLIC' => [ CalDavBackend :: CLASSIFICATION_PUBLIC , 'classification' , " BEGIN:VCALENDAR \r \n VERSION:2.0 \r \n PRODID:-//dmfs.org//mimedir.icalendar//EN \r \n BEGIN:VTIMEZONE \r \n TZID:Europe/Berlin \r \n X-LIC-LOCATION:Europe/Berlin \r \n BEGIN:DAYLIGHT \r \n TZOFFSETFROM:+0100 \r \n TZOFFSETTO:+0200 \r \n TZNAME:CEST \r \n DTSTART:19700329T020000 \r \n RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU \r \n END:DAYLIGHT \r \n BEGIN:STANDARD \r \n TZOFFSETFROM:+0200 \r \n TZOFFSETTO:+0100 \r \n TZNAME:CET \r \n DTSTART:19701025T030000 \r \n RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU \r \n END:STANDARD \r \n END:VTIMEZONE \r \n BEGIN:VEVENT \r \n DTSTART;TZID=Europe/Berlin:20160419T130000 \r \n SUMMARY:Test \r \n CLASS:PUBLIC \r \n TRANSP:OPAQUE \r \n STATUS:CONFIRMED \r \n DTEND;TZID=Europe/Berlin:20160419T140000 \r \n LAST-MODIFIED:20160419T074202Z \r \n DTSTAMP:20160419T074202Z \r \n CREATED:20160419T074202Z \r \n UID:2e468c48-7860-492e-bc52-92fa0daeeccf.1461051722310 \r \n END:VEVENT \r \n END:VCALENDAR " ],
'CLASS:CONFIDENTIAL' => [ CalDavBackend :: CLASSIFICATION_CONFIDENTIAL , 'classification' , " BEGIN:VCALENDAR \r \n VERSION:2.0 \r \n PRODID:-//dmfs.org//mimedir.icalendar//EN \r \n BEGIN:VTIMEZONE \r \n TZID:Europe/Berlin \r \n X-LIC-LOCATION:Europe/Berlin \r \n BEGIN:DAYLIGHT \r \n TZOFFSETFROM:+0100 \r \n TZOFFSETTO:+0200 \r \n TZNAME:CEST \r \n DTSTART:19700329T020000 \r \n RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU \r \n END:DAYLIGHT \r \n BEGIN:STANDARD \r \n TZOFFSETFROM:+0200 \r \n TZOFFSETTO:+0100 \r \n TZNAME:CET \r \n DTSTART:19701025T030000 \r \n RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU \r \n END:STANDARD \r \n END:VTIMEZONE \r \n BEGIN:VEVENT \r \n DTSTART;TZID=Europe/Berlin:20160419T130000 \r \n SUMMARY:Test \r \n CLASS:CONFIDENTIAL \r \n TRANSP:OPAQUE \r \n STATUS:CONFIRMED \r \n DTEND;TZID=Europe/Berlin:20160419T140000 \r \n LAST-MODIFIED:20160419T074202Z \r \n DTSTAMP:20160419T074202Z \r \n CREATED:20160419T074202Z \r \n UID:2e468c48-7860-492e-bc52-92fa0daeeccf.1461051722310 \r \n END:VEVENT \r \n END:VCALENDAR " ],
'no class set -> public' => [ CalDavBackend :: CLASSIFICATION_PUBLIC , 'classification' , " BEGIN:VCALENDAR \r \n VERSION:2.0 \r \n PRODID:-//dmfs.org//mimedir.icalendar//EN \r \n BEGIN:VTIMEZONE \r \n TZID:Europe/Berlin \r \n X-LIC-LOCATION:Europe/Berlin \r \n BEGIN:DAYLIGHT \r \n TZOFFSETFROM:+0100 \r \n TZOFFSETTO:+0200 \r \n TZNAME:CEST \r \n DTSTART:19700329T020000 \r \n RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU \r \n END:DAYLIGHT \r \n BEGIN:STANDARD \r \n TZOFFSETFROM:+0200 \r \n TZOFFSETTO:+0100 \r \n TZNAME:CET \r \n DTSTART:19701025T030000 \r \n RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU \r \n END:STANDARD \r \n END:VTIMEZONE \r \n BEGIN:VEVENT \r \n DTSTART;TZID=Europe/Berlin:20160419T130000 \r \n SUMMARY:Test \r \n TRANSP:OPAQUE \r \n DTEND;TZID=Europe/Berlin:20160419T140000 \r \n LAST-MODIFIED:20160419T074202Z \r \n DTSTAMP:20160419T074202Z \r \n CREATED:20160419T074202Z \r \n UID:2e468c48-7860-492e-bc52-92fa0daeeccf.1461051722310 \r \n END:VEVENT \r \n END:VCALENDAR " ],
'unknown class -> private' => [ CalDavBackend :: CLASSIFICATION_PRIVATE , 'classification' , " BEGIN:VCALENDAR \r \n VERSION:2.0 \r \n PRODID:-//dmfs.org//mimedir.icalendar//EN \r \n BEGIN:VTIMEZONE \r \n TZID:Europe/Berlin \r \n X-LIC-LOCATION:Europe/Berlin \r \n BEGIN:DAYLIGHT \r \n TZOFFSETFROM:+0100 \r \n TZOFFSETTO:+0200 \r \n TZNAME:CEST \r \n DTSTART:19700329T020000 \r \n RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU \r \n END:DAYLIGHT \r \n BEGIN:STANDARD \r \n TZOFFSETFROM:+0200 \r \n TZOFFSETTO:+0100 \r \n TZNAME:CET \r \n DTSTART:19701025T030000 \r \n RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU \r \n END:STANDARD \r \n END:VTIMEZONE \r \n BEGIN:VEVENT \r \n DTSTART;TZID=Europe/Berlin:20160419T130000 \r \n SUMMARY:Test \r \n CLASS:VERTRAULICH \r \n TRANSP:OPAQUE \r \n STATUS:CONFIRMED \r \n DTEND;TZID=Europe/Berlin:20160419T140000 \r \n LAST-MODIFIED:20160419T074202Z \r \n DTSTAMP:20160419T074202Z \r \n CREATED:20160419T074202Z \r \n UID:2e468c48-7860-492e-bc52-92fa0daeeccf.1461051722310 \r \n END:VEVENT \r \n END:VCALENDAR " ],
2016-03-09 20:13:34 +03:00
];
}
2015-10-31 03:28:21 +03:00
}