3 class Sabre_CalDAV_CalendarQueryParserTest extends PHPUnit_Framework_TestCase {
9 <c:calendar-query xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">
10 ' . implode("\n", $xml) . '
13 $dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
15 $q = new Sabre_CalDAV_CalendarQueryParser($dom);
22 * @expectedException Sabre_DAV_Exception_BadRequest
24 function testNoFilter() {
32 * @expectedException Sabre_DAV_Exception_BadRequest
34 function testTwoCompFilter() {
38 ' <c:comp-filter name="VEVENT" />',
39 ' <c:comp-filter name="VEVENT" />',
46 function testBasicFilter() {
50 ' <c:comp-filter name="VCALENDAR" />',
53 $result = $this->parse($xml);
56 'name' => 'VCALENDAR',
57 'comp-filters' => array(),
58 'prop-filters' => array(),
59 'is-not-defined' => false,
70 function testCompIsNotDefined() {
74 ' <c:comp-filter name="VCALENDAR">',
75 ' <c:comp-filter name="VEVENT">',
76 ' <c:is-not-defined/>',
81 $result = $this->parse($xml);
84 'name' => 'VCALENDAR',
85 'comp-filters' => array(
88 'comp-filters' => array(),
89 'prop-filters' => array(),
90 'is-not-defined' => true,
94 'prop-filters' => array(),
95 'is-not-defined' => false,
107 * @expectedException Sabre_DAV_Exception_BadRequest
109 function testCompTimeRangeOnVCALENDAR() {
113 ' <c:comp-filter name="VCALENDAR">',
114 ' <c:time-range start="20110101T000000Z" end="20111231T235959Z" />',
118 $result = $this->parse($xml);
122 function testCompTimeRange() {
126 ' <c:comp-filter name="VCALENDAR">',
127 ' <c:comp-filter name="VEVENT">',
128 ' <c:time-range start="20110101T000000Z" end="20111231T235959Z" />',
130 ' <c:comp-filter name="VTODO">',
131 ' <c:time-range start="20110101T000000Z" />',
133 ' <c:comp-filter name="VJOURNAL">',
134 ' <c:time-range end="20111231T235959Z" />',
139 $result = $this->parse($xml);
142 'name' => 'VCALENDAR',
143 'comp-filters' => array(
146 'comp-filters' => array(),
147 'prop-filters' => array(),
148 'is-not-defined' => false,
149 'time-range' => array(
150 'start' => new DateTime('2011-01-01 00:00:00', new DateTimeZone('GMT')),
151 'end' => new DateTime('2011-12-31 23:59:59', new DateTimeZone('GMT')),
156 'comp-filters' => array(),
157 'prop-filters' => array(),
158 'is-not-defined' => false,
159 'time-range' => array(
160 'start' => new DateTime('2011-01-01 00:00:00', new DateTimeZone('GMT')),
165 'name' => 'VJOURNAL',
166 'comp-filters' => array(),
167 'prop-filters' => array(),
168 'is-not-defined' => false,
169 'time-range' => array(
171 'end' => new DateTime('2011-12-31 23:59:59', new DateTimeZone('GMT')),
175 'prop-filters' => array(),
176 'is-not-defined' => false,
177 'time-range' => false
188 * @expectedException Sabre_DAV_Exception_BadRequest
190 function testCompTimeRangeBadRange() {
194 ' <c:comp-filter name="VCALENDAR">',
195 ' <c:comp-filter name="VEVENT">',
196 ' <c:time-range start="20110101T000000Z" end="20100101T000000Z" />',
205 function testProp() {
209 ' <c:comp-filter name="VCALENDAR">',
210 ' <c:comp-filter name="VEVENT">',
211 ' <c:prop-filter name="SUMMARY">',
212 ' <c:text-match>vacation</c:text-match>',
218 $result = $this->parse($xml);
221 'name' => 'VCALENDAR',
222 'comp-filters' => array(
225 'is-not-defined' => false,
226 'comp-filters' => array(),
227 'prop-filters' => array(
230 'is-not-defined' => false,
231 'param-filters' => array(),
232 'text-match' => array(
233 'negate-condition' => false,
234 'collation' => 'i;ascii-casemap',
235 'value' => 'vacation',
237 'time-range' => null,
240 'time-range' => null,
243 'prop-filters' => array(),
244 'is-not-defined' => false,
245 'time-range' => false
255 function testComplex() {
259 ' <c:comp-filter name="VCALENDAR">',
260 ' <c:comp-filter name="VEVENT">',
261 ' <c:prop-filter name="SUMMARY">',
262 ' <c:text-match collation="i;unicode-casemap">vacation</c:text-match>',
264 ' <c:prop-filter name="DTSTAMP">',
265 ' <c:time-range start="20110704T000000Z" />',
267 ' <c:prop-filter name="ORGANIZER">',
268 ' <c:is-not-defined />',
270 ' <c:prop-filter name="DTSTART">',
271 ' <c:param-filter name="VALUE">',
272 ' <c:text-match negate-condition="yes">DATE</c:text-match>',
273 ' </c:param-filter>',
279 $result = $this->parse($xml);
282 'name' => 'VCALENDAR',
283 'comp-filters' => array(
286 'is-not-defined' => false,
287 'comp-filters' => array(),
288 'prop-filters' => array(
291 'is-not-defined' => false,
292 'param-filters' => array(),
293 'text-match' => array(
294 'negate-condition' => false,
295 'collation' => 'i;unicode-casemap',
296 'value' => 'vacation',
298 'time-range' => null,
302 'is-not-defined' => false,
303 'param-filters' => array(),
304 'text-match' => null,
305 'time-range' => array(
306 'start' => new DateTime('2011-07-04 00:00:00', new DateTimeZone('GMT')),
311 'name' => 'ORGANIZER',
312 'is-not-defined' => true,
313 'param-filters' => array(),
314 'text-match' => null,
315 'time-range' => null,
319 'is-not-defined' => false,
320 'param-filters' => array(
323 'is-not-defined' => false,
324 'text-match' => array(
325 'negate-condition' => true,
327 'collation' => 'i;ascii-casemap',
331 'text-match' => null,
332 'time-range' => null,
335 'time-range' => null,
338 'prop-filters' => array(),
339 'is-not-defined' => false,
340 'time-range' => false
350 function testOther1() {
352 // This body was exactly sent to us from the sabredav mailing list. Checking if this parses correctly.
355 <?xml version="1.0" encoding="utf-8" ?>
356 <C:calendar-query xmlns:D="DAV:"
357 xmlns:C="urn:ietf:params:xml:ns:caldav">
363 <C:comp-filter name="VCALENDAR">
364 <C:comp-filter name="VEVENT">
365 <C:time-range start="20090101T000000Z" end="20121202T000000Z"/>
372 $dom = Sabre_DAV_XMLUtil::loadDOMDocument($body);
374 $q = new Sabre_CalDAV_CalendarQueryParser($dom);
377 $this->assertEquals(array(
378 '{urn:ietf:params:xml:ns:caldav}calendar-data',
380 ), $q->requestedProperties);
382 $expectedFilters = array(
383 'name' => 'VCALENDAR',
384 'comp-filters' => array(
387 'comp-filters' => array(),
388 'prop-filters' => array(),
389 'time-range' => array(
390 'start' => new DateTime('2009-01-01 00:00:00', new DateTimeZone('UTC')),
391 'end' => new DateTime('2012-12-02 00:00:00', new DateTimeZone('UTC')),
393 'is-not-defined' => false,
396 'prop-filters' => array(),
397 'time-range' => null,
398 'is-not-defined' => false,
401 $this->assertEquals($expectedFilters, $q->filters);
405 function testExpand() {
409 ' <c:calendar-data>',
410 ' <c:expand start="20110101T000000Z" end="20120101T000000Z"/>',
411 ' </c:calendar-data>',
414 ' <c:comp-filter name="VCALENDAR" />',
419 '<?xml version="1.0"?>
420 <c:calendar-query xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">
421 ' . implode("\n", $xml) . '
422 </c:calendar-query>';
424 $dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
425 $q = new Sabre_CalDAV_CalendarQueryParser($dom);
430 'name' => 'VCALENDAR',
431 'comp-filters' => array(),
432 'prop-filters' => array(),
433 'is-not-defined' => false,
434 'time-range' => false
442 $this->assertEquals(array(
443 '{urn:ietf:params:xml:ns:caldav}calendar-data',
444 ), $q->requestedProperties);
448 'start' => new DateTime('2011-01-01 00:00:00', new DateTimeZone('UTC')),
449 'end' => new DateTime('2012-01-01 00:00:00', new DateTimeZone('UTC')),
457 * @expectedException Sabre_DAV_Exception_BadRequest
459 function testExpandNoStart() {
463 ' <c:calendar-data>',
464 ' <c:expand end="20120101T000000Z"/>',
465 ' </c:calendar-data>',
468 ' <c:comp-filter name="VCALENDAR" />',
473 '<?xml version="1.0"?>
474 <c:calendar-query xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">
475 ' . implode("\n", $xml) . '
476 </c:calendar-query>';
478 $dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
479 $q = new Sabre_CalDAV_CalendarQueryParser($dom);
484 * @expectedException Sabre_DAV_Exception_BadRequest
486 function testExpandNoEnd() {
490 ' <c:calendar-data>',
491 ' <c:expand start="20120101T000000Z"/>',
492 ' </c:calendar-data>',
495 ' <c:comp-filter name="VCALENDAR" />',
500 '<?xml version="1.0"?>
501 <c:calendar-query xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">
502 ' . implode("\n", $xml) . '
503 </c:calendar-query>';
505 $dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
506 $q = new Sabre_CalDAV_CalendarQueryParser($dom);
511 * @expectedException Sabre_DAV_Exception_BadRequest
513 function testExpandBadTimes() {
517 ' <c:calendar-data>',
518 ' <c:expand start="20120101T000000Z" end="19980101T000000Z"/>',
519 ' </c:calendar-data>',
522 ' <c:comp-filter name="VCALENDAR" />',
527 '<?xml version="1.0"?>
528 <c:calendar-query xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">
529 ' . implode("\n", $xml) . '
530 </c:calendar-query>';
532 $dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
533 $q = new Sabre_CalDAV_CalendarQueryParser($dom);