2013-10-21 22:46:31 +00:00
< ? php
namespace Sabre\CalDAV\Backend ;
2016-05-11 00:26:44 +00:00
2013-10-21 22:46:31 +00:00
use Sabre\CalDAV ;
use Sabre\DAV ;
2016-05-11 00:26:44 +00:00
use Sabre\DAV\PropPatch ;
2016-05-28 15:46:24 +00:00
use Sabre\DAV\Xml\Element\Sharee ;
2013-10-21 22:46:31 +00:00
abstract class AbstractPDOTest extends \PHPUnit_Framework_TestCase {
2016-05-28 15:46:24 +00:00
use DAV\DbTestHelperTrait ;
2013-10-21 22:46:31 +00:00
protected $pdo ;
2016-05-28 15:46:24 +00:00
function setUp () {
$this -> dropTables ([
'calendarobjects' ,
'calendars' ,
'calendarinstances' ,
'calendarchanges' ,
'calendarsubscriptions' ,
'schedulingobjects' ,
]);
$this -> createSchema ( 'calendars' );
$this -> pdo = $this -> getDb ();
}
2013-10-21 22:46:31 +00:00
function testConstruct () {
$backend = new PDO ( $this -> pdo );
$this -> assertTrue ( $backend instanceof PDO );
}
/**
* @ depends testConstruct
*/
function testGetCalendarsForUserNoCalendars () {
$backend = new PDO ( $this -> pdo );
$calendars = $backend -> getCalendarsForUser ( 'principals/user2' );
2016-05-11 00:26:44 +00:00
$this -> assertEquals ([], $calendars );
2013-10-21 22:46:31 +00:00
}
/**
* @ depends testConstruct
*/
function testCreateCalendarAndFetch () {
$backend = new PDO ( $this -> pdo );
2016-05-11 00:26:44 +00:00
$returnedId = $backend -> createCalendar ( 'principals/user2' , 'somerandomid' , [
'{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => new CalDAV\Xml\Property\SupportedCalendarComponentSet ([ 'VEVENT' ]),
'{DAV:}displayname' => 'Hello!' ,
'{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp' => new CalDAV\Xml\Property\ScheduleCalendarTransp ( 'transparent' ),
]);
2013-10-21 22:46:31 +00:00
$calendars = $backend -> getCalendarsForUser ( 'principals/user2' );
2016-05-11 00:26:44 +00:00
$elementCheck = [
'uri' => 'somerandomid' ,
'{DAV:}displayname' => 'Hello!' ,
'{urn:ietf:params:xml:ns:caldav}calendar-description' => '' ,
'{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp' => new CalDAV\Xml\Property\ScheduleCalendarTransp ( 'transparent' ),
2016-05-28 15:46:24 +00:00
'share-access' => \Sabre\DAV\Sharing\Plugin :: ACCESS_SHAREDOWNER ,
2016-05-11 00:26:44 +00:00
];
2013-10-21 22:46:31 +00:00
2016-05-11 00:26:44 +00:00
$this -> assertInternalType ( 'array' , $calendars );
$this -> assertEquals ( 1 , count ( $calendars ));
2013-10-21 22:46:31 +00:00
2016-05-11 00:26:44 +00:00
foreach ( $elementCheck as $name => $value ) {
2013-10-21 22:46:31 +00:00
$this -> assertArrayHasKey ( $name , $calendars [ 0 ]);
2016-05-11 00:26:44 +00:00
$this -> assertEquals ( $value , $calendars [ 0 ][ $name ]);
2013-10-21 22:46:31 +00:00
}
}
/**
* @ depends testConstruct
*/
function testUpdateCalendarAndFetch () {
$backend = new PDO ( $this -> pdo );
//Creating a new calendar
2016-05-11 00:26:44 +00:00
$newId = $backend -> createCalendar ( 'principals/user2' , 'somerandomid' , []);
$propPatch = new PropPatch ([
'{DAV:}displayname' => 'myCalendar' ,
'{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp' => new CalDAV\Xml\Property\ScheduleCalendarTransp ( 'transparent' ),
]);
2013-10-21 22:46:31 +00:00
// Updating the calendar
2016-05-11 00:26:44 +00:00
$backend -> updateCalendar ( $newId , $propPatch );
$result = $propPatch -> commit ();
2013-10-21 22:46:31 +00:00
// Verifying the result of the update
2016-05-11 00:26:44 +00:00
$this -> assertTrue ( $result );
2013-10-21 22:46:31 +00:00
// Fetching all calendars from this user
$calendars = $backend -> getCalendarsForUser ( 'principals/user2' );
// Checking if all the information is still correct
2016-05-11 00:26:44 +00:00
$elementCheck = [
'id' => $newId ,
'uri' => 'somerandomid' ,
'{DAV:}displayname' => 'myCalendar' ,
'{urn:ietf:params:xml:ns:caldav}calendar-description' => '' ,
'{urn:ietf:params:xml:ns:caldav}calendar-timezone' => '' ,
'{http://calendarserver.org/ns/}getctag' => 'http://sabre.io/ns/sync/2' ,
'{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp' => new CalDAV\Xml\Property\ScheduleCalendarTransp ( 'transparent' ),
];
2013-10-21 22:46:31 +00:00
2016-05-11 00:26:44 +00:00
$this -> assertInternalType ( 'array' , $calendars );
$this -> assertEquals ( 1 , count ( $calendars ));
2013-10-21 22:46:31 +00:00
2016-05-11 00:26:44 +00:00
foreach ( $elementCheck as $name => $value ) {
2013-10-21 22:46:31 +00:00
$this -> assertArrayHasKey ( $name , $calendars [ 0 ]);
2016-05-11 00:26:44 +00:00
$this -> assertEquals ( $value , $calendars [ 0 ][ $name ]);
2013-10-21 22:46:31 +00:00
}
}
2016-05-28 15:46:24 +00:00
/**
* @ depends testConstruct
* @ expectedException \InvalidArgumentException
*/
function testUpdateCalendarBadId () {
$backend = new PDO ( $this -> pdo );
//Creating a new calendar
$newId = $backend -> createCalendar ( 'principals/user2' , 'somerandomid' , []);
$propPatch = new PropPatch ([
'{DAV:}displayname' => 'myCalendar' ,
'{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp' => new CalDAV\Xml\Property\ScheduleCalendarTransp ( 'transparent' ),
]);
// Updating the calendar
$backend -> updateCalendar ( 'raaaa' , $propPatch );
}
2013-10-21 22:46:31 +00:00
/**
* @ depends testUpdateCalendarAndFetch
*/
function testUpdateCalendarUnknownProperty () {
$backend = new PDO ( $this -> pdo );
//Creating a new calendar
2016-05-11 00:26:44 +00:00
$newId = $backend -> createCalendar ( 'principals/user2' , 'somerandomid' , []);
2013-10-21 22:46:31 +00:00
2016-05-11 00:26:44 +00:00
$propPatch = new PropPatch ([
2013-10-21 22:46:31 +00:00
'{DAV:}displayname' => 'myCalendar' ,
'{DAV:}yourmom' => 'wittycomment' ,
2016-05-11 00:26:44 +00:00
]);
// Updating the calendar
$backend -> updateCalendar ( $newId , $propPatch );
$propPatch -> commit ();
2013-10-21 22:46:31 +00:00
// Verifying the result of the update
2016-05-11 00:26:44 +00:00
$this -> assertEquals ([
'{DAV:}yourmom' => 403 ,
'{DAV:}displayname' => 424 ,
], $propPatch -> getResult ());
2013-10-21 22:46:31 +00:00
}
/**
* @ depends testCreateCalendarAndFetch
*/
function testDeleteCalendar () {
$backend = new PDO ( $this -> pdo );
2016-05-11 00:26:44 +00:00
$returnedId = $backend -> createCalendar ( 'principals/user2' , 'somerandomid' , [
'{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => new CalDAV\Xml\Property\SupportedCalendarComponentSet ([ 'VEVENT' ]),
'{DAV:}displayname' => 'Hello!' ,
]);
2013-10-21 22:46:31 +00:00
$backend -> deleteCalendar ( $returnedId );
$calendars = $backend -> getCalendarsForUser ( 'principals/user2' );
2016-05-11 00:26:44 +00:00
$this -> assertEquals ([], $calendars );
2013-10-21 22:46:31 +00:00
}
2016-05-28 15:46:24 +00:00
/**
* @ depends testCreateCalendarAndFetch
* @ expectedException \InvalidArgumentException
*/
function testDeleteCalendarBadID () {
$backend = new PDO ( $this -> pdo );
$returnedId = $backend -> createCalendar ( 'principals/user2' , 'somerandomid' , [
'{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => new CalDAV\Xml\Property\SupportedCalendarComponentSet ([ 'VEVENT' ]),
'{DAV:}displayname' => 'Hello!' ,
]);
$backend -> deleteCalendar ( 'bad-id' );
}
2013-10-21 22:46:31 +00:00
/**
* @ depends testCreateCalendarAndFetch
* @ expectedException \Sabre\DAV\Exception
*/
function testCreateCalendarIncorrectComponentSet () {;
$backend = new PDO ( $this -> pdo );
//Creating a new calendar
2016-05-11 00:26:44 +00:00
$newId = $backend -> createCalendar ( 'principals/user2' , 'somerandomid' , [
2013-10-21 22:46:31 +00:00
'{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => 'blabla' ,
2016-05-11 00:26:44 +00:00
]);
2013-10-21 22:46:31 +00:00
}
function testCreateCalendarObject () {
$backend = new PDO ( $this -> pdo );
2016-05-11 00:26:44 +00:00
$returnedId = $backend -> createCalendar ( 'principals/user2' , 'somerandomid' , []);
2013-10-21 22:46:31 +00:00
$object = " BEGIN:VCALENDAR \r \n BEGIN:VEVENT \r \n DTSTART;VALUE=DATE:20120101 \r \n END:VEVENT \r \n END:VCALENDAR \r \n " ;
$backend -> createCalendarObject ( $returnedId , 'random-id' , $object );
2016-05-28 15:46:24 +00:00
$result = $this -> pdo -> query ( 'SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = \'random-id\'' );
$row = $result -> fetch ( \PDO :: FETCH_ASSOC );
if ( is_resource ( $row [ 'calendardata' ])) {
$row [ 'calendardata' ] = stream_get_contents ( $row [ 'calendardata' ]);
}
2016-05-11 00:26:44 +00:00
$this -> assertEquals ([
'etag' => md5 ( $object ),
'size' => strlen ( $object ),
'calendardata' => $object ,
2013-10-21 22:46:31 +00:00
'firstoccurence' => strtotime ( '20120101' ),
2016-05-11 00:26:44 +00:00
'lastoccurence' => strtotime ( '20120101' ) + ( 3600 * 24 ),
'componenttype' => 'VEVENT' ,
2016-05-28 15:46:24 +00:00
], $row );
2016-05-11 00:26:44 +00:00
}
function testGetMultipleObjects () {
$backend = new PDO ( $this -> pdo );
$returnedId = $backend -> createCalendar ( 'principals/user2' , 'somerandomid' , []);
$object = " BEGIN:VCALENDAR \r \n BEGIN:VEVENT \r \n DTSTART;VALUE=DATE:20120101 \r \n END:VEVENT \r \n END:VCALENDAR \r \n " ;
$backend -> createCalendarObject ( $returnedId , 'id-1' , $object );
$backend -> createCalendarObject ( $returnedId , 'id-2' , $object );
$check = [
[
'id' => 1 ,
'etag' => '"' . md5 ( $object ) . '"' ,
'uri' => 'id-1' ,
'size' => strlen ( $object ),
'calendardata' => $object ,
'lastmodified' => null ,
],
[
'id' => 2 ,
'etag' => '"' . md5 ( $object ) . '"' ,
'uri' => 'id-2' ,
'size' => strlen ( $object ),
'calendardata' => $object ,
'lastmodified' => null ,
],
];
$result = $backend -> getMultipleCalendarObjects ( $returnedId , [ 'id-1' , 'id-2' ]);
foreach ( $check as $index => $props ) {
2016-05-28 15:46:24 +00:00
foreach ( $props as $key => $expected ) {
$actual = $result [ $index ][ $key ];
switch ( $key ) {
case 'lastmodified' :
$this -> assertInternalType ( 'int' , $actual );
break ;
case 'calendardata' :
if ( is_resource ( $actual )) {
$actual = stream_get_contents ( $actual );
}
// no break intentional
default :
$this -> assertEquals ( $expected , $actual );
2016-05-11 00:26:44 +00:00
}
}
}
2013-10-21 22:46:31 +00:00
}
2016-05-28 15:46:24 +00:00
/**
* @ depends testGetMultipleObjects
* @ expectedException \InvalidArgumentException
*/
function testGetMultipleObjectsBadId () {
$backend = new PDO ( $this -> pdo );
$backend -> getMultipleCalendarObjects ( 'bad-id' , [ 'foo-bar' ]);
}
2013-10-21 22:46:31 +00:00
/**
* @ expectedException Sabre\DAV\Exception\BadRequest
* @ depends testCreateCalendarObject
*/
function testCreateCalendarObjectNoComponent () {
$backend = new PDO ( $this -> pdo );
2016-05-11 00:26:44 +00:00
$returnedId = $backend -> createCalendar ( 'principals/user2' , 'somerandomid' , []);
2013-10-21 22:46:31 +00:00
$object = " BEGIN:VCALENDAR \r \n BEGIN:VTIMEZONE \r \n END:VTIMEZONE \r \n END:VCALENDAR \r \n " ;
$backend -> createCalendarObject ( $returnedId , 'random-id' , $object );
}
/**
* @ depends testCreateCalendarObject
*/
function testCreateCalendarObjectDuration () {
$backend = new PDO ( $this -> pdo );
2016-05-11 00:26:44 +00:00
$returnedId = $backend -> createCalendar ( 'principals/user2' , 'somerandomid' , []);
2013-10-21 22:46:31 +00:00
$object = " BEGIN:VCALENDAR \r \n BEGIN:VEVENT \r \n DTSTART;VALUE=DATE:20120101 \r \n DURATION:P2D \r \n END:VEVENT \r \n END:VCALENDAR \r \n " ;
$backend -> createCalendarObject ( $returnedId , 'random-id' , $object );
2016-05-28 15:46:24 +00:00
$result = $this -> pdo -> query ( 'SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = \'random-id\'' );
$row = $result -> fetch ( \PDO :: FETCH_ASSOC );
if ( is_resource ( $row [ 'calendardata' ])) {
$row [ 'calendardata' ] = stream_get_contents ( $row [ 'calendardata' ]);
}
2016-05-11 00:26:44 +00:00
$this -> assertEquals ([
'etag' => md5 ( $object ),
'size' => strlen ( $object ),
'calendardata' => $object ,
2013-10-21 22:46:31 +00:00
'firstoccurence' => strtotime ( '20120101' ),
2016-05-11 00:26:44 +00:00
'lastoccurence' => strtotime ( '20120101' ) + ( 3600 * 48 ),
'componenttype' => 'VEVENT' ,
2016-05-28 15:46:24 +00:00
], $row );
}
/**
* @ depends testCreateCalendarObject
* @ expectedException \InvalidArgumentException
*/
function testCreateCalendarObjectBadId () {
$backend = new PDO ( $this -> pdo );
$returnedId = $backend -> createCalendar ( 'principals/user2' , 'somerandomid' , []);
$object = " BEGIN:VCALENDAR \r \n BEGIN:VEVENT \r \n DTSTART;VALUE=DATE:20120101 \r \n DURATION:P2D \r \n END:VEVENT \r \n END:VCALENDAR \r \n " ;
$backend -> createCalendarObject ( 'bad-id' , 'random-id' , $object );
2013-10-21 22:46:31 +00:00
}
2016-05-28 15:46:24 +00:00
2013-10-21 22:46:31 +00:00
/**
* @ depends testCreateCalendarObject
*/
function testCreateCalendarObjectNoDTEND () {
$backend = new PDO ( $this -> pdo );
2016-05-11 00:26:44 +00:00
$returnedId = $backend -> createCalendar ( 'principals/user2' , 'somerandomid' , []);
2013-10-21 22:46:31 +00:00
$object = " BEGIN:VCALENDAR \r \n BEGIN:VEVENT \r \n DTSTART;VALUE=DATE-TIME:20120101T100000Z \r \n END:VEVENT \r \n END:VCALENDAR \r \n " ;
$backend -> createCalendarObject ( $returnedId , 'random-id' , $object );
2016-05-28 15:46:24 +00:00
$result = $this -> pdo -> query ( 'SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = \'random-id\'' );
$row = $result -> fetch ( \PDO :: FETCH_ASSOC );
if ( is_resource ( $row [ 'calendardata' ])) {
$row [ 'calendardata' ] = stream_get_contents ( $row [ 'calendardata' ]);
}
2016-05-11 00:26:44 +00:00
$this -> assertEquals ([
'etag' => md5 ( $object ),
'size' => strlen ( $object ),
'calendardata' => $object ,
2013-10-21 22:46:31 +00:00
'firstoccurence' => strtotime ( '2012-01-01 10:00:00' ),
2016-05-11 00:26:44 +00:00
'lastoccurence' => strtotime ( '2012-01-01 10:00:00' ),
'componenttype' => 'VEVENT' ,
2016-05-28 15:46:24 +00:00
], $row );
2016-05-11 00:26:44 +00:00
}
/**
* @ depends testCreateCalendarObject
*/
function testCreateCalendarObjectWithDTEND () {
$backend = new PDO ( $this -> pdo );
$returnedId = $backend -> createCalendar ( 'principals/user2' , 'somerandomid' , []);
$object = " BEGIN:VCALENDAR \r \n BEGIN:VEVENT \r \n DTSTART;VALUE=DATE-TIME:20120101T100000Z \r \n DTEND:20120101T110000Z \r \n END:VEVENT \r \n END:VCALENDAR \r \n " ;
$backend -> createCalendarObject ( $returnedId , 'random-id' , $object );
2016-05-28 15:46:24 +00:00
$result = $this -> pdo -> query ( 'SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = \'random-id\'' );
$row = $result -> fetch ( \PDO :: FETCH_ASSOC );
if ( is_resource ( $row [ 'calendardata' ])) {
$row [ 'calendardata' ] = stream_get_contents ( $row [ 'calendardata' ]);
}
2016-05-11 00:26:44 +00:00
$this -> assertEquals ([
'etag' => md5 ( $object ),
'size' => strlen ( $object ),
'calendardata' => $object ,
'firstoccurence' => strtotime ( '2012-01-01 10:00:00' ),
'lastoccurence' => strtotime ( '2012-01-01 11:00:00' ),
'componenttype' => 'VEVENT' ,
2016-05-28 15:46:24 +00:00
], $row );
2013-10-21 22:46:31 +00:00
}
/**
* @ depends testCreateCalendarObject
*/
function testCreateCalendarObjectInfiniteReccurence () {
$backend = new PDO ( $this -> pdo );
2016-05-11 00:26:44 +00:00
$returnedId = $backend -> createCalendar ( 'principals/user2' , 'somerandomid' , []);
2013-10-21 22:46:31 +00:00
2016-05-11 00:26:44 +00:00
$object = " BEGIN:VCALENDAR \r \n BEGIN:VEVENT \r \n DTSTART;VALUE=DATE-TIME:20120101T100000Z \r \n RRULE:FREQ=DAILY \r \n UID:foo \r \n END:VEVENT \r \n END:VCALENDAR \r \n " ;
2013-10-21 22:46:31 +00:00
$backend -> createCalendarObject ( $returnedId , 'random-id' , $object );
2016-05-28 15:46:24 +00:00
$result = $this -> pdo -> query ( 'SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = \'random-id\'' );
$row = $result -> fetch ( \PDO :: FETCH_ASSOC );
if ( is_resource ( $row [ 'calendardata' ])) {
$row [ 'calendardata' ] = stream_get_contents ( $row [ 'calendardata' ]);
}
2016-05-11 00:26:44 +00:00
$this -> assertEquals ([
'etag' => md5 ( $object ),
'size' => strlen ( $object ),
'calendardata' => $object ,
2013-10-21 22:46:31 +00:00
'firstoccurence' => strtotime ( '2012-01-01 10:00:00' ),
2016-05-11 00:26:44 +00:00
'lastoccurence' => strtotime ( PDO :: MAX_DATE ),
'componenttype' => 'VEVENT' ,
2016-05-28 15:46:24 +00:00
], $row );
2013-10-21 22:46:31 +00:00
}
/**
* @ depends testCreateCalendarObject
*/
function testCreateCalendarObjectEndingReccurence () {
$backend = new PDO ( $this -> pdo );
2016-05-11 00:26:44 +00:00
$returnedId = $backend -> createCalendar ( 'principals/user2' , 'somerandomid' , []);
2013-10-21 22:46:31 +00:00
2016-05-11 00:26:44 +00:00
$object = " BEGIN:VCALENDAR \r \n BEGIN:VEVENT \r \n DTSTART;VALUE=DATE-TIME:20120101T100000Z \r \n DTEND;VALUE=DATE-TIME:20120101T110000Z \r \n UID:foo \r \n RRULE:FREQ=DAILY;COUNT=1000 \r \n END:VEVENT \r \n END:VCALENDAR \r \n " ;
2013-10-21 22:46:31 +00:00
$backend -> createCalendarObject ( $returnedId , 'random-id' , $object );
2016-05-28 15:46:24 +00:00
$result = $this -> pdo -> query ( 'SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = \'random-id\'' );
$row = $result -> fetch ( \PDO :: FETCH_ASSOC );
if ( is_resource ( $row [ 'calendardata' ])) {
$row [ 'calendardata' ] = stream_get_contents ( $row [ 'calendardata' ]);
}
2016-05-11 00:26:44 +00:00
$this -> assertEquals ([
'etag' => md5 ( $object ),
'size' => strlen ( $object ),
'calendardata' => $object ,
2013-10-21 22:46:31 +00:00
'firstoccurence' => strtotime ( '2012-01-01 10:00:00' ),
2016-05-11 00:26:44 +00:00
'lastoccurence' => strtotime ( '2012-01-01 11:00:00' ) + ( 3600 * 24 * 999 ),
'componenttype' => 'VEVENT' ,
2016-05-28 15:46:24 +00:00
], $row );
2013-10-21 22:46:31 +00:00
}
/**
* @ depends testCreateCalendarObject
*/
function testCreateCalendarObjectTask () {
$backend = new PDO ( $this -> pdo );
2016-05-11 00:26:44 +00:00
$returnedId = $backend -> createCalendar ( 'principals/user2' , 'somerandomid' , []);
2013-10-21 22:46:31 +00:00
$object = " BEGIN:VCALENDAR \r \n BEGIN:VTODO \r \n DUE;VALUE=DATE-TIME:20120101T100000Z \r \n END:VTODO \r \n END:VCALENDAR \r \n " ;
$backend -> createCalendarObject ( $returnedId , 'random-id' , $object );
2016-05-28 15:46:24 +00:00
$result = $this -> pdo -> query ( 'SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = \'random-id\'' );
$row = $result -> fetch ( \PDO :: FETCH_ASSOC );
if ( is_resource ( $row [ 'calendardata' ])) {
$row [ 'calendardata' ] = stream_get_contents ( $row [ 'calendardata' ]);
}
2016-05-11 00:26:44 +00:00
$this -> assertEquals ([
'etag' => md5 ( $object ),
'size' => strlen ( $object ),
'calendardata' => $object ,
2013-10-21 22:46:31 +00:00
'firstoccurence' => null ,
2016-05-11 00:26:44 +00:00
'lastoccurence' => null ,
'componenttype' => 'VTODO' ,
2016-05-28 15:46:24 +00:00
], $row );
2013-10-21 22:46:31 +00:00
}
/**
* @ depends testCreateCalendarObject
*/
function testGetCalendarObjects () {
$backend = new PDO ( $this -> pdo );
2016-05-11 00:26:44 +00:00
$returnedId = $backend -> createCalendar ( 'principals/user2' , 'somerandomid' , []);
2013-10-21 22:46:31 +00:00
$object = " BEGIN:VCALENDAR \r \n BEGIN:VEVENT \r \n DTSTART;VALUE=DATE:20120101 \r \n END:VEVENT \r \n END:VCALENDAR \r \n " ;
$backend -> createCalendarObject ( $returnedId , 'random-id' , $object );
2016-05-28 15:46:24 +00:00
$data = $backend -> getCalendarObjects ( $returnedId );
2013-10-21 22:46:31 +00:00
$this -> assertEquals ( 1 , count ( $data ));
$data = $data [ 0 ];
$this -> assertEquals ( 'random-id' , $data [ 'uri' ]);
2016-05-11 00:26:44 +00:00
$this -> assertEquals ( strlen ( $object ), $data [ 'size' ]);
2013-10-21 22:46:31 +00:00
2016-05-28 15:46:24 +00:00
}
/**
* @ depends testGetCalendarObjects
* @ expectedException \InvalidArgumentException
*/
function testGetCalendarObjectsBadId () {
$backend = new PDO ( $this -> pdo );
$backend -> getCalendarObjects ( 'bad-id' );
2013-10-21 22:46:31 +00:00
2016-05-11 00:26:44 +00:00
}
2016-05-28 15:46:24 +00:00
/**
* @ depends testGetCalendarObjects
* @ expectedException \InvalidArgumentException
*/
function testGetCalendarObjectBadId () {
$backend = new PDO ( $this -> pdo );
$backend -> getCalendarObject ( 'bad-id' , 'foo-bar' );
}
2016-05-11 00:26:44 +00:00
/**
* @ depends testCreateCalendarObject
*/
function testGetCalendarObjectByUID () {
$backend = new PDO ( $this -> pdo );
$returnedId = $backend -> createCalendar ( 'principals/user2' , 'somerandomid' , []);
$object = " BEGIN:VCALENDAR \r \n BEGIN:VEVENT \r \n UID:foo \r \n DTSTART;VALUE=DATE:20120101 \r \n END:VEVENT \r \n END:VCALENDAR \r \n " ;
$backend -> createCalendarObject ( $returnedId , 'random-id' , $object );
$this -> assertNull (
$backend -> getCalendarObjectByUID ( 'principals/user2' , 'bar' )
);
$this -> assertEquals (
'somerandomid/random-id' ,
$backend -> getCalendarObjectByUID ( 'principals/user2' , 'foo' )
);
2013-10-21 22:46:31 +00:00
}
/**
* @ depends testCreateCalendarObject
*/
function testUpdateCalendarObject () {
$backend = new PDO ( $this -> pdo );
2016-05-11 00:26:44 +00:00
$returnedId = $backend -> createCalendar ( 'principals/user2' , 'somerandomid' , []);
2013-10-21 22:46:31 +00:00
$object = " BEGIN:VCALENDAR \r \n BEGIN:VEVENT \r \n DTSTART;VALUE=DATE:20120101 \r \n END:VEVENT \r \n END:VCALENDAR \r \n " ;
$object2 = " BEGIN:VCALENDAR \r \n BEGIN:VEVENT \r \n DTSTART;VALUE=DATE:20130101 \r \n END:VEVENT \r \n END:VCALENDAR \r \n " ;
$backend -> createCalendarObject ( $returnedId , 'random-id' , $object );
$backend -> updateCalendarObject ( $returnedId , 'random-id' , $object2 );
2016-05-11 00:26:44 +00:00
$data = $backend -> getCalendarObject ( $returnedId , 'random-id' );
2013-10-21 22:46:31 +00:00
2016-05-28 15:46:24 +00:00
if ( is_resource ( $data [ 'calendardata' ])) {
$data [ 'calendardata' ] = stream_get_contents ( $data [ 'calendardata' ]);
}
2013-10-21 22:46:31 +00:00
$this -> assertEquals ( $object2 , $data [ 'calendardata' ]);
$this -> assertEquals ( 'random-id' , $data [ 'uri' ]);
}
2016-05-28 15:46:24 +00:00
/**
* @ depends testUpdateCalendarObject
* @ expectedException \InvalidArgumentException
*/
function testUpdateCalendarObjectBadId () {
$backend = new PDO ( $this -> pdo );
$backend -> updateCalendarObject ( 'bad-id' , 'object-id' , 'objectdata' );
}
2013-10-21 22:46:31 +00:00
/**
* @ depends testCreateCalendarObject
*/
function testDeleteCalendarObject () {
$backend = new PDO ( $this -> pdo );
2016-05-11 00:26:44 +00:00
$returnedId = $backend -> createCalendar ( 'principals/user2' , 'somerandomid' , []);
2013-10-21 22:46:31 +00:00
$object = " BEGIN:VCALENDAR \r \n BEGIN:VEVENT \r \n DTSTART;VALUE=DATE:20120101 \r \n END:VEVENT \r \n END:VCALENDAR \r \n " ;
$backend -> createCalendarObject ( $returnedId , 'random-id' , $object );
$backend -> deleteCalendarObject ( $returnedId , 'random-id' );
2016-05-11 00:26:44 +00:00
$data = $backend -> getCalendarObject ( $returnedId , 'random-id' );
2013-10-21 22:46:31 +00:00
$this -> assertNull ( $data );
}
2016-05-28 15:46:24 +00:00
/**
* @ depends testDeleteCalendarObject
* @ expectedException \InvalidArgumentException
*/
function testDeleteCalendarObjectBadId () {
$backend = new PDO ( $this -> pdo );
$returnedId = $backend -> createCalendar ( 'principals/user2' , 'somerandomid' , []);
$object = " BEGIN:VCALENDAR \r \n BEGIN:VEVENT \r \n DTSTART;VALUE=DATE:20120101 \r \n END:VEVENT \r \n END:VCALENDAR \r \n " ;
$backend -> createCalendarObject ( $returnedId , 'random-id' , $object );
$backend -> deleteCalendarObject ( 'bad-id' , 'random-id' );
}
2013-10-21 22:46:31 +00:00
function testCalendarQueryNoResult () {
$abstract = new PDO ( $this -> pdo );
2016-05-11 00:26:44 +00:00
$filters = [
'name' => 'VCALENDAR' ,
'comp-filters' => [
[
'name' => 'VJOURNAL' ,
'comp-filters' => [],
'prop-filters' => [],
2013-10-21 22:46:31 +00:00
'is-not-defined' => false ,
2016-05-11 00:26:44 +00:00
'time-range' => null ,
],
],
'prop-filters' => [],
2013-10-21 22:46:31 +00:00
'is-not-defined' => false ,
2016-05-11 00:26:44 +00:00
'time-range' => null ,
];
2013-10-21 22:46:31 +00:00
2016-05-11 00:26:44 +00:00
$this -> assertEquals ([
2016-05-28 15:46:24 +00:00
], $abstract -> calendarQuery ([ 1 , 1 ], $filters ));
}
/**
* @ expectedException \InvalidArgumentException
* @ depends testCalendarQueryNoResult
*/
function testCalendarQueryBadId () {
$abstract = new PDO ( $this -> pdo );
$filters = [
'name' => 'VCALENDAR' ,
'comp-filters' => [
[
'name' => 'VJOURNAL' ,
'comp-filters' => [],
'prop-filters' => [],
'is-not-defined' => false ,
'time-range' => null ,
],
],
'prop-filters' => [],
'is-not-defined' => false ,
'time-range' => null ,
];
$abstract -> calendarQuery ( 'bad-id' , $filters );
2013-10-21 22:46:31 +00:00
}
function testCalendarQueryTodo () {
$backend = new PDO ( $this -> pdo );
2016-05-28 15:46:24 +00:00
$backend -> createCalendarObject ([ 1 , 1 ], " todo " , " BEGIN:VCALENDAR \r \n BEGIN:VTODO \r \n END:VTODO \r \n END:VCALENDAR \r \n " );
$backend -> createCalendarObject ([ 1 , 1 ], " event " , " BEGIN:VCALENDAR \r \n BEGIN:VEVENT \r \n DTSTART:20120101 \r \n END:VEVENT \r \n END:VCALENDAR \r \n " );
2013-10-21 22:46:31 +00:00
2016-05-11 00:26:44 +00:00
$filters = [
'name' => 'VCALENDAR' ,
'comp-filters' => [
[
'name' => 'VTODO' ,
'comp-filters' => [],
'prop-filters' => [],
2013-10-21 22:46:31 +00:00
'is-not-defined' => false ,
2016-05-11 00:26:44 +00:00
'time-range' => null ,
],
],
'prop-filters' => [],
2013-10-21 22:46:31 +00:00
'is-not-defined' => false ,
2016-05-11 00:26:44 +00:00
'time-range' => null ,
];
2013-10-21 22:46:31 +00:00
2016-05-11 00:26:44 +00:00
$this -> assertEquals ([
2013-10-21 22:46:31 +00:00
" todo " ,
2016-05-28 15:46:24 +00:00
], $backend -> calendarQuery ([ 1 , 1 ], $filters ));
2013-10-21 22:46:31 +00:00
}
function testCalendarQueryTodoNotMatch () {
$backend = new PDO ( $this -> pdo );
2016-05-28 15:46:24 +00:00
$backend -> createCalendarObject ([ 1 , 1 ], " todo " , " BEGIN:VCALENDAR \r \n BEGIN:VTODO \r \n END:VTODO \r \n END:VCALENDAR \r \n " );
$backend -> createCalendarObject ([ 1 , 1 ], " event " , " BEGIN:VCALENDAR \r \n BEGIN:VEVENT \r \n DTSTART:20120101 \r \n END:VEVENT \r \n END:VCALENDAR \r \n " );
2013-10-21 22:46:31 +00:00
2016-05-11 00:26:44 +00:00
$filters = [
'name' => 'VCALENDAR' ,
'comp-filters' => [
[
'name' => 'VTODO' ,
'comp-filters' => [],
'prop-filters' => [
[
'name' => 'summary' ,
'text-match' => null ,
'time-range' => null ,
'param-filters' => [],
2013-10-21 22:46:31 +00:00
'is-not-defined' => false ,
2016-05-11 00:26:44 +00:00
],
],
2013-10-21 22:46:31 +00:00
'is-not-defined' => false ,
2016-05-11 00:26:44 +00:00
'time-range' => null ,
],
],
'prop-filters' => [],
2013-10-21 22:46:31 +00:00
'is-not-defined' => false ,
2016-05-11 00:26:44 +00:00
'time-range' => null ,
];
2013-10-21 22:46:31 +00:00
2016-05-11 00:26:44 +00:00
$this -> assertEquals ([
2016-05-28 15:46:24 +00:00
], $backend -> calendarQuery ([ 1 , 1 ], $filters ));
2013-10-21 22:46:31 +00:00
}
function testCalendarQueryNoFilter () {
$backend = new PDO ( $this -> pdo );
2016-05-28 15:46:24 +00:00
$backend -> createCalendarObject ([ 1 , 1 ], " todo " , " BEGIN:VCALENDAR \r \n BEGIN:VTODO \r \n END:VTODO \r \n END:VCALENDAR \r \n " );
$backend -> createCalendarObject ([ 1 , 1 ], " event " , " BEGIN:VCALENDAR \r \n BEGIN:VEVENT \r \n DTSTART:20120101 \r \n END:VEVENT \r \n END:VCALENDAR \r \n " );
2013-10-21 22:46:31 +00:00
2016-05-11 00:26:44 +00:00
$filters = [
'name' => 'VCALENDAR' ,
'comp-filters' => [],
'prop-filters' => [],
2013-10-21 22:46:31 +00:00
'is-not-defined' => false ,
2016-05-11 00:26:44 +00:00
'time-range' => null ,
];
2013-10-21 22:46:31 +00:00
2016-05-28 15:46:24 +00:00
$result = $backend -> calendarQuery ([ 1 , 1 ], $filters );
2013-10-21 22:46:31 +00:00
$this -> assertTrue ( in_array ( 'todo' , $result ));
$this -> assertTrue ( in_array ( 'event' , $result ));
}
function testCalendarQueryTimeRange () {
$backend = new PDO ( $this -> pdo );
2016-05-28 15:46:24 +00:00
$backend -> createCalendarObject ([ 1 , 1 ], " todo " , " BEGIN:VCALENDAR \r \n BEGIN:VTODO \r \n END:VTODO \r \n END:VCALENDAR \r \n " );
$backend -> createCalendarObject ([ 1 , 1 ], " event " , " BEGIN:VCALENDAR \r \n BEGIN:VEVENT \r \n DTSTART;VALUE=DATE:20120101 \r \n END:VEVENT \r \n END:VCALENDAR \r \n " );
$backend -> createCalendarObject ([ 1 , 1 ], " event2 " , " BEGIN:VCALENDAR \r \n BEGIN:VEVENT \r \n DTSTART;VALUE=DATE:20120103 \r \n END:VEVENT \r \n END:VCALENDAR \r \n " );
2013-10-21 22:46:31 +00:00
2016-05-11 00:26:44 +00:00
$filters = [
'name' => 'VCALENDAR' ,
'comp-filters' => [
[
'name' => 'VEVENT' ,
'comp-filters' => [],
'prop-filters' => [],
2013-10-21 22:46:31 +00:00
'is-not-defined' => false ,
2016-05-11 00:26:44 +00:00
'time-range' => [
2013-10-21 22:46:31 +00:00
'start' => new \DateTime ( '20120103' ),
'end' => new \DateTime ( '20120104' ),
2016-05-11 00:26:44 +00:00
],
],
],
'prop-filters' => [],
2013-10-21 22:46:31 +00:00
'is-not-defined' => false ,
2016-05-11 00:26:44 +00:00
'time-range' => null ,
];
2013-10-21 22:46:31 +00:00
2016-05-11 00:26:44 +00:00
$this -> assertEquals ([
2013-10-21 22:46:31 +00:00
" event2 " ,
2016-05-28 15:46:24 +00:00
], $backend -> calendarQuery ([ 1 , 1 ], $filters ));
2013-10-21 22:46:31 +00:00
}
function testCalendarQueryTimeRangeNoEnd () {
$backend = new PDO ( $this -> pdo );
2016-05-28 15:46:24 +00:00
$backend -> createCalendarObject ([ 1 , 1 ], " todo " , " BEGIN:VCALENDAR \r \n BEGIN:VTODO \r \n END:VTODO \r \n END:VCALENDAR \r \n " );
$backend -> createCalendarObject ([ 1 , 1 ], " event " , " BEGIN:VCALENDAR \r \n BEGIN:VEVENT \r \n DTSTART:20120101 \r \n END:VEVENT \r \n END:VCALENDAR \r \n " );
$backend -> createCalendarObject ([ 1 , 1 ], " event2 " , " BEGIN:VCALENDAR \r \n BEGIN:VEVENT \r \n DTSTART:20120103 \r \n END:VEVENT \r \n END:VCALENDAR \r \n " );
2013-10-21 22:46:31 +00:00
2016-05-11 00:26:44 +00:00
$filters = [
'name' => 'VCALENDAR' ,
'comp-filters' => [
[
'name' => 'VEVENT' ,
'comp-filters' => [],
'prop-filters' => [],
2013-10-21 22:46:31 +00:00
'is-not-defined' => false ,
2016-05-11 00:26:44 +00:00
'time-range' => [
2013-10-21 22:46:31 +00:00
'start' => new \DateTime ( '20120102' ),
2016-05-11 00:26:44 +00:00
'end' => null ,
],
],
],
'prop-filters' => [],
2013-10-21 22:46:31 +00:00
'is-not-defined' => false ,
2016-05-11 00:26:44 +00:00
'time-range' => null ,
];
2013-10-21 22:46:31 +00:00
2016-05-11 00:26:44 +00:00
$this -> assertEquals ([
2013-10-21 22:46:31 +00:00
" event2 " ,
2016-05-28 15:46:24 +00:00
], $backend -> calendarQuery ([ 1 , 1 ], $filters ));
2013-10-21 22:46:31 +00:00
}
2016-05-11 00:26:44 +00:00
function testGetChanges () {
$backend = new PDO ( $this -> pdo );
$id = $backend -> createCalendar (
'principals/user1' ,
'bla' ,
[]
);
$result = $backend -> getChangesForCalendar ( $id , null , 1 );
$this -> assertEquals ([
'syncToken' => 1 ,
'modified' => [],
'deleted' => [],
'added' => [],
], $result );
$currentToken = $result [ 'syncToken' ];
$dummyTodo = " BEGIN:VCALENDAR \r \n BEGIN:VTODO \r \n END:VTODO \r \n END:VCALENDAR \r \n " ;
$backend -> createCalendarObject ( $id , " todo1.ics " , $dummyTodo );
$backend -> createCalendarObject ( $id , " todo2.ics " , $dummyTodo );
$backend -> createCalendarObject ( $id , " todo3.ics " , $dummyTodo );
$backend -> updateCalendarObject ( $id , " todo1.ics " , $dummyTodo );
$backend -> deleteCalendarObject ( $id , " todo2.ics " );
$result = $backend -> getChangesForCalendar ( $id , $currentToken , 1 );
$this -> assertEquals ([
'syncToken' => 6 ,
'modified' => [ " todo1.ics " ],
'deleted' => [ " todo2.ics " ],
'added' => [ " todo3.ics " ],
], $result );
$result = $backend -> getChangesForCalendar ( $id , null , 1 );
$this -> assertEquals ([
'syncToken' => 6 ,
'modified' => [],
'deleted' => [],
'added' => [ " todo1.ics " , " todo3.ics " ],
], $result );
}
2016-05-28 15:46:24 +00:00
/**
* @ depends testGetChanges
* @ expectedException \InvalidArgumentException
*/
function testGetChangesBadId () {
$backend = new PDO ( $this -> pdo );
$id = $backend -> createCalendar (
'principals/user1' ,
'bla' ,
[]
);
$backend -> getChangesForCalendar ( 'bad-id' , null , 1 );
}
2016-05-11 00:26:44 +00:00
function testCreateSubscriptions () {
$props = [
'{http://calendarserver.org/ns/}source' => new \Sabre\DAV\Xml\Property\Href ( 'http://example.org/cal.ics' , false ),
'{DAV:}displayname' => 'cal' ,
'{http://apple.com/ns/ical/}refreshrate' => 'P1W' ,
'{http://apple.com/ns/ical/}calendar-color' => '#FF00FFFF' ,
'{http://calendarserver.org/ns/}subscribed-strip-todos' => true ,
//'{http://calendarserver.org/ns/}subscribed-strip-alarms' => true,
'{http://calendarserver.org/ns/}subscribed-strip-attachments' => true ,
];
$backend = new PDO ( $this -> pdo );
$backend -> createSubscription ( 'principals/user1' , 'sub1' , $props );
$subs = $backend -> getSubscriptionsForUser ( 'principals/user1' );
$expected = $props ;
$expected [ 'id' ] = 1 ;
$expected [ 'uri' ] = 'sub1' ;
$expected [ 'principaluri' ] = 'principals/user1' ;
unset ( $expected [ '{http://calendarserver.org/ns/}source' ]);
$expected [ 'source' ] = 'http://example.org/cal.ics' ;
$this -> assertEquals ( 1 , count ( $subs ));
foreach ( $expected as $k => $v ) {
$this -> assertEquals ( $subs [ 0 ][ $k ], $expected [ $k ]);
}
}
/**
* @ expectedException \Sabre\DAV\Exception\Forbidden
*/
function testCreateSubscriptionFail () {
$props = [
];
$backend = new PDO ( $this -> pdo );
$backend -> createSubscription ( 'principals/user1' , 'sub1' , $props );
}
function testUpdateSubscriptions () {
$props = [
'{http://calendarserver.org/ns/}source' => new \Sabre\DAV\Xml\Property\Href ( 'http://example.org/cal.ics' , false ),
'{DAV:}displayname' => 'cal' ,
'{http://apple.com/ns/ical/}refreshrate' => 'P1W' ,
'{http://apple.com/ns/ical/}calendar-color' => '#FF00FFFF' ,
'{http://calendarserver.org/ns/}subscribed-strip-todos' => true ,
//'{http://calendarserver.org/ns/}subscribed-strip-alarms' => true,
'{http://calendarserver.org/ns/}subscribed-strip-attachments' => true ,
];
$backend = new PDO ( $this -> pdo );
$backend -> createSubscription ( 'principals/user1' , 'sub1' , $props );
$newProps = [
'{DAV:}displayname' => 'new displayname' ,
'{http://calendarserver.org/ns/}source' => new \Sabre\DAV\Xml\Property\Href ( 'http://example.org/cal2.ics' , false ),
];
$propPatch = new DAV\PropPatch ( $newProps );
$backend -> updateSubscription ( 1 , $propPatch );
$result = $propPatch -> commit ();
$this -> assertTrue ( $result );
$subs = $backend -> getSubscriptionsForUser ( 'principals/user1' );
$expected = array_merge ( $props , $newProps );
$expected [ 'id' ] = 1 ;
$expected [ 'uri' ] = 'sub1' ;
$expected [ 'principaluri' ] = 'principals/user1' ;
unset ( $expected [ '{http://calendarserver.org/ns/}source' ]);
$expected [ 'source' ] = 'http://example.org/cal2.ics' ;
$this -> assertEquals ( 1 , count ( $subs ));
foreach ( $expected as $k => $v ) {
$this -> assertEquals ( $subs [ 0 ][ $k ], $expected [ $k ]);
}
}
function testUpdateSubscriptionsFail () {
$props = [
'{http://calendarserver.org/ns/}source' => new \Sabre\DAV\Xml\Property\Href ( 'http://example.org/cal.ics' , false ),
'{DAV:}displayname' => 'cal' ,
'{http://apple.com/ns/ical/}refreshrate' => 'P1W' ,
'{http://apple.com/ns/ical/}calendar-color' => '#FF00FFFF' ,
'{http://calendarserver.org/ns/}subscribed-strip-todos' => true ,
//'{http://calendarserver.org/ns/}subscribed-strip-alarms' => true,
'{http://calendarserver.org/ns/}subscribed-strip-attachments' => true ,
];
$backend = new PDO ( $this -> pdo );
$backend -> createSubscription ( 'principals/user1' , 'sub1' , $props );
$propPatch = new DAV\PropPatch ([
'{DAV:}displayname' => 'new displayname' ,
'{http://calendarserver.org/ns/}source' => new \Sabre\DAV\Xml\Property\Href ( 'http://example.org/cal2.ics' , false ),
'{DAV:}unknown' => 'foo' ,
]);
$backend -> updateSubscription ( 1 , $propPatch );
$propPatch -> commit ();
$this -> assertEquals ([
'{DAV:}unknown' => 403 ,
'{DAV:}displayname' => 424 ,
'{http://calendarserver.org/ns/}source' => 424 ,
], $propPatch -> getResult ());
}
function testDeleteSubscriptions () {
$props = [
'{http://calendarserver.org/ns/}source' => new \Sabre\DAV\Xml\Property\Href ( 'http://example.org/cal.ics' , false ),
'{DAV:}displayname' => 'cal' ,
'{http://apple.com/ns/ical/}refreshrate' => 'P1W' ,
'{http://apple.com/ns/ical/}calendar-color' => '#FF00FFFF' ,
'{http://calendarserver.org/ns/}subscribed-strip-todos' => true ,
//'{http://calendarserver.org/ns/}subscribed-strip-alarms' => true,
'{http://calendarserver.org/ns/}subscribed-strip-attachments' => true ,
];
$backend = new PDO ( $this -> pdo );
$backend -> createSubscription ( 'principals/user1' , 'sub1' , $props );
$newProps = [
'{DAV:}displayname' => 'new displayname' ,
'{http://calendarserver.org/ns/}source' => new \Sabre\DAV\Xml\Property\Href ( 'http://example.org/cal2.ics' , false ),
];
$backend -> deleteSubscription ( 1 );
$subs = $backend -> getSubscriptionsForUser ( 'principals/user1' );
$this -> assertEquals ( 0 , count ( $subs ));
}
function testSchedulingMethods () {
$backend = new PDO ( $this -> pdo );
$calData = " BEGIN:VCALENDAR \r \n END:VCALENDAR \r \n " ;
$backend -> createSchedulingObject (
'principals/user1' ,
'schedule1.ics' ,
$calData
);
$expected = [
'calendardata' => $calData ,
'uri' => 'schedule1.ics' ,
'etag' => '"' . md5 ( $calData ) . '"' ,
'size' => strlen ( $calData )
];
$result = $backend -> getSchedulingObject ( 'principals/user1' , 'schedule1.ics' );
foreach ( $expected as $k => $v ) {
$this -> assertArrayHasKey ( $k , $result );
2016-05-28 15:46:24 +00:00
if ( is_resource ( $result [ $k ])) {
$result [ $k ] = stream_get_contents ( $result [ $k ]);
}
2016-05-11 00:26:44 +00:00
$this -> assertEquals ( $v , $result [ $k ]);
}
$results = $backend -> getSchedulingObjects ( 'principals/user1' );
$this -> assertEquals ( 1 , count ( $results ));
$result = $results [ 0 ];
foreach ( $expected as $k => $v ) {
2016-05-28 15:46:24 +00:00
if ( is_resource ( $result [ $k ])) {
$result [ $k ] = stream_get_contents ( $result [ $k ]);
}
2016-05-11 00:26:44 +00:00
$this -> assertEquals ( $v , $result [ $k ]);
}
$backend -> deleteSchedulingObject ( 'principals/user1' , 'schedule1.ics' );
$result = $backend -> getSchedulingObject ( 'principals/user1' , 'schedule1.ics' );
$this -> assertNull ( $result );
}
2016-05-28 15:46:24 +00:00
function testGetInvites () {
$backend = new PDO ( $this -> pdo );
// creating a new calendar
$backend -> createCalendar ( 'principals/user1' , 'somerandomid' , []);
$calendar = $backend -> getCalendarsForUser ( 'principals/user1' )[ 0 ];
$result = $backend -> getInvites ( $calendar [ 'id' ]);
$expected = [
new Sharee ([
'href' => 'principals/user1' ,
'principal' => 'principals/user1' ,
'access' => \Sabre\DAV\Sharing\Plugin :: ACCESS_SHAREDOWNER ,
'inviteStatus' => \Sabre\DAV\Sharing\Plugin :: INVITE_ACCEPTED ,
])
];
$this -> assertEquals ( $expected , $result );
}
/**
* @ depends testGetInvites
* @ expectedException \InvalidArgumentException
*/
function testGetInvitesBadId () {
$backend = new PDO ( $this -> pdo );
// creating a new calendar
$backend -> createCalendar ( 'principals/user1' , 'somerandomid' , []);
$calendar = $backend -> getCalendarsForUser ( 'principals/user1' )[ 0 ];
$backend -> getInvites ( 'bad-id' );
}
/**
* @ depends testCreateCalendarAndFetch
*/
function testUpdateInvites () {
$backend = new PDO ( $this -> pdo );
// creating a new calendar
$backend -> createCalendar ( 'principals/user1' , 'somerandomid' , []);
$calendar = $backend -> getCalendarsForUser ( 'principals/user1' )[ 0 ];
$ownerSharee = new Sharee ([
'href' => 'principals/user1' ,
'principal' => 'principals/user1' ,
'access' => \Sabre\DAV\Sharing\Plugin :: ACCESS_SHAREDOWNER ,
'inviteStatus' => \Sabre\DAV\Sharing\Plugin :: INVITE_ACCEPTED ,
]);
// Add a new invite
$backend -> updateInvites (
$calendar [ 'id' ],
[
new Sharee ([
'href' => 'mailto:user@example.org' ,
'principal' => 'principals/user2' ,
'access' => \Sabre\DAV\Sharing\Plugin :: ACCESS_READ ,
'inviteStatus' => \Sabre\DAV\Sharing\Plugin :: INVITE_ACCEPTED ,
'properties' => [ '{DAV:}displayname' => 'User 2' ],
])
]
);
$result = $backend -> getInvites ( $calendar [ 'id' ]);
$expected = [
$ownerSharee ,
new Sharee ([
'href' => 'mailto:user@example.org' ,
'principal' => 'principals/user2' ,
'access' => \Sabre\DAV\Sharing\Plugin :: ACCESS_READ ,
'inviteStatus' => \Sabre\DAV\Sharing\Plugin :: INVITE_ACCEPTED ,
'properties' => [
'{DAV:}displayname' => 'User 2' ,
],
])
];
$this -> assertEquals ( $expected , $result );
// Checking calendar_instances too
$expectedCalendar = [
'id' => [ 1 , 2 ],
'principaluri' => 'principals/user2' ,
'{http://calendarserver.org/ns/}getctag' => 'http://sabre.io/ns/sync/1' ,
'{http://sabredav.org/ns}sync-token' => '1' ,
'share-access' => \Sabre\DAV\Sharing\Plugin :: ACCESS_READ ,
'read-only' => true ,
'share-resource-uri' => '/ns/share/1' ,
];
$calendars = $backend -> getCalendarsForUser ( 'principals/user2' );
foreach ( $expectedCalendar as $k => $v ) {
$this -> assertEquals (
$v ,
$calendars [ 0 ][ $k ],
" Key " . $k . " in calendars array did not have the expected value. "
);
}
// Updating an invite
$backend -> updateInvites (
$calendar [ 'id' ],
[
new Sharee ([
'href' => 'mailto:user@example.org' ,
'principal' => 'principals/user2' ,
'access' => \Sabre\DAV\Sharing\Plugin :: ACCESS_READWRITE ,
'inviteStatus' => \Sabre\DAV\Sharing\Plugin :: INVITE_ACCEPTED ,
])
]
);
$result = $backend -> getInvites ( $calendar [ 'id' ]);
$expected = [
$ownerSharee ,
new Sharee ([
'href' => 'mailto:user@example.org' ,
'principal' => 'principals/user2' ,
'access' => \Sabre\DAV\Sharing\Plugin :: ACCESS_READWRITE ,
'inviteStatus' => \Sabre\DAV\Sharing\Plugin :: INVITE_ACCEPTED ,
'properties' => [
'{DAV:}displayname' => 'User 2' ,
],
])
];
$this -> assertEquals ( $expected , $result );
// Removing an invite
$backend -> updateInvites (
$calendar [ 'id' ],
[
new Sharee ([
'href' => 'mailto:user@example.org' ,
'access' => \Sabre\DAV\Sharing\Plugin :: ACCESS_NOACCESS ,
])
]
);
$result = $backend -> getInvites ( $calendar [ 'id' ]);
$expected = [
$ownerSharee
];
$this -> assertEquals ( $expected , $result );
// Preventing the owner share from being removed
$backend -> updateInvites (
$calendar [ 'id' ],
[
new Sharee ([
'href' => 'principals/user2' ,
'access' => \Sabre\DAV\Sharing\Plugin :: ACCESS_NOACCESS ,
])
]
);
$result = $backend -> getInvites ( $calendar [ 'id' ]);
$expected = [
new Sharee ([
'href' => 'principals/user1' ,
'principal' => 'principals/user1' ,
'access' => \Sabre\DAV\Sharing\Plugin :: ACCESS_SHAREDOWNER ,
'inviteStatus' => \Sabre\DAV\Sharing\Plugin :: INVITE_ACCEPTED ,
]),
];
$this -> assertEquals ( $expected , $result );
}
/**
* @ depends testUpdateInvites
* @ expectedException \InvalidArgumentException
*/
function testUpdateInvitesBadId () {
$backend = new PDO ( $this -> pdo );
// Add a new invite
$backend -> updateInvites (
'bad-id' ,
[]
);
}
/**
* @ depends testUpdateInvites
*/
function testUpdateInvitesNoPrincipal () {
$backend = new PDO ( $this -> pdo );
// creating a new calendar
$backend -> createCalendar ( 'principals/user1' , 'somerandomid' , []);
$calendar = $backend -> getCalendarsForUser ( 'principals/user1' )[ 0 ];
$ownerSharee = new Sharee ([
'href' => 'principals/user1' ,
'principal' => 'principals/user1' ,
'access' => \Sabre\DAV\Sharing\Plugin :: ACCESS_SHAREDOWNER ,
'inviteStatus' => \Sabre\DAV\Sharing\Plugin :: INVITE_ACCEPTED ,
]);
// Add a new invite
$backend -> updateInvites (
$calendar [ 'id' ],
[
new Sharee ([
'href' => 'mailto:user@example.org' ,
'principal' => null ,
'access' => \Sabre\DAV\Sharing\Plugin :: ACCESS_READ ,
'inviteStatus' => \Sabre\DAV\Sharing\Plugin :: INVITE_ACCEPTED ,
'properties' => [ '{DAV:}displayname' => 'User 2' ],
])
]
);
$result = $backend -> getInvites ( $calendar [ 'id' ]);
$expected = [
$ownerSharee ,
new Sharee ([
'href' => 'mailto:user@example.org' ,
'principal' => null ,
'access' => \Sabre\DAV\Sharing\Plugin :: ACCESS_READ ,
'inviteStatus' => \Sabre\DAV\Sharing\Plugin :: INVITE_INVALID ,
'properties' => [
'{DAV:}displayname' => 'User 2' ,
],
])
];
$this -> assertEquals ( $expected , $result , null , 0.0 , 10 , true ); // Last argument is $canonicalize = true, which allows us to compare, ignoring the order, because it's different between MySQL and Sqlite.
}
/**
* @ depends testUpdateInvites
*/
function testDeleteSharedCalendar () {
$backend = new PDO ( $this -> pdo );
// creating a new calendar
$backend -> createCalendar ( 'principals/user1' , 'somerandomid' , []);
$calendar = $backend -> getCalendarsForUser ( 'principals/user1' )[ 0 ];
$ownerSharee = new Sharee ([
'href' => 'principals/user1' ,
'principal' => 'principals/user1' ,
'access' => \Sabre\DAV\Sharing\Plugin :: ACCESS_SHAREDOWNER ,
'inviteStatus' => \Sabre\DAV\Sharing\Plugin :: INVITE_ACCEPTED ,
]);
// Add a new invite
$backend -> updateInvites (
$calendar [ 'id' ],
[
new Sharee ([
'href' => 'mailto:user@example.org' ,
'principal' => 'principals/user2' ,
'access' => \Sabre\DAV\Sharing\Plugin :: ACCESS_READ ,
'inviteStatus' => \Sabre\DAV\Sharing\Plugin :: INVITE_ACCEPTED ,
'properties' => [ '{DAV:}displayname' => 'User 2' ],
])
]
);
$expectedCalendar = [
'id' => [ 1 , 2 ],
'principaluri' => 'principals/user2' ,
'{http://calendarserver.org/ns/}getctag' => 'http://sabre.io/ns/sync/1' ,
'{http://sabredav.org/ns}sync-token' => '1' ,
'share-access' => \Sabre\DAV\Sharing\Plugin :: ACCESS_READ ,
'read-only' => true ,
'share-resource-uri' => '/ns/share/1' ,
];
$calendars = $backend -> getCalendarsForUser ( 'principals/user2' );
foreach ( $expectedCalendar as $k => $v ) {
$this -> assertEquals (
$v ,
$calendars [ 0 ][ $k ],
" Key " . $k . " in calendars array did not have the expected value. "
);
}
// Removing the shared calendar.
$backend -> deleteCalendar ( $calendars [ 0 ][ 'id' ]);
$this -> assertEquals (
[],
$backend -> getCalendarsForUser ( 'principals/user2' )
);
$result = $backend -> getInvites ( $calendar [ 'id' ]);
$expected = [
new Sharee ([
'href' => 'principals/user1' ,
'principal' => 'principals/user1' ,
'access' => \Sabre\DAV\Sharing\Plugin :: ACCESS_SHAREDOWNER ,
'inviteStatus' => \Sabre\DAV\Sharing\Plugin :: INVITE_ACCEPTED ,
]),
];
$this -> assertEquals ( $expected , $result );
}
2013-10-21 22:46:31 +00:00
}