]> git.mxchange.org Git - friendica-addons.git/blob - dav/SabreDAV/tests/Sabre/CalDAV/Backend/AbstractPDOTest.php
Merge branch 'master' of git://github.com/friendica/friendica-addons
[friendica-addons.git] / dav / SabreDAV / tests / Sabre / CalDAV / Backend / AbstractPDOTest.php
1 <?php
2
3 abstract class Sabre_CalDAV_Backend_AbstractPDOTest extends PHPUnit_Framework_TestCase {
4
5     protected $pdo;
6
7     function testConstruct() {
8
9         $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
10         $this->assertTrue($backend instanceof Sabre_CalDAV_Backend_PDO);
11
12     }
13
14     /**
15      * @depends testConstruct
16      */
17     function testGetCalendarsForUserNoCalendars() {
18
19         $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
20         $calendars = $backend->getCalendarsForUser('principals/user2');
21         $this->assertEquals(array(),$calendars);
22
23     }
24
25     /**
26      * @depends testConstruct
27      */
28     function testCreateCalendarAndFetch() {
29
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!',
34         ));
35         $calendars = $backend->getCalendarsForUser('principals/user2');
36
37         $elementCheck = array(
38             'id'                => $returnedId,
39             'uri'               => 'somerandomid',
40             '{DAV:}displayname' => 'Hello!',
41             '{urn:ietf:params:xml:ns:caldav}calendar-description' => '',
42         );
43
44         $this->assertInternalType('array',$calendars);
45         $this->assertEquals(1,count($calendars));
46
47         foreach($elementCheck as $name=>$value) {
48
49             $this->assertArrayHasKey($name, $calendars[0]);
50             $this->assertEquals($value,$calendars[0][$name]);
51
52         }
53
54     }
55
56     /**
57      * @depends testConstruct
58      */
59     function testUpdateCalendarAndFetch() {
60
61         $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
62
63         //Creating a new calendar
64         $newId = $backend->createCalendar('principals/user2','somerandomid',array());
65
66         // Updating the calendar
67         $result = $backend->updateCalendar($newId,array(
68             '{DAV:}displayname' => 'myCalendar',
69         ));
70
71         // Verifying the result of the update
72         $this->assertEquals(true, $result);
73
74         // Fetching all calendars from this user
75         $calendars = $backend->getCalendarsForUser('principals/user2');
76
77         // Checking if all the information is still correct
78         $elementCheck = array(
79             'id'                => $newId,
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',
85         );
86
87         $this->assertInternalType('array',$calendars);
88         $this->assertEquals(1,count($calendars));
89
90         foreach($elementCheck as $name=>$value) {
91
92             $this->assertArrayHasKey($name, $calendars[0]);
93             $this->assertEquals($value,$calendars[0][$name]);
94
95         }
96
97     }
98
99     /**
100      * @depends testUpdateCalendarAndFetch
101      */
102     function testUpdateCalendarUnknownProperty() {
103
104         $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
105
106         //Creating a new calendar
107         $newId = $backend->createCalendar('principals/user2','somerandomid',array());
108
109         // Updating the calendar
110         $result = $backend->updateCalendar($newId,array(
111             '{DAV:}displayname' => 'myCalendar',
112             '{DAV:}yourmom'     => 'wittycomment',
113         ));
114
115         // Verifying the result of the update
116         $this->assertEquals(array(
117             '403' => array('{DAV:}yourmom' => null),
118             '424' => array('{DAV:}displayname' => null),
119         ), $result);
120
121     }
122
123     /**
124      * @depends testCreateCalendarAndFetch
125      */
126     function testDeleteCalendar() {
127
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!',
132         ));
133
134         $backend->deleteCalendar($returnedId);
135
136         $calendars = $backend->getCalendarsForUser('principals/user2');
137         $this->assertEquals(array(),$calendars);
138
139     }
140
141     /**
142      * @depends testCreateCalendarAndFetch
143      * @expectedException Sabre_DAV_Exception
144      */
145     function testCreateCalendarIncorrectComponentSet() {;
146
147         $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
148
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',
152         ));
153
154     }
155
156     function testCreateCalendarObject() {
157
158         $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
159         $returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
160
161         $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n";
162
163         $backend->createCalendarObject($returnedId, 'random-id', $object);
164
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));
174
175     }
176
177     /**
178      * @expectedException Sabre_DAV_Exception_BadRequest
179      * @depends testCreateCalendarObject
180      */
181     function testCreateCalendarObjectNoComponent() {
182
183         $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
184         $returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
185
186         $object = "BEGIN:VCALENDAR\r\nBEGIN:VTIMEZONE\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n";
187
188         $backend->createCalendarObject($returnedId, 'random-id', $object);
189
190     }
191
192     /**
193      * @depends testCreateCalendarObject
194      */
195     function testCreateCalendarObjectDuration() {
196
197         $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
198         $returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
199
200         $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nDURATION:P2D\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n";
201
202         $backend->createCalendarObject($returnedId, 'random-id', $object);
203
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));
213
214     }
215
216     /**
217      * @depends testCreateCalendarObject
218      */
219     function testCreateCalendarObjectNoDTEND() {
220
221         $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
222         $returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
223
224         $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE-TIME:20120101T100000Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n";
225
226         $backend->createCalendarObject($returnedId, 'random-id', $object);
227
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));
237
238     }
239
240     /**
241      * @depends testCreateCalendarObject
242      */
243     function testCreateCalendarObjectInfiniteReccurence() {
244
245         $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
246         $returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
247
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";
249
250         $backend->createCalendarObject($returnedId, 'random-id', $object);
251
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));
261
262     }
263
264     /**
265      * @depends testCreateCalendarObject
266      */
267     function testCreateCalendarObjectEndingReccurence() {
268
269         $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
270         $returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
271
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";
273
274         $backend->createCalendarObject($returnedId, 'random-id', $object);
275
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));
285
286     }
287
288     /**
289      * @depends testCreateCalendarObject
290      */
291     function testCreateCalendarObjectTask() {
292
293         $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
294         $returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
295
296         $object = "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nDUE;VALUE=DATE-TIME:20120101T100000Z\r\nEND:VTODO\r\nEND:VCALENDAR\r\n";
297
298         $backend->createCalendarObject($returnedId, 'random-id', $object);
299
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));
309
310     }
311
312     /**
313      * @depends testCreateCalendarObject
314      */
315     function testGetCalendarObjects() {
316
317         $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
318         $returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
319
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);
322
323         $data = $backend->getCalendarObjects($returnedId,'random-id');
324
325         $this->assertEquals(1, count($data));
326         $data = $data[0];
327
328         $this->assertEquals($returnedId, $data['calendarid']);
329         $this->assertEquals('random-id', $data['uri']);
330         $this->assertEquals(strlen($object),$data['size']);
331
332
333     }
334
335     /**
336      * @depends testCreateCalendarObject
337      */
338     function testUpdateCalendarObject() {
339
340         $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
341         $returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
342
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);
347
348         $data = $backend->getCalendarObject($returnedId,'random-id');
349
350         $this->assertEquals($object2, $data['calendardata']);
351         $this->assertEquals($returnedId, $data['calendarid']);
352         $this->assertEquals('random-id', $data['uri']);
353
354
355     }
356
357     /**
358      * @depends testCreateCalendarObject
359      */
360     function testDeleteCalendarObject() {
361
362         $backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
363         $returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
364
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');
368
369         $data = $backend->getCalendarObject($returnedId,'random-id');
370         $this->assertNull($data);
371
372     }
373
374     function testCalendarQueryNoResult() {
375
376         $abstract = new Sabre_CalDAV_Backend_PDO($this->pdo);
377         $filters = array(
378             'name' => 'VCALENDAR',
379             'comp-filters' => array(
380                 array(
381                     'name' => 'VJOURNAL',
382                     'comp-filters' => array(),
383                     'prop-filters' => array(),
384                     'is-not-defined' => false,
385                     'time-range' => null,
386                 ),
387             ),
388             'prop-filters' => array(),
389             'is-not-defined' => false,
390             'time-range' => null,
391         );
392
393         $this->assertEquals(array(
394         ), $abstract->calendarQuery(1, $filters));
395
396     }
397
398     function testCalendarQueryTodo() {
399
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");
403
404         $filters = array(
405             'name' => 'VCALENDAR',
406             'comp-filters' => array(
407                 array(
408                     'name' => 'VTODO',
409                     'comp-filters' => array(),
410                     'prop-filters' => array(),
411                     'is-not-defined' => false,
412                     'time-range' => null,
413                 ),
414             ),
415             'prop-filters' => array(),
416             'is-not-defined' => false,
417             'time-range' => null,
418         );
419
420         $this->assertEquals(array(
421             "todo",
422         ), $backend->calendarQuery(1, $filters));
423
424     }
425     function testCalendarQueryTodoNotMatch() {
426
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");
430
431         $filters = array(
432             'name' => 'VCALENDAR',
433             'comp-filters' => array(
434                 array(
435                     'name' => 'VTODO',
436                     'comp-filters' => array(),
437                     'prop-filters' => array(
438                         array(
439                             'name' => 'summary',
440                             'text-match' => null,
441                             'time-range' => null,
442                             'param-filters' => array(),
443                             'is-not-defined' => false,
444                         ),
445                     ),
446                     'is-not-defined' => false,
447                     'time-range' => null,
448                 ),
449             ),
450             'prop-filters' => array(),
451             'is-not-defined' => false,
452             'time-range' => null,
453         );
454
455         $this->assertEquals(array(
456         ), $backend->calendarQuery(1, $filters));
457
458     }
459
460     function testCalendarQueryNoFilter() {
461
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");
465
466         $filters = array(
467             'name' => 'VCALENDAR',
468             'comp-filters' => array(),
469             'prop-filters' => array(),
470             'is-not-defined' => false,
471             'time-range' => null,
472         );
473
474         $result = $backend->calendarQuery(1, $filters);
475         $this->assertTrue(in_array('todo', $result));
476         $this->assertTrue(in_array('event', $result));
477
478     }
479
480     function testCalendarQueryTimeRange() {
481
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");
486
487         $filters = array(
488             'name' => 'VCALENDAR',
489             'comp-filters' => array(
490                 array(
491                     'name' => 'VEVENT',
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'),
498                     ),
499                 ),
500             ),
501             'prop-filters' => array(),
502             'is-not-defined' => false,
503             'time-range' => null,
504         );
505
506         $this->assertEquals(array(
507             "event2",
508         ), $backend->calendarQuery(1, $filters));
509
510     }
511 }