1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\CalDAV\Backend; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehleruse Sabre\CalDAV; 6*a1a3b679SAndreas Boehleruse Sabre\DAV; 7*a1a3b679SAndreas Boehleruse Sabre\DAV\PropPatch; 8*a1a3b679SAndreas Boehler 9*a1a3b679SAndreas Boehlerabstract class AbstractPDOTest extends \PHPUnit_Framework_TestCase { 10*a1a3b679SAndreas Boehler 11*a1a3b679SAndreas Boehler protected $pdo; 12*a1a3b679SAndreas Boehler 13*a1a3b679SAndreas Boehler function testConstruct() { 14*a1a3b679SAndreas Boehler 15*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 16*a1a3b679SAndreas Boehler $this->assertTrue($backend instanceof PDO); 17*a1a3b679SAndreas Boehler 18*a1a3b679SAndreas Boehler } 19*a1a3b679SAndreas Boehler 20*a1a3b679SAndreas Boehler /** 21*a1a3b679SAndreas Boehler * @depends testConstruct 22*a1a3b679SAndreas Boehler */ 23*a1a3b679SAndreas Boehler function testGetCalendarsForUserNoCalendars() { 24*a1a3b679SAndreas Boehler 25*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 26*a1a3b679SAndreas Boehler $calendars = $backend->getCalendarsForUser('principals/user2'); 27*a1a3b679SAndreas Boehler $this->assertEquals(array(),$calendars); 28*a1a3b679SAndreas Boehler 29*a1a3b679SAndreas Boehler } 30*a1a3b679SAndreas Boehler 31*a1a3b679SAndreas Boehler /** 32*a1a3b679SAndreas Boehler * @depends testConstruct 33*a1a3b679SAndreas Boehler */ 34*a1a3b679SAndreas Boehler function testCreateCalendarAndFetch() { 35*a1a3b679SAndreas Boehler 36*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 37*a1a3b679SAndreas Boehler $returnedId = $backend->createCalendar('principals/user2','somerandomid',array( 38*a1a3b679SAndreas Boehler '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => new CalDAV\Xml\Property\SupportedCalendarComponentSet(array('VEVENT')), 39*a1a3b679SAndreas Boehler '{DAV:}displayname' => 'Hello!', 40*a1a3b679SAndreas Boehler '{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp' => new CalDAV\Xml\Property\ScheduleCalendarTransp('transparent'), 41*a1a3b679SAndreas Boehler )); 42*a1a3b679SAndreas Boehler $calendars = $backend->getCalendarsForUser('principals/user2'); 43*a1a3b679SAndreas Boehler 44*a1a3b679SAndreas Boehler $elementCheck = array( 45*a1a3b679SAndreas Boehler 'id' => $returnedId, 46*a1a3b679SAndreas Boehler 'uri' => 'somerandomid', 47*a1a3b679SAndreas Boehler '{DAV:}displayname' => 'Hello!', 48*a1a3b679SAndreas Boehler '{urn:ietf:params:xml:ns:caldav}calendar-description' => '', 49*a1a3b679SAndreas Boehler '{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp' => new CalDAV\Xml\Property\ScheduleCalendarTransp('transparent'), 50*a1a3b679SAndreas Boehler ); 51*a1a3b679SAndreas Boehler 52*a1a3b679SAndreas Boehler $this->assertInternalType('array',$calendars); 53*a1a3b679SAndreas Boehler $this->assertEquals(1,count($calendars)); 54*a1a3b679SAndreas Boehler 55*a1a3b679SAndreas Boehler foreach($elementCheck as $name=>$value) { 56*a1a3b679SAndreas Boehler 57*a1a3b679SAndreas Boehler $this->assertArrayHasKey($name, $calendars[0]); 58*a1a3b679SAndreas Boehler $this->assertEquals($value,$calendars[0][$name]); 59*a1a3b679SAndreas Boehler 60*a1a3b679SAndreas Boehler } 61*a1a3b679SAndreas Boehler 62*a1a3b679SAndreas Boehler } 63*a1a3b679SAndreas Boehler 64*a1a3b679SAndreas Boehler /** 65*a1a3b679SAndreas Boehler * @depends testConstruct 66*a1a3b679SAndreas Boehler */ 67*a1a3b679SAndreas Boehler function testUpdateCalendarAndFetch() { 68*a1a3b679SAndreas Boehler 69*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 70*a1a3b679SAndreas Boehler 71*a1a3b679SAndreas Boehler //Creating a new calendar 72*a1a3b679SAndreas Boehler $newId = $backend->createCalendar('principals/user2','somerandomid',array()); 73*a1a3b679SAndreas Boehler 74*a1a3b679SAndreas Boehler $propPatch = new PropPatch([ 75*a1a3b679SAndreas Boehler '{DAV:}displayname' => 'myCalendar', 76*a1a3b679SAndreas Boehler '{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp' => new CalDAV\Xml\Property\ScheduleCalendarTransp('transparent'), 77*a1a3b679SAndreas Boehler ]); 78*a1a3b679SAndreas Boehler 79*a1a3b679SAndreas Boehler // Updating the calendar 80*a1a3b679SAndreas Boehler $backend->updateCalendar($newId, $propPatch); 81*a1a3b679SAndreas Boehler $result = $propPatch->commit(); 82*a1a3b679SAndreas Boehler 83*a1a3b679SAndreas Boehler // Verifying the result of the update 84*a1a3b679SAndreas Boehler $this->assertTrue($result); 85*a1a3b679SAndreas Boehler 86*a1a3b679SAndreas Boehler // Fetching all calendars from this user 87*a1a3b679SAndreas Boehler $calendars = $backend->getCalendarsForUser('principals/user2'); 88*a1a3b679SAndreas Boehler 89*a1a3b679SAndreas Boehler // Checking if all the information is still correct 90*a1a3b679SAndreas Boehler $elementCheck = array( 91*a1a3b679SAndreas Boehler 'id' => $newId, 92*a1a3b679SAndreas Boehler 'uri' => 'somerandomid', 93*a1a3b679SAndreas Boehler '{DAV:}displayname' => 'myCalendar', 94*a1a3b679SAndreas Boehler '{urn:ietf:params:xml:ns:caldav}calendar-description' => '', 95*a1a3b679SAndreas Boehler '{urn:ietf:params:xml:ns:caldav}calendar-timezone' => '', 96*a1a3b679SAndreas Boehler '{http://calendarserver.org/ns/}getctag' => 'http://sabre.io/ns/sync/2', 97*a1a3b679SAndreas Boehler '{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp' => new CalDAV\Xml\Property\ScheduleCalendarTransp('transparent'), 98*a1a3b679SAndreas Boehler ); 99*a1a3b679SAndreas Boehler 100*a1a3b679SAndreas Boehler $this->assertInternalType('array',$calendars); 101*a1a3b679SAndreas Boehler $this->assertEquals(1,count($calendars)); 102*a1a3b679SAndreas Boehler 103*a1a3b679SAndreas Boehler foreach($elementCheck as $name=>$value) { 104*a1a3b679SAndreas Boehler 105*a1a3b679SAndreas Boehler $this->assertArrayHasKey($name, $calendars[0]); 106*a1a3b679SAndreas Boehler $this->assertEquals($value,$calendars[0][$name]); 107*a1a3b679SAndreas Boehler 108*a1a3b679SAndreas Boehler } 109*a1a3b679SAndreas Boehler 110*a1a3b679SAndreas Boehler } 111*a1a3b679SAndreas Boehler 112*a1a3b679SAndreas Boehler /** 113*a1a3b679SAndreas Boehler * @depends testUpdateCalendarAndFetch 114*a1a3b679SAndreas Boehler */ 115*a1a3b679SAndreas Boehler function testUpdateCalendarUnknownProperty() { 116*a1a3b679SAndreas Boehler 117*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 118*a1a3b679SAndreas Boehler 119*a1a3b679SAndreas Boehler //Creating a new calendar 120*a1a3b679SAndreas Boehler $newId = $backend->createCalendar('principals/user2','somerandomid',array()); 121*a1a3b679SAndreas Boehler 122*a1a3b679SAndreas Boehler $propPatch = new PropPatch([ 123*a1a3b679SAndreas Boehler '{DAV:}displayname' => 'myCalendar', 124*a1a3b679SAndreas Boehler '{DAV:}yourmom' => 'wittycomment', 125*a1a3b679SAndreas Boehler ]); 126*a1a3b679SAndreas Boehler 127*a1a3b679SAndreas Boehler // Updating the calendar 128*a1a3b679SAndreas Boehler $backend->updateCalendar($newId, $propPatch); 129*a1a3b679SAndreas Boehler $propPatch->commit(); 130*a1a3b679SAndreas Boehler 131*a1a3b679SAndreas Boehler // Verifying the result of the update 132*a1a3b679SAndreas Boehler $this->assertEquals([ 133*a1a3b679SAndreas Boehler '{DAV:}yourmom' => 403, 134*a1a3b679SAndreas Boehler '{DAV:}displayname' => 424, 135*a1a3b679SAndreas Boehler ], $propPatch->getResult()); 136*a1a3b679SAndreas Boehler 137*a1a3b679SAndreas Boehler } 138*a1a3b679SAndreas Boehler 139*a1a3b679SAndreas Boehler /** 140*a1a3b679SAndreas Boehler * @depends testCreateCalendarAndFetch 141*a1a3b679SAndreas Boehler */ 142*a1a3b679SAndreas Boehler function testDeleteCalendar() { 143*a1a3b679SAndreas Boehler 144*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 145*a1a3b679SAndreas Boehler $returnedId = $backend->createCalendar('principals/user2','somerandomid',array( 146*a1a3b679SAndreas Boehler '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => new CalDAV\Xml\Property\SupportedCalendarComponentSet(array('VEVENT')), 147*a1a3b679SAndreas Boehler '{DAV:}displayname' => 'Hello!', 148*a1a3b679SAndreas Boehler )); 149*a1a3b679SAndreas Boehler 150*a1a3b679SAndreas Boehler $backend->deleteCalendar($returnedId); 151*a1a3b679SAndreas Boehler 152*a1a3b679SAndreas Boehler $calendars = $backend->getCalendarsForUser('principals/user2'); 153*a1a3b679SAndreas Boehler $this->assertEquals(array(),$calendars); 154*a1a3b679SAndreas Boehler 155*a1a3b679SAndreas Boehler } 156*a1a3b679SAndreas Boehler 157*a1a3b679SAndreas Boehler /** 158*a1a3b679SAndreas Boehler * @depends testCreateCalendarAndFetch 159*a1a3b679SAndreas Boehler * @expectedException \Sabre\DAV\Exception 160*a1a3b679SAndreas Boehler */ 161*a1a3b679SAndreas Boehler function testCreateCalendarIncorrectComponentSet() {; 162*a1a3b679SAndreas Boehler 163*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 164*a1a3b679SAndreas Boehler 165*a1a3b679SAndreas Boehler //Creating a new calendar 166*a1a3b679SAndreas Boehler $newId = $backend->createCalendar('principals/user2','somerandomid',array( 167*a1a3b679SAndreas Boehler '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => 'blabla', 168*a1a3b679SAndreas Boehler )); 169*a1a3b679SAndreas Boehler 170*a1a3b679SAndreas Boehler } 171*a1a3b679SAndreas Boehler 172*a1a3b679SAndreas Boehler function testCreateCalendarObject() { 173*a1a3b679SAndreas Boehler 174*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 175*a1a3b679SAndreas Boehler $returnedId = $backend->createCalendar('principals/user2','somerandomid',array()); 176*a1a3b679SAndreas Boehler 177*a1a3b679SAndreas Boehler $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; 178*a1a3b679SAndreas Boehler 179*a1a3b679SAndreas Boehler $backend->createCalendarObject($returnedId, 'random-id', $object); 180*a1a3b679SAndreas Boehler 181*a1a3b679SAndreas Boehler $result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = "random-id"'); 182*a1a3b679SAndreas Boehler $this->assertEquals(array( 183*a1a3b679SAndreas Boehler 'etag' => md5($object), 184*a1a3b679SAndreas Boehler 'size' => strlen($object), 185*a1a3b679SAndreas Boehler 'calendardata' => $object, 186*a1a3b679SAndreas Boehler 'firstoccurence' => strtotime('20120101'), 187*a1a3b679SAndreas Boehler 'lastoccurence' => strtotime('20120101')+(3600*24), 188*a1a3b679SAndreas Boehler 'componenttype' => 'VEVENT', 189*a1a3b679SAndreas Boehler ), $result->fetch(\PDO::FETCH_ASSOC)); 190*a1a3b679SAndreas Boehler 191*a1a3b679SAndreas Boehler } 192*a1a3b679SAndreas Boehler function testGetMultipleObjects() { 193*a1a3b679SAndreas Boehler 194*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 195*a1a3b679SAndreas Boehler $returnedId = $backend->createCalendar('principals/user2','somerandomid',array()); 196*a1a3b679SAndreas Boehler 197*a1a3b679SAndreas Boehler $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; 198*a1a3b679SAndreas Boehler 199*a1a3b679SAndreas Boehler $backend->createCalendarObject($returnedId, 'id-1', $object); 200*a1a3b679SAndreas Boehler $backend->createCalendarObject($returnedId, 'id-2', $object); 201*a1a3b679SAndreas Boehler 202*a1a3b679SAndreas Boehler $check = [ 203*a1a3b679SAndreas Boehler [ 204*a1a3b679SAndreas Boehler 'id' => 1, 205*a1a3b679SAndreas Boehler 'etag' => '"' . md5($object) . '"', 206*a1a3b679SAndreas Boehler 'uri' => 'id-1', 207*a1a3b679SAndreas Boehler 'size' => strlen($object), 208*a1a3b679SAndreas Boehler 'calendardata' => $object, 209*a1a3b679SAndreas Boehler 'lastmodified' => null, 210*a1a3b679SAndreas Boehler 'calendarid' => $returnedId, 211*a1a3b679SAndreas Boehler ], 212*a1a3b679SAndreas Boehler [ 213*a1a3b679SAndreas Boehler 'id' => 2, 214*a1a3b679SAndreas Boehler 'etag' => '"' . md5($object) . '"', 215*a1a3b679SAndreas Boehler 'uri' => 'id-2', 216*a1a3b679SAndreas Boehler 'size' => strlen($object), 217*a1a3b679SAndreas Boehler 'calendardata' => $object, 218*a1a3b679SAndreas Boehler 'lastmodified' => null, 219*a1a3b679SAndreas Boehler 'calendarid' => $returnedId, 220*a1a3b679SAndreas Boehler ], 221*a1a3b679SAndreas Boehler ]; 222*a1a3b679SAndreas Boehler 223*a1a3b679SAndreas Boehler $result = $backend->getMultipleCalendarObjects($returnedId, [ 'id-1', 'id-2' ]); 224*a1a3b679SAndreas Boehler 225*a1a3b679SAndreas Boehler foreach($check as $index => $props) { 226*a1a3b679SAndreas Boehler 227*a1a3b679SAndreas Boehler foreach($props as $key=>$value) { 228*a1a3b679SAndreas Boehler 229*a1a3b679SAndreas Boehler if ($key!=='lastmodified') { 230*a1a3b679SAndreas Boehler $this->assertEquals($value, $result[$index][$key]); 231*a1a3b679SAndreas Boehler } else { 232*a1a3b679SAndreas Boehler $this->assertTrue(isset($result[$index][$key])); 233*a1a3b679SAndreas Boehler } 234*a1a3b679SAndreas Boehler 235*a1a3b679SAndreas Boehler } 236*a1a3b679SAndreas Boehler 237*a1a3b679SAndreas Boehler } 238*a1a3b679SAndreas Boehler 239*a1a3b679SAndreas Boehler } 240*a1a3b679SAndreas Boehler 241*a1a3b679SAndreas Boehler /** 242*a1a3b679SAndreas Boehler * @expectedException Sabre\DAV\Exception\BadRequest 243*a1a3b679SAndreas Boehler * @depends testCreateCalendarObject 244*a1a3b679SAndreas Boehler */ 245*a1a3b679SAndreas Boehler function testCreateCalendarObjectNoComponent() { 246*a1a3b679SAndreas Boehler 247*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 248*a1a3b679SAndreas Boehler $returnedId = $backend->createCalendar('principals/user2','somerandomid',array()); 249*a1a3b679SAndreas Boehler 250*a1a3b679SAndreas Boehler $object = "BEGIN:VCALENDAR\r\nBEGIN:VTIMEZONE\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n"; 251*a1a3b679SAndreas Boehler 252*a1a3b679SAndreas Boehler $backend->createCalendarObject($returnedId, 'random-id', $object); 253*a1a3b679SAndreas Boehler 254*a1a3b679SAndreas Boehler } 255*a1a3b679SAndreas Boehler 256*a1a3b679SAndreas Boehler /** 257*a1a3b679SAndreas Boehler * @depends testCreateCalendarObject 258*a1a3b679SAndreas Boehler */ 259*a1a3b679SAndreas Boehler function testCreateCalendarObjectDuration() { 260*a1a3b679SAndreas Boehler 261*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 262*a1a3b679SAndreas Boehler $returnedId = $backend->createCalendar('principals/user2','somerandomid',array()); 263*a1a3b679SAndreas Boehler 264*a1a3b679SAndreas Boehler $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nDURATION:P2D\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; 265*a1a3b679SAndreas Boehler 266*a1a3b679SAndreas Boehler $backend->createCalendarObject($returnedId, 'random-id', $object); 267*a1a3b679SAndreas Boehler 268*a1a3b679SAndreas Boehler $result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = "random-id"'); 269*a1a3b679SAndreas Boehler $this->assertEquals(array( 270*a1a3b679SAndreas Boehler 'etag' => md5($object), 271*a1a3b679SAndreas Boehler 'size' => strlen($object), 272*a1a3b679SAndreas Boehler 'calendardata' => $object, 273*a1a3b679SAndreas Boehler 'firstoccurence' => strtotime('20120101'), 274*a1a3b679SAndreas Boehler 'lastoccurence' => strtotime('20120101')+(3600*48), 275*a1a3b679SAndreas Boehler 'componenttype' => 'VEVENT', 276*a1a3b679SAndreas Boehler ), $result->fetch(\PDO::FETCH_ASSOC)); 277*a1a3b679SAndreas Boehler 278*a1a3b679SAndreas Boehler } 279*a1a3b679SAndreas Boehler 280*a1a3b679SAndreas Boehler /** 281*a1a3b679SAndreas Boehler * @depends testCreateCalendarObject 282*a1a3b679SAndreas Boehler */ 283*a1a3b679SAndreas Boehler function testCreateCalendarObjectNoDTEND() { 284*a1a3b679SAndreas Boehler 285*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 286*a1a3b679SAndreas Boehler $returnedId = $backend->createCalendar('principals/user2','somerandomid',array()); 287*a1a3b679SAndreas Boehler 288*a1a3b679SAndreas Boehler $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE-TIME:20120101T100000Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; 289*a1a3b679SAndreas Boehler 290*a1a3b679SAndreas Boehler $backend->createCalendarObject($returnedId, 'random-id', $object); 291*a1a3b679SAndreas Boehler 292*a1a3b679SAndreas Boehler $result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = "random-id"'); 293*a1a3b679SAndreas Boehler $this->assertEquals(array( 294*a1a3b679SAndreas Boehler 'etag' => md5($object), 295*a1a3b679SAndreas Boehler 'size' => strlen($object), 296*a1a3b679SAndreas Boehler 'calendardata' => $object, 297*a1a3b679SAndreas Boehler 'firstoccurence' => strtotime('2012-01-01 10:00:00'), 298*a1a3b679SAndreas Boehler 'lastoccurence' => strtotime('2012-01-01 10:00:00'), 299*a1a3b679SAndreas Boehler 'componenttype' => 'VEVENT', 300*a1a3b679SAndreas Boehler ), $result->fetch(\PDO::FETCH_ASSOC)); 301*a1a3b679SAndreas Boehler 302*a1a3b679SAndreas Boehler } 303*a1a3b679SAndreas Boehler 304*a1a3b679SAndreas Boehler /** 305*a1a3b679SAndreas Boehler * @depends testCreateCalendarObject 306*a1a3b679SAndreas Boehler */ 307*a1a3b679SAndreas Boehler function testCreateCalendarObjectWithDTEND() { 308*a1a3b679SAndreas Boehler 309*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 310*a1a3b679SAndreas Boehler $returnedId = $backend->createCalendar('principals/user2','somerandomid',array()); 311*a1a3b679SAndreas Boehler 312*a1a3b679SAndreas Boehler $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE-TIME:20120101T100000Z\r\nDTEND:20120101T110000Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; 313*a1a3b679SAndreas Boehler 314*a1a3b679SAndreas Boehler $backend->createCalendarObject($returnedId, 'random-id', $object); 315*a1a3b679SAndreas Boehler 316*a1a3b679SAndreas Boehler $result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = "random-id"'); 317*a1a3b679SAndreas Boehler $this->assertEquals(array( 318*a1a3b679SAndreas Boehler 'etag' => md5($object), 319*a1a3b679SAndreas Boehler 'size' => strlen($object), 320*a1a3b679SAndreas Boehler 'calendardata' => $object, 321*a1a3b679SAndreas Boehler 'firstoccurence' => strtotime('2012-01-01 10:00:00'), 322*a1a3b679SAndreas Boehler 'lastoccurence' => strtotime('2012-01-01 11:00:00'), 323*a1a3b679SAndreas Boehler 'componenttype' => 'VEVENT', 324*a1a3b679SAndreas Boehler ), $result->fetch(\PDO::FETCH_ASSOC)); 325*a1a3b679SAndreas Boehler 326*a1a3b679SAndreas Boehler } 327*a1a3b679SAndreas Boehler 328*a1a3b679SAndreas Boehler /** 329*a1a3b679SAndreas Boehler * @depends testCreateCalendarObject 330*a1a3b679SAndreas Boehler */ 331*a1a3b679SAndreas Boehler function testCreateCalendarObjectInfiniteReccurence() { 332*a1a3b679SAndreas Boehler 333*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 334*a1a3b679SAndreas Boehler $returnedId = $backend->createCalendar('principals/user2','somerandomid',array()); 335*a1a3b679SAndreas Boehler 336*a1a3b679SAndreas Boehler $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE-TIME:20120101T100000Z\r\nRRULE:FREQ=DAILY\r\nUID:foo\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; 337*a1a3b679SAndreas Boehler 338*a1a3b679SAndreas Boehler $backend->createCalendarObject($returnedId, 'random-id', $object); 339*a1a3b679SAndreas Boehler 340*a1a3b679SAndreas Boehler $result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = "random-id"'); 341*a1a3b679SAndreas Boehler $this->assertEquals(array( 342*a1a3b679SAndreas Boehler 'etag' => md5($object), 343*a1a3b679SAndreas Boehler 'size' => strlen($object), 344*a1a3b679SAndreas Boehler 'calendardata' => $object, 345*a1a3b679SAndreas Boehler 'firstoccurence' => strtotime('2012-01-01 10:00:00'), 346*a1a3b679SAndreas Boehler 'lastoccurence' => strtotime(PDO::MAX_DATE), 347*a1a3b679SAndreas Boehler 'componenttype' => 'VEVENT', 348*a1a3b679SAndreas Boehler ), $result->fetch(\PDO::FETCH_ASSOC)); 349*a1a3b679SAndreas Boehler 350*a1a3b679SAndreas Boehler } 351*a1a3b679SAndreas Boehler 352*a1a3b679SAndreas Boehler /** 353*a1a3b679SAndreas Boehler * @depends testCreateCalendarObject 354*a1a3b679SAndreas Boehler */ 355*a1a3b679SAndreas Boehler function testCreateCalendarObjectEndingReccurence() { 356*a1a3b679SAndreas Boehler 357*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 358*a1a3b679SAndreas Boehler $returnedId = $backend->createCalendar('principals/user2','somerandomid',array()); 359*a1a3b679SAndreas Boehler 360*a1a3b679SAndreas Boehler $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE-TIME:20120101T100000Z\r\nDTEND;VALUE=DATE-TIME:20120101T110000Z\r\nUID:foo\r\nRRULE:FREQ=DAILY;COUNT=1000\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; 361*a1a3b679SAndreas Boehler 362*a1a3b679SAndreas Boehler $backend->createCalendarObject($returnedId, 'random-id', $object); 363*a1a3b679SAndreas Boehler 364*a1a3b679SAndreas Boehler $result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = "random-id"'); 365*a1a3b679SAndreas Boehler $this->assertEquals(array( 366*a1a3b679SAndreas Boehler 'etag' => md5($object), 367*a1a3b679SAndreas Boehler 'size' => strlen($object), 368*a1a3b679SAndreas Boehler 'calendardata' => $object, 369*a1a3b679SAndreas Boehler 'firstoccurence' => strtotime('2012-01-01 10:00:00'), 370*a1a3b679SAndreas Boehler 'lastoccurence' => strtotime('2012-01-01 11:00:00') + (3600 * 24 * 999), 371*a1a3b679SAndreas Boehler 'componenttype' => 'VEVENT', 372*a1a3b679SAndreas Boehler ), $result->fetch(\PDO::FETCH_ASSOC)); 373*a1a3b679SAndreas Boehler 374*a1a3b679SAndreas Boehler } 375*a1a3b679SAndreas Boehler 376*a1a3b679SAndreas Boehler /** 377*a1a3b679SAndreas Boehler * @depends testCreateCalendarObject 378*a1a3b679SAndreas Boehler */ 379*a1a3b679SAndreas Boehler function testCreateCalendarObjectTask() { 380*a1a3b679SAndreas Boehler 381*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 382*a1a3b679SAndreas Boehler $returnedId = $backend->createCalendar('principals/user2','somerandomid',array()); 383*a1a3b679SAndreas Boehler 384*a1a3b679SAndreas Boehler $object = "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nDUE;VALUE=DATE-TIME:20120101T100000Z\r\nEND:VTODO\r\nEND:VCALENDAR\r\n"; 385*a1a3b679SAndreas Boehler 386*a1a3b679SAndreas Boehler $backend->createCalendarObject($returnedId, 'random-id', $object); 387*a1a3b679SAndreas Boehler 388*a1a3b679SAndreas Boehler $result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = "random-id"'); 389*a1a3b679SAndreas Boehler $this->assertEquals(array( 390*a1a3b679SAndreas Boehler 'etag' => md5($object), 391*a1a3b679SAndreas Boehler 'size' => strlen($object), 392*a1a3b679SAndreas Boehler 'calendardata' => $object, 393*a1a3b679SAndreas Boehler 'firstoccurence' => null, 394*a1a3b679SAndreas Boehler 'lastoccurence' => null, 395*a1a3b679SAndreas Boehler 'componenttype' => 'VTODO', 396*a1a3b679SAndreas Boehler ), $result->fetch(\PDO::FETCH_ASSOC)); 397*a1a3b679SAndreas Boehler 398*a1a3b679SAndreas Boehler } 399*a1a3b679SAndreas Boehler 400*a1a3b679SAndreas Boehler /** 401*a1a3b679SAndreas Boehler * @depends testCreateCalendarObject 402*a1a3b679SAndreas Boehler */ 403*a1a3b679SAndreas Boehler function testGetCalendarObjects() { 404*a1a3b679SAndreas Boehler 405*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 406*a1a3b679SAndreas Boehler $returnedId = $backend->createCalendar('principals/user2','somerandomid',array()); 407*a1a3b679SAndreas Boehler 408*a1a3b679SAndreas Boehler $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; 409*a1a3b679SAndreas Boehler $backend->createCalendarObject($returnedId, 'random-id', $object); 410*a1a3b679SAndreas Boehler 411*a1a3b679SAndreas Boehler $data = $backend->getCalendarObjects($returnedId,'random-id'); 412*a1a3b679SAndreas Boehler 413*a1a3b679SAndreas Boehler $this->assertEquals(1, count($data)); 414*a1a3b679SAndreas Boehler $data = $data[0]; 415*a1a3b679SAndreas Boehler 416*a1a3b679SAndreas Boehler $this->assertEquals($returnedId, $data['calendarid']); 417*a1a3b679SAndreas Boehler $this->assertEquals('random-id', $data['uri']); 418*a1a3b679SAndreas Boehler $this->assertEquals(strlen($object),$data['size']); 419*a1a3b679SAndreas Boehler 420*a1a3b679SAndreas Boehler 421*a1a3b679SAndreas Boehler } 422*a1a3b679SAndreas Boehler /** 423*a1a3b679SAndreas Boehler * @depends testCreateCalendarObject 424*a1a3b679SAndreas Boehler */ 425*a1a3b679SAndreas Boehler function testGetCalendarObjectByUID() { 426*a1a3b679SAndreas Boehler 427*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 428*a1a3b679SAndreas Boehler $returnedId = $backend->createCalendar('principals/user2','somerandomid',[]); 429*a1a3b679SAndreas Boehler 430*a1a3b679SAndreas Boehler $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nUID:foo\r\nDTSTART;VALUE=DATE:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; 431*a1a3b679SAndreas Boehler $backend->createCalendarObject($returnedId, 'random-id', $object); 432*a1a3b679SAndreas Boehler 433*a1a3b679SAndreas Boehler $this->assertNull( 434*a1a3b679SAndreas Boehler $backend->getCalendarObjectByUID('principals/user2', 'bar') 435*a1a3b679SAndreas Boehler ); 436*a1a3b679SAndreas Boehler $this->assertEquals( 437*a1a3b679SAndreas Boehler 'somerandomid/random-id', 438*a1a3b679SAndreas Boehler $backend->getCalendarObjectByUID('principals/user2', 'foo') 439*a1a3b679SAndreas Boehler ); 440*a1a3b679SAndreas Boehler 441*a1a3b679SAndreas Boehler } 442*a1a3b679SAndreas Boehler 443*a1a3b679SAndreas Boehler /** 444*a1a3b679SAndreas Boehler * @depends testCreateCalendarObject 445*a1a3b679SAndreas Boehler */ 446*a1a3b679SAndreas Boehler function testUpdateCalendarObject() { 447*a1a3b679SAndreas Boehler 448*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 449*a1a3b679SAndreas Boehler $returnedId = $backend->createCalendar('principals/user2','somerandomid',array()); 450*a1a3b679SAndreas Boehler 451*a1a3b679SAndreas Boehler $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; 452*a1a3b679SAndreas Boehler $object2 = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20130101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; 453*a1a3b679SAndreas Boehler $backend->createCalendarObject($returnedId, 'random-id', $object); 454*a1a3b679SAndreas Boehler $backend->updateCalendarObject($returnedId, 'random-id', $object2); 455*a1a3b679SAndreas Boehler 456*a1a3b679SAndreas Boehler $data = $backend->getCalendarObject($returnedId,'random-id'); 457*a1a3b679SAndreas Boehler 458*a1a3b679SAndreas Boehler $this->assertEquals($object2, $data['calendardata']); 459*a1a3b679SAndreas Boehler $this->assertEquals($returnedId, $data['calendarid']); 460*a1a3b679SAndreas Boehler $this->assertEquals('random-id', $data['uri']); 461*a1a3b679SAndreas Boehler 462*a1a3b679SAndreas Boehler 463*a1a3b679SAndreas Boehler } 464*a1a3b679SAndreas Boehler 465*a1a3b679SAndreas Boehler /** 466*a1a3b679SAndreas Boehler * @depends testCreateCalendarObject 467*a1a3b679SAndreas Boehler */ 468*a1a3b679SAndreas Boehler function testDeleteCalendarObject() { 469*a1a3b679SAndreas Boehler 470*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 471*a1a3b679SAndreas Boehler $returnedId = $backend->createCalendar('principals/user2','somerandomid',array()); 472*a1a3b679SAndreas Boehler 473*a1a3b679SAndreas Boehler $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; 474*a1a3b679SAndreas Boehler $backend->createCalendarObject($returnedId, 'random-id', $object); 475*a1a3b679SAndreas Boehler $backend->deleteCalendarObject($returnedId, 'random-id'); 476*a1a3b679SAndreas Boehler 477*a1a3b679SAndreas Boehler $data = $backend->getCalendarObject($returnedId,'random-id'); 478*a1a3b679SAndreas Boehler $this->assertNull($data); 479*a1a3b679SAndreas Boehler 480*a1a3b679SAndreas Boehler } 481*a1a3b679SAndreas Boehler 482*a1a3b679SAndreas Boehler function testCalendarQueryNoResult() { 483*a1a3b679SAndreas Boehler 484*a1a3b679SAndreas Boehler $abstract = new PDO($this->pdo); 485*a1a3b679SAndreas Boehler $filters = array( 486*a1a3b679SAndreas Boehler 'name' => 'VCALENDAR', 487*a1a3b679SAndreas Boehler 'comp-filters' => array( 488*a1a3b679SAndreas Boehler array( 489*a1a3b679SAndreas Boehler 'name' => 'VJOURNAL', 490*a1a3b679SAndreas Boehler 'comp-filters' => array(), 491*a1a3b679SAndreas Boehler 'prop-filters' => array(), 492*a1a3b679SAndreas Boehler 'is-not-defined' => false, 493*a1a3b679SAndreas Boehler 'time-range' => null, 494*a1a3b679SAndreas Boehler ), 495*a1a3b679SAndreas Boehler ), 496*a1a3b679SAndreas Boehler 'prop-filters' => array(), 497*a1a3b679SAndreas Boehler 'is-not-defined' => false, 498*a1a3b679SAndreas Boehler 'time-range' => null, 499*a1a3b679SAndreas Boehler ); 500*a1a3b679SAndreas Boehler 501*a1a3b679SAndreas Boehler $this->assertEquals(array( 502*a1a3b679SAndreas Boehler ), $abstract->calendarQuery(1, $filters)); 503*a1a3b679SAndreas Boehler 504*a1a3b679SAndreas Boehler } 505*a1a3b679SAndreas Boehler 506*a1a3b679SAndreas Boehler function testCalendarQueryTodo() { 507*a1a3b679SAndreas Boehler 508*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 509*a1a3b679SAndreas Boehler $backend->createCalendarObject(1, "todo", "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n"); 510*a1a3b679SAndreas Boehler $backend->createCalendarObject(1, "event", "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"); 511*a1a3b679SAndreas Boehler 512*a1a3b679SAndreas Boehler $filters = array( 513*a1a3b679SAndreas Boehler 'name' => 'VCALENDAR', 514*a1a3b679SAndreas Boehler 'comp-filters' => array( 515*a1a3b679SAndreas Boehler array( 516*a1a3b679SAndreas Boehler 'name' => 'VTODO', 517*a1a3b679SAndreas Boehler 'comp-filters' => array(), 518*a1a3b679SAndreas Boehler 'prop-filters' => array(), 519*a1a3b679SAndreas Boehler 'is-not-defined' => false, 520*a1a3b679SAndreas Boehler 'time-range' => null, 521*a1a3b679SAndreas Boehler ), 522*a1a3b679SAndreas Boehler ), 523*a1a3b679SAndreas Boehler 'prop-filters' => array(), 524*a1a3b679SAndreas Boehler 'is-not-defined' => false, 525*a1a3b679SAndreas Boehler 'time-range' => null, 526*a1a3b679SAndreas Boehler ); 527*a1a3b679SAndreas Boehler 528*a1a3b679SAndreas Boehler $this->assertEquals(array( 529*a1a3b679SAndreas Boehler "todo", 530*a1a3b679SAndreas Boehler ), $backend->calendarQuery(1, $filters)); 531*a1a3b679SAndreas Boehler 532*a1a3b679SAndreas Boehler } 533*a1a3b679SAndreas Boehler function testCalendarQueryTodoNotMatch() { 534*a1a3b679SAndreas Boehler 535*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 536*a1a3b679SAndreas Boehler $backend->createCalendarObject(1, "todo", "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n"); 537*a1a3b679SAndreas Boehler $backend->createCalendarObject(1, "event", "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"); 538*a1a3b679SAndreas Boehler 539*a1a3b679SAndreas Boehler $filters = array( 540*a1a3b679SAndreas Boehler 'name' => 'VCALENDAR', 541*a1a3b679SAndreas Boehler 'comp-filters' => array( 542*a1a3b679SAndreas Boehler array( 543*a1a3b679SAndreas Boehler 'name' => 'VTODO', 544*a1a3b679SAndreas Boehler 'comp-filters' => array(), 545*a1a3b679SAndreas Boehler 'prop-filters' => array( 546*a1a3b679SAndreas Boehler array( 547*a1a3b679SAndreas Boehler 'name' => 'summary', 548*a1a3b679SAndreas Boehler 'text-match' => null, 549*a1a3b679SAndreas Boehler 'time-range' => null, 550*a1a3b679SAndreas Boehler 'param-filters' => array(), 551*a1a3b679SAndreas Boehler 'is-not-defined' => false, 552*a1a3b679SAndreas Boehler ), 553*a1a3b679SAndreas Boehler ), 554*a1a3b679SAndreas Boehler 'is-not-defined' => false, 555*a1a3b679SAndreas Boehler 'time-range' => null, 556*a1a3b679SAndreas Boehler ), 557*a1a3b679SAndreas Boehler ), 558*a1a3b679SAndreas Boehler 'prop-filters' => array(), 559*a1a3b679SAndreas Boehler 'is-not-defined' => false, 560*a1a3b679SAndreas Boehler 'time-range' => null, 561*a1a3b679SAndreas Boehler ); 562*a1a3b679SAndreas Boehler 563*a1a3b679SAndreas Boehler $this->assertEquals(array( 564*a1a3b679SAndreas Boehler ), $backend->calendarQuery(1, $filters)); 565*a1a3b679SAndreas Boehler 566*a1a3b679SAndreas Boehler } 567*a1a3b679SAndreas Boehler 568*a1a3b679SAndreas Boehler function testCalendarQueryNoFilter() { 569*a1a3b679SAndreas Boehler 570*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 571*a1a3b679SAndreas Boehler $backend->createCalendarObject(1, "todo", "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n"); 572*a1a3b679SAndreas Boehler $backend->createCalendarObject(1, "event", "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"); 573*a1a3b679SAndreas Boehler 574*a1a3b679SAndreas Boehler $filters = array( 575*a1a3b679SAndreas Boehler 'name' => 'VCALENDAR', 576*a1a3b679SAndreas Boehler 'comp-filters' => array(), 577*a1a3b679SAndreas Boehler 'prop-filters' => array(), 578*a1a3b679SAndreas Boehler 'is-not-defined' => false, 579*a1a3b679SAndreas Boehler 'time-range' => null, 580*a1a3b679SAndreas Boehler ); 581*a1a3b679SAndreas Boehler 582*a1a3b679SAndreas Boehler $result = $backend->calendarQuery(1, $filters); 583*a1a3b679SAndreas Boehler $this->assertTrue(in_array('todo', $result)); 584*a1a3b679SAndreas Boehler $this->assertTrue(in_array('event', $result)); 585*a1a3b679SAndreas Boehler 586*a1a3b679SAndreas Boehler } 587*a1a3b679SAndreas Boehler 588*a1a3b679SAndreas Boehler function testCalendarQueryTimeRange() { 589*a1a3b679SAndreas Boehler 590*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 591*a1a3b679SAndreas Boehler $backend->createCalendarObject(1, "todo", "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n"); 592*a1a3b679SAndreas Boehler $backend->createCalendarObject(1, "event", "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"); 593*a1a3b679SAndreas Boehler $backend->createCalendarObject(1, "event2", "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120103\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"); 594*a1a3b679SAndreas Boehler 595*a1a3b679SAndreas Boehler $filters = array( 596*a1a3b679SAndreas Boehler 'name' => 'VCALENDAR', 597*a1a3b679SAndreas Boehler 'comp-filters' => array( 598*a1a3b679SAndreas Boehler array( 599*a1a3b679SAndreas Boehler 'name' => 'VEVENT', 600*a1a3b679SAndreas Boehler 'comp-filters' => array(), 601*a1a3b679SAndreas Boehler 'prop-filters' => array(), 602*a1a3b679SAndreas Boehler 'is-not-defined' => false, 603*a1a3b679SAndreas Boehler 'time-range' => array( 604*a1a3b679SAndreas Boehler 'start' => new \DateTime('20120103'), 605*a1a3b679SAndreas Boehler 'end' => new \DateTime('20120104'), 606*a1a3b679SAndreas Boehler ), 607*a1a3b679SAndreas Boehler ), 608*a1a3b679SAndreas Boehler ), 609*a1a3b679SAndreas Boehler 'prop-filters' => array(), 610*a1a3b679SAndreas Boehler 'is-not-defined' => false, 611*a1a3b679SAndreas Boehler 'time-range' => null, 612*a1a3b679SAndreas Boehler ); 613*a1a3b679SAndreas Boehler 614*a1a3b679SAndreas Boehler $this->assertEquals(array( 615*a1a3b679SAndreas Boehler "event2", 616*a1a3b679SAndreas Boehler ), $backend->calendarQuery(1, $filters)); 617*a1a3b679SAndreas Boehler 618*a1a3b679SAndreas Boehler } 619*a1a3b679SAndreas Boehler function testCalendarQueryTimeRangeNoEnd() { 620*a1a3b679SAndreas Boehler 621*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 622*a1a3b679SAndreas Boehler $backend->createCalendarObject(1, "todo", "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n"); 623*a1a3b679SAndreas Boehler $backend->createCalendarObject(1, "event", "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"); 624*a1a3b679SAndreas Boehler $backend->createCalendarObject(1, "event2", "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20120103\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"); 625*a1a3b679SAndreas Boehler 626*a1a3b679SAndreas Boehler $filters = array( 627*a1a3b679SAndreas Boehler 'name' => 'VCALENDAR', 628*a1a3b679SAndreas Boehler 'comp-filters' => array( 629*a1a3b679SAndreas Boehler array( 630*a1a3b679SAndreas Boehler 'name' => 'VEVENT', 631*a1a3b679SAndreas Boehler 'comp-filters' => array(), 632*a1a3b679SAndreas Boehler 'prop-filters' => array(), 633*a1a3b679SAndreas Boehler 'is-not-defined' => false, 634*a1a3b679SAndreas Boehler 'time-range' => array( 635*a1a3b679SAndreas Boehler 'start' => new \DateTime('20120102'), 636*a1a3b679SAndreas Boehler 'end' => null, 637*a1a3b679SAndreas Boehler ), 638*a1a3b679SAndreas Boehler ), 639*a1a3b679SAndreas Boehler ), 640*a1a3b679SAndreas Boehler 'prop-filters' => array(), 641*a1a3b679SAndreas Boehler 'is-not-defined' => false, 642*a1a3b679SAndreas Boehler 'time-range' => null, 643*a1a3b679SAndreas Boehler ); 644*a1a3b679SAndreas Boehler 645*a1a3b679SAndreas Boehler $this->assertEquals(array( 646*a1a3b679SAndreas Boehler "event2", 647*a1a3b679SAndreas Boehler ), $backend->calendarQuery(1, $filters)); 648*a1a3b679SAndreas Boehler 649*a1a3b679SAndreas Boehler } 650*a1a3b679SAndreas Boehler 651*a1a3b679SAndreas Boehler function testGetChanges() { 652*a1a3b679SAndreas Boehler 653*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 654*a1a3b679SAndreas Boehler $id = $backend->createCalendar( 655*a1a3b679SAndreas Boehler 'principals/user1', 656*a1a3b679SAndreas Boehler 'bla', 657*a1a3b679SAndreas Boehler [] 658*a1a3b679SAndreas Boehler ); 659*a1a3b679SAndreas Boehler $result = $backend->getChangesForCalendar($id, null, 1); 660*a1a3b679SAndreas Boehler 661*a1a3b679SAndreas Boehler $this->assertEquals([ 662*a1a3b679SAndreas Boehler 'syncToken' => 1, 663*a1a3b679SAndreas Boehler 'modified' => [], 664*a1a3b679SAndreas Boehler 'deleted' => [], 665*a1a3b679SAndreas Boehler 'added' => [], 666*a1a3b679SAndreas Boehler ], $result); 667*a1a3b679SAndreas Boehler 668*a1a3b679SAndreas Boehler $currentToken = $result['syncToken']; 669*a1a3b679SAndreas Boehler 670*a1a3b679SAndreas Boehler $dummyTodo = "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n"; 671*a1a3b679SAndreas Boehler 672*a1a3b679SAndreas Boehler $backend->createCalendarObject($id, "todo1.ics", $dummyTodo); 673*a1a3b679SAndreas Boehler $backend->createCalendarObject($id, "todo2.ics", $dummyTodo); 674*a1a3b679SAndreas Boehler $backend->createCalendarObject($id, "todo3.ics", $dummyTodo); 675*a1a3b679SAndreas Boehler $backend->updateCalendarObject($id, "todo1.ics", $dummyTodo); 676*a1a3b679SAndreas Boehler $backend->deleteCalendarObject($id, "todo2.ics"); 677*a1a3b679SAndreas Boehler 678*a1a3b679SAndreas Boehler $result = $backend->getChangesForCalendar($id, $currentToken, 1); 679*a1a3b679SAndreas Boehler 680*a1a3b679SAndreas Boehler $this->assertEquals([ 681*a1a3b679SAndreas Boehler 'syncToken' => 6, 682*a1a3b679SAndreas Boehler 'modified' => ["todo1.ics"], 683*a1a3b679SAndreas Boehler 'deleted' => ["todo2.ics"], 684*a1a3b679SAndreas Boehler 'added' => ["todo3.ics"], 685*a1a3b679SAndreas Boehler ], $result); 686*a1a3b679SAndreas Boehler 687*a1a3b679SAndreas Boehler $result = $backend->getChangesForCalendar($id, null, 1); 688*a1a3b679SAndreas Boehler 689*a1a3b679SAndreas Boehler $this->assertEquals([ 690*a1a3b679SAndreas Boehler 'syncToken' => 6, 691*a1a3b679SAndreas Boehler 'modified' => [], 692*a1a3b679SAndreas Boehler 'deleted' => [], 693*a1a3b679SAndreas Boehler 'added' => ["todo1.ics", "todo3.ics"], 694*a1a3b679SAndreas Boehler ], $result); 695*a1a3b679SAndreas Boehler } 696*a1a3b679SAndreas Boehler 697*a1a3b679SAndreas Boehler function testCreateSubscriptions() { 698*a1a3b679SAndreas Boehler 699*a1a3b679SAndreas Boehler $props = [ 700*a1a3b679SAndreas Boehler '{http://calendarserver.org/ns/}source' => new \Sabre\DAV\Xml\Property\Href('http://example.org/cal.ics', false), 701*a1a3b679SAndreas Boehler '{DAV:}displayname' => 'cal', 702*a1a3b679SAndreas Boehler '{http://apple.com/ns/ical/}refreshrate' => 'P1W', 703*a1a3b679SAndreas Boehler '{http://apple.com/ns/ical/}calendar-color' => '#FF00FFFF', 704*a1a3b679SAndreas Boehler '{http://calendarserver.org/ns/}subscribed-strip-todos' => true, 705*a1a3b679SAndreas Boehler //'{http://calendarserver.org/ns/}subscribed-strip-alarms' => true, 706*a1a3b679SAndreas Boehler '{http://calendarserver.org/ns/}subscribed-strip-attachments' => true, 707*a1a3b679SAndreas Boehler ]; 708*a1a3b679SAndreas Boehler 709*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 710*a1a3b679SAndreas Boehler $backend->createSubscription('principals/user1', 'sub1', $props); 711*a1a3b679SAndreas Boehler 712*a1a3b679SAndreas Boehler $subs = $backend->getSubscriptionsForUser('principals/user1'); 713*a1a3b679SAndreas Boehler 714*a1a3b679SAndreas Boehler $expected = $props; 715*a1a3b679SAndreas Boehler $expected['id'] = 1; 716*a1a3b679SAndreas Boehler $expected['uri'] = 'sub1'; 717*a1a3b679SAndreas Boehler $expected['principaluri'] = 'principals/user1'; 718*a1a3b679SAndreas Boehler 719*a1a3b679SAndreas Boehler unset($expected['{http://calendarserver.org/ns/}source']); 720*a1a3b679SAndreas Boehler $expected['source'] = 'http://example.org/cal.ics'; 721*a1a3b679SAndreas Boehler 722*a1a3b679SAndreas Boehler $this->assertEquals(1, count($subs)); 723*a1a3b679SAndreas Boehler foreach($expected as $k=>$v) { 724*a1a3b679SAndreas Boehler $this->assertEquals($subs[0][$k], $expected[$k]); 725*a1a3b679SAndreas Boehler } 726*a1a3b679SAndreas Boehler 727*a1a3b679SAndreas Boehler } 728*a1a3b679SAndreas Boehler 729*a1a3b679SAndreas Boehler /** 730*a1a3b679SAndreas Boehler * @expectedException \Sabre\DAV\Exception\Forbidden 731*a1a3b679SAndreas Boehler */ 732*a1a3b679SAndreas Boehler function testCreateSubscriptionFail() { 733*a1a3b679SAndreas Boehler 734*a1a3b679SAndreas Boehler $props = [ 735*a1a3b679SAndreas Boehler ]; 736*a1a3b679SAndreas Boehler 737*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 738*a1a3b679SAndreas Boehler $backend->createSubscription('principals/user1', 'sub1', $props); 739*a1a3b679SAndreas Boehler 740*a1a3b679SAndreas Boehler } 741*a1a3b679SAndreas Boehler 742*a1a3b679SAndreas Boehler function testUpdateSubscriptions() { 743*a1a3b679SAndreas Boehler 744*a1a3b679SAndreas Boehler $props = [ 745*a1a3b679SAndreas Boehler '{http://calendarserver.org/ns/}source' => new \Sabre\DAV\Xml\Property\Href('http://example.org/cal.ics', false), 746*a1a3b679SAndreas Boehler '{DAV:}displayname' => 'cal', 747*a1a3b679SAndreas Boehler '{http://apple.com/ns/ical/}refreshrate' => 'P1W', 748*a1a3b679SAndreas Boehler '{http://apple.com/ns/ical/}calendar-color' => '#FF00FFFF', 749*a1a3b679SAndreas Boehler '{http://calendarserver.org/ns/}subscribed-strip-todos' => true, 750*a1a3b679SAndreas Boehler //'{http://calendarserver.org/ns/}subscribed-strip-alarms' => true, 751*a1a3b679SAndreas Boehler '{http://calendarserver.org/ns/}subscribed-strip-attachments' => true, 752*a1a3b679SAndreas Boehler ]; 753*a1a3b679SAndreas Boehler 754*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 755*a1a3b679SAndreas Boehler $backend->createSubscription('principals/user1', 'sub1', $props); 756*a1a3b679SAndreas Boehler 757*a1a3b679SAndreas Boehler $newProps = [ 758*a1a3b679SAndreas Boehler '{DAV:}displayname' => 'new displayname', 759*a1a3b679SAndreas Boehler '{http://calendarserver.org/ns/}source' => new \Sabre\DAV\Xml\Property\Href('http://example.org/cal2.ics', false), 760*a1a3b679SAndreas Boehler ]; 761*a1a3b679SAndreas Boehler 762*a1a3b679SAndreas Boehler $propPatch = new DAV\PropPatch($newProps); 763*a1a3b679SAndreas Boehler $backend->updateSubscription(1, $propPatch); 764*a1a3b679SAndreas Boehler $result = $propPatch->commit(); 765*a1a3b679SAndreas Boehler 766*a1a3b679SAndreas Boehler $this->assertTrue($result); 767*a1a3b679SAndreas Boehler 768*a1a3b679SAndreas Boehler $subs = $backend->getSubscriptionsForUser('principals/user1'); 769*a1a3b679SAndreas Boehler 770*a1a3b679SAndreas Boehler $expected = array_merge($props, $newProps); 771*a1a3b679SAndreas Boehler $expected['id'] = 1; 772*a1a3b679SAndreas Boehler $expected['uri'] = 'sub1'; 773*a1a3b679SAndreas Boehler $expected['principaluri'] = 'principals/user1'; 774*a1a3b679SAndreas Boehler 775*a1a3b679SAndreas Boehler unset($expected['{http://calendarserver.org/ns/}source']); 776*a1a3b679SAndreas Boehler $expected['source'] = 'http://example.org/cal2.ics'; 777*a1a3b679SAndreas Boehler 778*a1a3b679SAndreas Boehler $this->assertEquals(1, count($subs)); 779*a1a3b679SAndreas Boehler foreach($expected as $k=>$v) { 780*a1a3b679SAndreas Boehler $this->assertEquals($subs[0][$k], $expected[$k]); 781*a1a3b679SAndreas Boehler } 782*a1a3b679SAndreas Boehler 783*a1a3b679SAndreas Boehler } 784*a1a3b679SAndreas Boehler 785*a1a3b679SAndreas Boehler function testUpdateSubscriptionsFail() { 786*a1a3b679SAndreas Boehler 787*a1a3b679SAndreas Boehler $props = [ 788*a1a3b679SAndreas Boehler '{http://calendarserver.org/ns/}source' => new \Sabre\DAV\Xml\Property\Href('http://example.org/cal.ics', false), 789*a1a3b679SAndreas Boehler '{DAV:}displayname' => 'cal', 790*a1a3b679SAndreas Boehler '{http://apple.com/ns/ical/}refreshrate' => 'P1W', 791*a1a3b679SAndreas Boehler '{http://apple.com/ns/ical/}calendar-color' => '#FF00FFFF', 792*a1a3b679SAndreas Boehler '{http://calendarserver.org/ns/}subscribed-strip-todos' => true, 793*a1a3b679SAndreas Boehler //'{http://calendarserver.org/ns/}subscribed-strip-alarms' => true, 794*a1a3b679SAndreas Boehler '{http://calendarserver.org/ns/}subscribed-strip-attachments' => true, 795*a1a3b679SAndreas Boehler ]; 796*a1a3b679SAndreas Boehler 797*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 798*a1a3b679SAndreas Boehler $backend->createSubscription('principals/user1', 'sub1', $props); 799*a1a3b679SAndreas Boehler 800*a1a3b679SAndreas Boehler $propPatch = new DAV\PropPatch([ 801*a1a3b679SAndreas Boehler '{DAV:}displayname' => 'new displayname', 802*a1a3b679SAndreas Boehler '{http://calendarserver.org/ns/}source' => new \Sabre\DAV\Xml\Property\Href('http://example.org/cal2.ics', false), 803*a1a3b679SAndreas Boehler '{DAV:}unknown' => 'foo', 804*a1a3b679SAndreas Boehler ]); 805*a1a3b679SAndreas Boehler 806*a1a3b679SAndreas Boehler $backend->updateSubscription(1, $propPatch); 807*a1a3b679SAndreas Boehler $propPatch->commit(); 808*a1a3b679SAndreas Boehler 809*a1a3b679SAndreas Boehler $this->assertEquals([ 810*a1a3b679SAndreas Boehler '{DAV:}unknown' => 403, 811*a1a3b679SAndreas Boehler '{DAV:}displayname' => 424, 812*a1a3b679SAndreas Boehler '{http://calendarserver.org/ns/}source' => 424, 813*a1a3b679SAndreas Boehler ], $propPatch->getResult()); 814*a1a3b679SAndreas Boehler 815*a1a3b679SAndreas Boehler } 816*a1a3b679SAndreas Boehler 817*a1a3b679SAndreas Boehler function testDeleteSubscriptions() { 818*a1a3b679SAndreas Boehler 819*a1a3b679SAndreas Boehler $props = [ 820*a1a3b679SAndreas Boehler '{http://calendarserver.org/ns/}source' => new \Sabre\DAV\Xml\Property\Href('http://example.org/cal.ics', false), 821*a1a3b679SAndreas Boehler '{DAV:}displayname' => 'cal', 822*a1a3b679SAndreas Boehler '{http://apple.com/ns/ical/}refreshrate' => 'P1W', 823*a1a3b679SAndreas Boehler '{http://apple.com/ns/ical/}calendar-color' => '#FF00FFFF', 824*a1a3b679SAndreas Boehler '{http://calendarserver.org/ns/}subscribed-strip-todos' => true, 825*a1a3b679SAndreas Boehler //'{http://calendarserver.org/ns/}subscribed-strip-alarms' => true, 826*a1a3b679SAndreas Boehler '{http://calendarserver.org/ns/}subscribed-strip-attachments' => true, 827*a1a3b679SAndreas Boehler ]; 828*a1a3b679SAndreas Boehler 829*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 830*a1a3b679SAndreas Boehler $backend->createSubscription('principals/user1', 'sub1', $props); 831*a1a3b679SAndreas Boehler 832*a1a3b679SAndreas Boehler $newProps = [ 833*a1a3b679SAndreas Boehler '{DAV:}displayname' => 'new displayname', 834*a1a3b679SAndreas Boehler '{http://calendarserver.org/ns/}source' => new \Sabre\DAV\Xml\Property\Href('http://example.org/cal2.ics', false), 835*a1a3b679SAndreas Boehler ]; 836*a1a3b679SAndreas Boehler 837*a1a3b679SAndreas Boehler $backend->deleteSubscription(1); 838*a1a3b679SAndreas Boehler 839*a1a3b679SAndreas Boehler $subs = $backend->getSubscriptionsForUser('principals/user1'); 840*a1a3b679SAndreas Boehler $this->assertEquals(0, count($subs)); 841*a1a3b679SAndreas Boehler } 842*a1a3b679SAndreas Boehler 843*a1a3b679SAndreas Boehler function testSchedulingMethods() { 844*a1a3b679SAndreas Boehler 845*a1a3b679SAndreas Boehler $backend = new PDO($this->pdo); 846*a1a3b679SAndreas Boehler 847*a1a3b679SAndreas Boehler $calData = "BEGIN:VCALENDAR\r\nEND:VCALENDAR\r\n"; 848*a1a3b679SAndreas Boehler 849*a1a3b679SAndreas Boehler $backend->createSchedulingObject( 850*a1a3b679SAndreas Boehler 'principals/user1', 851*a1a3b679SAndreas Boehler 'schedule1.ics', 852*a1a3b679SAndreas Boehler $calData 853*a1a3b679SAndreas Boehler ); 854*a1a3b679SAndreas Boehler 855*a1a3b679SAndreas Boehler $expected = [ 856*a1a3b679SAndreas Boehler 'calendardata' => $calData, 857*a1a3b679SAndreas Boehler 'uri' => 'schedule1.ics', 858*a1a3b679SAndreas Boehler 'etag' => '"' . md5($calData) . '"', 859*a1a3b679SAndreas Boehler 'size' => strlen($calData) 860*a1a3b679SAndreas Boehler ]; 861*a1a3b679SAndreas Boehler 862*a1a3b679SAndreas Boehler $result = $backend->getSchedulingObject('principals/user1', 'schedule1.ics'); 863*a1a3b679SAndreas Boehler foreach($expected as $k=>$v) { 864*a1a3b679SAndreas Boehler $this->assertArrayHasKey($k, $result); 865*a1a3b679SAndreas Boehler $this->assertEquals($v, $result[$k]); 866*a1a3b679SAndreas Boehler } 867*a1a3b679SAndreas Boehler 868*a1a3b679SAndreas Boehler $results = $backend->getSchedulingObjects('principals/user1'); 869*a1a3b679SAndreas Boehler 870*a1a3b679SAndreas Boehler $this->assertEquals(1, count($results)); 871*a1a3b679SAndreas Boehler $result = $results[0]; 872*a1a3b679SAndreas Boehler foreach($expected as $k=>$v) { 873*a1a3b679SAndreas Boehler $this->assertEquals($v, $result[$k]); 874*a1a3b679SAndreas Boehler } 875*a1a3b679SAndreas Boehler 876*a1a3b679SAndreas Boehler $backend->deleteSchedulingObject('principals/user1', 'schedule1.ics'); 877*a1a3b679SAndreas Boehler $result = $backend->getSchedulingObject('principals/user1', 'schedule1.ics'); 878*a1a3b679SAndreas Boehler 879*a1a3b679SAndreas Boehler $this->assertNull($result); 880*a1a3b679SAndreas Boehler 881*a1a3b679SAndreas Boehler } 882*a1a3b679SAndreas Boehler 883*a1a3b679SAndreas Boehler} 884