aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/sabre/dav/tests/Sabre/CalDAV/CalendarQueryParserTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/sabre/dav/tests/Sabre/CalDAV/CalendarQueryParserTest.php')
-rw-r--r--vendor/sabre/dav/tests/Sabre/CalDAV/CalendarQueryParserTest.php540
1 files changed, 540 insertions, 0 deletions
diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/CalendarQueryParserTest.php b/vendor/sabre/dav/tests/Sabre/CalDAV/CalendarQueryParserTest.php
new file mode 100644
index 000000000..fdfe4de89
--- /dev/null
+++ b/vendor/sabre/dav/tests/Sabre/CalDAV/CalendarQueryParserTest.php
@@ -0,0 +1,540 @@
+<?php
+
+namespace Sabre\CalDAV;
+use Sabre\DAV;
+
+class CalendarQueryParserTest extends \PHPUnit_Framework_TestCase {
+
+ function parse($xml) {
+
+ $xml =
+'<?xml version="1.0"?>
+<c:calendar-query xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">
+' . implode("\n", $xml) . '
+</c:calendar-query>';
+
+ $dom = DAV\XMLUtil::loadDOMDocument($xml);
+
+ $q = new CalendarQueryParser($dom);
+ $q->parse();
+ return $q->filters;
+
+ }
+
+ /**
+ * @expectedException Sabre\DAV\Exception\BadRequest
+ */
+ function testNoFilter() {
+
+ $xml = array();
+ $this->parse($xml);
+
+ }
+
+ /**
+ * @expectedException Sabre\DAV\Exception\BadRequest
+ */
+ function testTwoCompFilter() {
+
+ $xml = array(
+ '<c:filter>',
+ ' <c:comp-filter name="VEVENT" />',
+ ' <c:comp-filter name="VEVENT" />',
+ '</c:filter>'
+ );
+ $this->parse($xml);
+
+ }
+
+ function testBasicFilter() {
+
+ $xml = array(
+ '<c:filter>',
+ ' <c:comp-filter name="VCALENDAR" />',
+ '</c:filter>'
+ );
+ $result = $this->parse($xml);
+
+ $expected = array(
+ 'name' => 'VCALENDAR',
+ 'comp-filters' => array(),
+ 'prop-filters' => array(),
+ 'is-not-defined' => false,
+ 'time-range' => false
+ );
+
+ $this->assertEquals(
+ $expected,
+ $result
+ );
+
+ }
+
+ function testCompIsNotDefined() {
+
+ $xml = array(
+ '<c:filter>',
+ ' <c:comp-filter name="VCALENDAR">',
+ ' <c:comp-filter name="VEVENT">',
+ ' <c:is-not-defined/>',
+ ' </c:comp-filter>',
+ ' </c:comp-filter>',
+ '</c:filter>'
+ );
+ $result = $this->parse($xml);
+
+ $expected = array(
+ 'name' => 'VCALENDAR',
+ 'comp-filters' => array(
+ array(
+ 'name' => 'VEVENT',
+ 'comp-filters' => array(),
+ 'prop-filters' => array(),
+ 'is-not-defined' => true,
+ 'time-range' => false
+ ),
+ ),
+ 'prop-filters' => array(),
+ 'is-not-defined' => false,
+ 'time-range' => false
+ );
+
+ $this->assertEquals(
+ $expected,
+ $result
+ );
+
+ }
+
+ /**
+ * @expectedException Sabre\DAV\Exception\BadRequest
+ */
+ function testCompTimeRangeOnVCALENDAR() {
+
+ $xml = array(
+ '<c:filter>',
+ ' <c:comp-filter name="VCALENDAR">',
+ ' <c:time-range start="20110101T000000Z" end="20111231T235959Z" />',
+ ' </c:comp-filter>',
+ '</c:filter>'
+ );
+ $result = $this->parse($xml);
+
+ }
+
+ function testCompTimeRange() {
+
+ $xml = array(
+ '<c:filter>',
+ ' <c:comp-filter name="VCALENDAR">',
+ ' <c:comp-filter name="VEVENT">',
+ ' <c:time-range start="20110101T000000Z" end="20111231T235959Z" />',
+ ' </c:comp-filter>',
+ ' <c:comp-filter name="VTODO">',
+ ' <c:time-range start="20110101T000000Z" />',
+ ' </c:comp-filter>',
+ ' <c:comp-filter name="VJOURNAL">',
+ ' <c:time-range end="20111231T235959Z" />',
+ ' </c:comp-filter>',
+ ' </c:comp-filter>',
+ '</c:filter>'
+ );
+ $result = $this->parse($xml);
+
+ $expected = array(
+ 'name' => 'VCALENDAR',
+ 'comp-filters' => array(
+ array(
+ 'name' => 'VEVENT',
+ 'comp-filters' => array(),
+ 'prop-filters' => array(),
+ 'is-not-defined' => false,
+ 'time-range' => array(
+ 'start' => new \DateTime('2011-01-01 00:00:00', new \DateTimeZone('GMT')),
+ 'end' => new \DateTime('2011-12-31 23:59:59', new \DateTimeZone('GMT')),
+ ),
+ ),
+ array(
+ 'name' => 'VTODO',
+ 'comp-filters' => array(),
+ 'prop-filters' => array(),
+ 'is-not-defined' => false,
+ 'time-range' => array(
+ 'start' => new \DateTime('2011-01-01 00:00:00', new \DateTimeZone('GMT')),
+ 'end' => null,
+ ),
+ ),
+ array(
+ 'name' => 'VJOURNAL',
+ 'comp-filters' => array(),
+ 'prop-filters' => array(),
+ 'is-not-defined' => false,
+ 'time-range' => array(
+ 'start' => null,
+ 'end' => new \DateTime('2011-12-31 23:59:59', new \DateTimeZone('GMT')),
+ ),
+ ),
+ ),
+ 'prop-filters' => array(),
+ 'is-not-defined' => false,
+ 'time-range' => false
+ );
+
+ $this->assertEquals(
+ $expected,
+ $result
+ );
+
+ }
+
+ /**
+ * @expectedException Sabre\DAV\Exception\BadRequest
+ */
+ function testCompTimeRangeBadRange() {
+
+ $xml = array(
+ '<c:filter>',
+ ' <c:comp-filter name="VCALENDAR">',
+ ' <c:comp-filter name="VEVENT">',
+ ' <c:time-range start="20110101T000000Z" end="20100101T000000Z" />',
+ ' </c:comp-filter>',
+ ' </c:comp-filter>',
+ '</c:filter>'
+ );
+ $this->parse($xml);
+
+ }
+
+ function testProp() {
+
+ $xml = array(
+ '<c:filter>',
+ ' <c:comp-filter name="VCALENDAR">',
+ ' <c:comp-filter name="VEVENT">',
+ ' <c:prop-filter name="SUMMARY">',
+ ' <c:text-match>vacation</c:text-match>',
+ ' </c:prop-filter>',
+ ' </c:comp-filter>',
+ ' </c:comp-filter>',
+ '</c:filter>'
+ );
+ $result = $this->parse($xml);
+
+ $expected = array(
+ 'name' => 'VCALENDAR',
+ 'comp-filters' => array(
+ array(
+ 'name' => 'VEVENT',
+ 'is-not-defined' => false,
+ 'comp-filters' => array(),
+ 'prop-filters' => array(
+ array(
+ 'name' => 'SUMMARY',
+ 'is-not-defined' => false,
+ 'param-filters' => array(),
+ 'text-match' => array(
+ 'negate-condition' => false,
+ 'collation' => 'i;ascii-casemap',
+ 'value' => 'vacation',
+ ),
+ 'time-range' => null,
+ ),
+ ),
+ 'time-range' => null,
+ ),
+ ),
+ 'prop-filters' => array(),
+ 'is-not-defined' => false,
+ 'time-range' => false
+ );
+
+ $this->assertEquals(
+ $expected,
+ $result
+ );
+
+ }
+
+ function testComplex() {
+
+ $xml = array(
+ '<c:filter>',
+ ' <c:comp-filter name="VCALENDAR">',
+ ' <c:comp-filter name="VEVENT">',
+ ' <c:prop-filter name="SUMMARY">',
+ ' <c:text-match collation="i;unicode-casemap">vacation</c:text-match>',
+ ' </c:prop-filter>',
+ ' <c:prop-filter name="DTSTAMP">',
+ ' <c:time-range start="20110704T000000Z" />',
+ ' </c:prop-filter>',
+ ' <c:prop-filter name="ORGANIZER">',
+ ' <c:is-not-defined />',
+ ' </c:prop-filter>',
+ ' <c:prop-filter name="DTSTART">',
+ ' <c:param-filter name="VALUE">',
+ ' <c:text-match negate-condition="yes">DATE</c:text-match>',
+ ' </c:param-filter>',
+ ' </c:prop-filter>',
+ ' </c:comp-filter>',
+ ' </c:comp-filter>',
+ '</c:filter>'
+ );
+ $result = $this->parse($xml);
+
+ $expected = array(
+ 'name' => 'VCALENDAR',
+ 'comp-filters' => array(
+ array(
+ 'name' => 'VEVENT',
+ 'is-not-defined' => false,
+ 'comp-filters' => array(),
+ 'prop-filters' => array(
+ array(
+ 'name' => 'SUMMARY',
+ 'is-not-defined' => false,
+ 'param-filters' => array(),
+ 'text-match' => array(
+ 'negate-condition' => false,
+ 'collation' => 'i;unicode-casemap',
+ 'value' => 'vacation',
+ ),
+ 'time-range' => null,
+ ),
+ array(
+ 'name' => 'DTSTAMP',
+ 'is-not-defined' => false,
+ 'param-filters' => array(),
+ 'text-match' => null,
+ 'time-range' => array(
+ 'start' => new \DateTime('2011-07-04 00:00:00', new \DateTimeZone('GMT')),
+ 'end' => null,
+ ),
+ ),
+ array(
+ 'name' => 'ORGANIZER',
+ 'is-not-defined' => true,
+ 'param-filters' => array(),
+ 'text-match' => null,
+ 'time-range' => null,
+ ),
+ array(
+ 'name' => 'DTSTART',
+ 'is-not-defined' => false,
+ 'param-filters' => array(
+ array(
+ 'name' => 'VALUE',
+ 'is-not-defined' => false,
+ 'text-match' => array(
+ 'negate-condition' => true,
+ 'value' => 'DATE',
+ 'collation' => 'i;ascii-casemap',
+ ),
+ ),
+ ),
+ 'text-match' => null,
+ 'time-range' => null,
+ ),
+ ),
+ 'time-range' => null,
+ ),
+ ),
+ 'prop-filters' => array(),
+ 'is-not-defined' => false,
+ 'time-range' => false
+ );
+
+ $this->assertEquals(
+ $expected,
+ $result
+ );
+
+ }
+
+ function testOther1() {
+
+ // This body was exactly sent to us from the sabredav mailing list. Checking if this parses correctly.
+
+ $body = <<<BLA
+<?xml version="1.0" encoding="utf-8" ?>
+<C:calendar-query xmlns:D="DAV:"
+xmlns:C="urn:ietf:params:xml:ns:caldav">
+ <D:prop>
+ <C:calendar-data/>
+ <D:getetag/>
+ </D:prop>
+ <C:filter>
+ <C:comp-filter name="VCALENDAR">
+ <C:comp-filter name="VEVENT">
+ <C:time-range start="20090101T000000Z" end="20121202T000000Z"/>
+ </C:comp-filter>
+ </C:comp-filter>
+ </C:filter>
+</C:calendar-query>
+BLA;
+
+ $dom = DAV\XMLUtil::loadDOMDocument($body);
+
+ $q = new CalendarQueryParser($dom);
+ $q->parse();
+
+ $this->assertEquals(array(
+ '{urn:ietf:params:xml:ns:caldav}calendar-data',
+ '{DAV:}getetag',
+ ), $q->requestedProperties);
+
+ $expectedFilters = array(
+ 'name' => 'VCALENDAR',
+ 'comp-filters' => array(
+ array(
+ 'name' => 'VEVENT',
+ 'comp-filters' => array(),
+ 'prop-filters' => array(),
+ 'time-range' => array(
+ 'start' => new \DateTime('2009-01-01 00:00:00', new \DateTimeZone('UTC')),
+ 'end' => new \DateTime('2012-12-02 00:00:00', new \DateTimeZone('UTC')),
+ ),
+ 'is-not-defined' => false,
+ ),
+ ),
+ 'prop-filters' => array(),
+ 'time-range' => null,
+ 'is-not-defined' => false,
+ );
+
+ $this->assertEquals($expectedFilters, $q->filters);
+
+ }
+
+ function testExpand() {
+
+ $xml = array(
+ '<d:prop>',
+ ' <c:calendar-data>',
+ ' <c:expand start="20110101T000000Z" end="20120101T000000Z"/>',
+ ' </c:calendar-data>',
+ '</d:prop>',
+ '<c:filter>',
+ ' <c:comp-filter name="VCALENDAR" />',
+ '</c:filter>'
+ );
+
+ $xml =
+'<?xml version="1.0"?>
+<c:calendar-query xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">
+' . implode("\n", $xml) . '
+</c:calendar-query>';
+
+ $dom = DAV\XMLUtil::loadDOMDocument($xml);
+ $q = new CalendarQueryParser($dom);
+ $q->parse();
+
+
+ $expected = array(
+ 'name' => 'VCALENDAR',
+ 'comp-filters' => array(),
+ 'prop-filters' => array(),
+ 'is-not-defined' => false,
+ 'time-range' => false
+ );
+
+ $this->assertEquals(
+ $expected,
+ $q->filters
+ );
+
+ $this->assertEquals(array(
+ '{urn:ietf:params:xml:ns:caldav}calendar-data',
+ ), $q->requestedProperties);
+
+ $this->assertEquals(
+ array(
+ 'start' => new \DateTime('2011-01-01 00:00:00', new \DateTimeZone('UTC')),
+ 'end' => new \DateTime('2012-01-01 00:00:00', new \DateTimeZone('UTC')),
+ ),
+ $q->expand
+ );
+
+ }
+
+ /**
+ * @expectedException Sabre\DAV\Exception\BadRequest
+ */
+ function testExpandNoStart() {
+
+ $xml = array(
+ '<d:prop>',
+ ' <c:calendar-data>',
+ ' <c:expand end="20120101T000000Z"/>',
+ ' </c:calendar-data>',
+ '</d:prop>',
+ '<c:filter>',
+ ' <c:comp-filter name="VCALENDAR" />',
+ '</c:filter>'
+ );
+
+ $xml =
+'<?xml version="1.0"?>
+<c:calendar-query xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">
+' . implode("\n", $xml) . '
+</c:calendar-query>';
+
+ $dom = DAV\XMLUtil::loadDOMDocument($xml);
+ $q = new CalendarQueryParser($dom);
+ $q->parse();
+
+ }
+ /**
+ * @expectedException Sabre\DAV\Exception\BadRequest
+ */
+ function testExpandNoEnd() {
+
+ $xml = array(
+ '<d:prop>',
+ ' <c:calendar-data>',
+ ' <c:expand start="20120101T000000Z"/>',
+ ' </c:calendar-data>',
+ '</d:prop>',
+ '<c:filter>',
+ ' <c:comp-filter name="VCALENDAR" />',
+ '</c:filter>'
+ );
+
+ $xml =
+'<?xml version="1.0"?>
+<c:calendar-query xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">
+' . implode("\n", $xml) . '
+</c:calendar-query>';
+
+ $dom = DAV\XMLUtil::loadDOMDocument($xml);
+ $q = new CalendarQueryParser($dom);
+ $q->parse();
+
+ }
+ /**
+ * @expectedException Sabre\DAV\Exception\BadRequest
+ */
+ function testExpandBadTimes() {
+
+ $xml = array(
+ '<d:prop>',
+ ' <c:calendar-data>',
+ ' <c:expand start="20120101T000000Z" end="19980101T000000Z"/>',
+ ' </c:calendar-data>',
+ '</d:prop>',
+ '<c:filter>',
+ ' <c:comp-filter name="VCALENDAR" />',
+ '</c:filter>'
+ );
+
+ $xml =
+'<?xml version="1.0"?>
+<c:calendar-query xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">
+' . implode("\n", $xml) . '
+</c:calendar-query>';
+
+ $dom = DAV\XMLUtil::loadDOMDocument($xml);
+ $q = new CalendarQueryParser($dom);
+ $q->parse();
+
+ }
+}