3 abstract class Sabre_CalDAV_Backend_AbstractPDOTest extends PHPUnit_Framework_TestCase {
7 function testConstruct() {
9 $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
10 $this->assertTrue($backend instanceof Sabre_CalDAV_Backend_PDO);
15 * @depends testConstruct
17 function testGetCalendarsForUserNoCalendars() {
19 $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
20 $calendars = $backend->getCalendarsForUser('principals/user2');
21 $this->assertEquals(array(),$calendars);
26 * @depends testConstruct
28 function testCreateCalendarAndFetch() {
30 $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
31 $returnedId = $backend->createCalendar('principals/user2','somerandomid',array(
32 '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => new Sabre_CalDAV_Property_SupportedCalendarComponentSet(array('VEVENT')),
33 '{DAV:}displayname' => 'Hello!',
35 $calendars = $backend->getCalendarsForUser('principals/user2');
37 $elementCheck = array(
39 'uri' => 'somerandomid',
40 '{DAV:}displayname' => 'Hello!',
41 '{urn:ietf:params:xml:ns:caldav}calendar-description' => '',
44 $this->assertInternalType('array',$calendars);
45 $this->assertEquals(1,count($calendars));
47 foreach($elementCheck as $name=>$value) {
49 $this->assertArrayHasKey($name, $calendars[0]);
50 $this->assertEquals($value,$calendars[0][$name]);
57 * @depends testConstruct
59 function testUpdateCalendarAndFetch() {
61 $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
63 //Creating a new calendar
64 $newId = $backend->createCalendar('principals/user2','somerandomid',array());
66 // Updating the calendar
67 $result = $backend->updateCalendar($newId,array(
68 '{DAV:}displayname' => 'myCalendar',
71 // Verifying the result of the update
72 $this->assertEquals(true, $result);
74 // Fetching all calendars from this user
75 $calendars = $backend->getCalendarsForUser('principals/user2');
77 // Checking if all the information is still correct
78 $elementCheck = array(
80 'uri' => 'somerandomid',
81 '{DAV:}displayname' => 'myCalendar',
82 '{urn:ietf:params:xml:ns:caldav}calendar-description' => '',
83 '{urn:ietf:params:xml:ns:caldav}calendar-timezone' => '',
84 '{http://calendarserver.org/ns/}getctag' => '2',
87 $this->assertInternalType('array',$calendars);
88 $this->assertEquals(1,count($calendars));
90 foreach($elementCheck as $name=>$value) {
92 $this->assertArrayHasKey($name, $calendars[0]);
93 $this->assertEquals($value,$calendars[0][$name]);
100 * @depends testUpdateCalendarAndFetch
102 function testUpdateCalendarUnknownProperty() {
104 $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
106 //Creating a new calendar
107 $newId = $backend->createCalendar('principals/user2','somerandomid',array());
109 // Updating the calendar
110 $result = $backend->updateCalendar($newId,array(
111 '{DAV:}displayname' => 'myCalendar',
112 '{DAV:}yourmom' => 'wittycomment',
115 // Verifying the result of the update
116 $this->assertEquals(array(
117 '403' => array('{DAV:}yourmom' => null),
118 '424' => array('{DAV:}displayname' => null),
124 * @depends testCreateCalendarAndFetch
126 function testDeleteCalendar() {
128 $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
129 $returnedId = $backend->createCalendar('principals/user2','somerandomid',array(
130 '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => new Sabre_CalDAV_Property_SupportedCalendarComponentSet(array('VEVENT')),
131 '{DAV:}displayname' => 'Hello!',
134 $backend->deleteCalendar($returnedId);
136 $calendars = $backend->getCalendarsForUser('principals/user2');
137 $this->assertEquals(array(),$calendars);
142 * @depends testCreateCalendarAndFetch
143 * @expectedException Sabre_DAV_Exception
145 function testCreateCalendarIncorrectComponentSet() {;
147 $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
149 //Creating a new calendar
150 $newId = $backend->createCalendar('principals/user2','somerandomid',array(
151 '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => 'blabla',
156 function testCreateCalendarObject() {
158 $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
159 $returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
161 $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n";
163 $backend->createCalendarObject($returnedId, 'random-id', $object);
165 $result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = "random-id"');
166 $this->assertEquals(array(
167 'etag' => md5($object),
168 'size' => strlen($object),
169 'calendardata' => $object,
170 'firstoccurence' => strtotime('20120101'),
171 'lastoccurence' => strtotime('20120101')+(3600*24),
172 'componenttype' => 'VEVENT',
173 ), $result->fetch(PDO::FETCH_ASSOC));
178 * @expectedException Sabre_DAV_Exception_BadRequest
179 * @depends testCreateCalendarObject
181 function testCreateCalendarObjectNoComponent() {
183 $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
184 $returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
186 $object = "BEGIN:VCALENDAR\r\nBEGIN:VTIMEZONE\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n";
188 $backend->createCalendarObject($returnedId, 'random-id', $object);
193 * @depends testCreateCalendarObject
195 function testCreateCalendarObjectDuration() {
197 $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
198 $returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
200 $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nDURATION:P2D\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n";
202 $backend->createCalendarObject($returnedId, 'random-id', $object);
204 $result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = "random-id"');
205 $this->assertEquals(array(
206 'etag' => md5($object),
207 'size' => strlen($object),
208 'calendardata' => $object,
209 'firstoccurence' => strtotime('20120101'),
210 'lastoccurence' => strtotime('20120101')+(3600*48),
211 'componenttype' => 'VEVENT',
212 ), $result->fetch(PDO::FETCH_ASSOC));
217 * @depends testCreateCalendarObject
219 function testCreateCalendarObjectNoDTEND() {
221 $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
222 $returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
224 $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE-TIME:20120101T100000Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n";
226 $backend->createCalendarObject($returnedId, 'random-id', $object);
228 $result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = "random-id"');
229 $this->assertEquals(array(
230 'etag' => md5($object),
231 'size' => strlen($object),
232 'calendardata' => $object,
233 'firstoccurence' => strtotime('2012-01-01 10:00:00'),
234 'lastoccurence' => strtotime('2012-01-01 10:00:00'),
235 'componenttype' => 'VEVENT',
236 ), $result->fetch(PDO::FETCH_ASSOC));
241 * @depends testCreateCalendarObject
243 function testCreateCalendarObjectInfiniteReccurence() {
245 $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
246 $returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
248 $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE-TIME:20120101T100000Z\r\nRRULE:FREQ=DAILY\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n";
250 $backend->createCalendarObject($returnedId, 'random-id', $object);
252 $result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = "random-id"');
253 $this->assertEquals(array(
254 'etag' => md5($object),
255 'size' => strlen($object),
256 'calendardata' => $object,
257 'firstoccurence' => strtotime('2012-01-01 10:00:00'),
258 'lastoccurence' => strtotime(Sabre_CalDAV_Backend_PDO::MAX_DATE),
259 'componenttype' => 'VEVENT',
260 ), $result->fetch(PDO::FETCH_ASSOC));
265 * @depends testCreateCalendarObject
267 function testCreateCalendarObjectEndingReccurence() {
269 $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
270 $returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
272 $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE-TIME:20120101T100000Z\r\nDTEND;VALUE=DATE-TIME:20120101T110000Z\r\nRRULE:FREQ=DAILY;COUNT=1000\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n";
274 $backend->createCalendarObject($returnedId, 'random-id', $object);
276 $result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = "random-id"');
277 $this->assertEquals(array(
278 'etag' => md5($object),
279 'size' => strlen($object),
280 'calendardata' => $object,
281 'firstoccurence' => strtotime('2012-01-01 10:00:00'),
282 'lastoccurence' => strtotime('2012-01-01 11:00:00') + (3600 * 24 * 999),
283 'componenttype' => 'VEVENT',
284 ), $result->fetch(PDO::FETCH_ASSOC));
289 * @depends testCreateCalendarObject
291 function testCreateCalendarObjectTask() {
293 $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
294 $returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
296 $object = "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nDUE;VALUE=DATE-TIME:20120101T100000Z\r\nEND:VTODO\r\nEND:VCALENDAR\r\n";
298 $backend->createCalendarObject($returnedId, 'random-id', $object);
300 $result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = "random-id"');
301 $this->assertEquals(array(
302 'etag' => md5($object),
303 'size' => strlen($object),
304 'calendardata' => $object,
305 'firstoccurence' => null,
306 'lastoccurence' => null,
307 'componenttype' => 'VTODO',
308 ), $result->fetch(PDO::FETCH_ASSOC));
313 * @depends testCreateCalendarObject
315 function testGetCalendarObjects() {
317 $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
318 $returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
320 $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n";
321 $backend->createCalendarObject($returnedId, 'random-id', $object);
323 $data = $backend->getCalendarObjects($returnedId,'random-id');
325 $this->assertEquals(1, count($data));
328 $this->assertEquals($returnedId, $data['calendarid']);
329 $this->assertEquals('random-id', $data['uri']);
330 $this->assertEquals(strlen($object),$data['size']);
336 * @depends testCreateCalendarObject
338 function testUpdateCalendarObject() {
340 $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
341 $returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
343 $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n";
344 $object2 = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20130101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n";
345 $backend->createCalendarObject($returnedId, 'random-id', $object);
346 $backend->updateCalendarObject($returnedId, 'random-id', $object2);
348 $data = $backend->getCalendarObject($returnedId,'random-id');
350 $this->assertEquals($object2, $data['calendardata']);
351 $this->assertEquals($returnedId, $data['calendarid']);
352 $this->assertEquals('random-id', $data['uri']);
358 * @depends testCreateCalendarObject
360 function testDeleteCalendarObject() {
362 $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
363 $returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
365 $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n";
366 $backend->createCalendarObject($returnedId, 'random-id', $object);
367 $backend->deleteCalendarObject($returnedId, 'random-id');
369 $data = $backend->getCalendarObject($returnedId,'random-id');
370 $this->assertNull($data);
374 function testCalendarQueryNoResult() {
376 $abstract = new Sabre_CalDAV_Backend_PDO($this->pdo);
378 'name' => 'VCALENDAR',
379 'comp-filters' => array(
381 'name' => 'VJOURNAL',
382 'comp-filters' => array(),
383 'prop-filters' => array(),
384 'is-not-defined' => false,
385 'time-range' => null,
388 'prop-filters' => array(),
389 'is-not-defined' => false,
390 'time-range' => null,
393 $this->assertEquals(array(
394 ), $abstract->calendarQuery(1, $filters));
398 function testCalendarQueryTodo() {
400 $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
401 $backend->createCalendarObject(1, "todo", "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n");
402 $backend->createCalendarObject(1, "event", "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n");
405 'name' => 'VCALENDAR',
406 'comp-filters' => array(
409 'comp-filters' => array(),
410 'prop-filters' => array(),
411 'is-not-defined' => false,
412 'time-range' => null,
415 'prop-filters' => array(),
416 'is-not-defined' => false,
417 'time-range' => null,
420 $this->assertEquals(array(
422 ), $backend->calendarQuery(1, $filters));
425 function testCalendarQueryTodoNotMatch() {
427 $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
428 $backend->createCalendarObject(1, "todo", "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n");
429 $backend->createCalendarObject(1, "event", "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n");
432 'name' => 'VCALENDAR',
433 'comp-filters' => array(
436 'comp-filters' => array(),
437 'prop-filters' => array(
440 'text-match' => null,
441 'time-range' => null,
442 'param-filters' => array(),
443 'is-not-defined' => false,
446 'is-not-defined' => false,
447 'time-range' => null,
450 'prop-filters' => array(),
451 'is-not-defined' => false,
452 'time-range' => null,
455 $this->assertEquals(array(
456 ), $backend->calendarQuery(1, $filters));
460 function testCalendarQueryNoFilter() {
462 $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
463 $backend->createCalendarObject(1, "todo", "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n");
464 $backend->createCalendarObject(1, "event", "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n");
467 'name' => 'VCALENDAR',
468 'comp-filters' => array(),
469 'prop-filters' => array(),
470 'is-not-defined' => false,
471 'time-range' => null,
474 $result = $backend->calendarQuery(1, $filters);
475 $this->assertTrue(in_array('todo', $result));
476 $this->assertTrue(in_array('event', $result));
480 function testCalendarQueryTimeRange() {
482 $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
483 $backend->createCalendarObject(1, "todo", "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n");
484 $backend->createCalendarObject(1, "event", "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n");
485 $backend->createCalendarObject(1, "event2", "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20120103\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n");
488 'name' => 'VCALENDAR',
489 'comp-filters' => array(
492 'comp-filters' => array(),
493 'prop-filters' => array(),
494 'is-not-defined' => false,
495 'time-range' => array(
496 'start' => new DateTime('20120103'),
497 'end' => new DateTime('20120104'),
501 'prop-filters' => array(),
502 'is-not-defined' => false,
503 'time-range' => null,
506 $this->assertEquals(array(
508 ), $backend->calendarQuery(1, $filters));