[Pkg-owncloud-commits] [php-sabredav] 94/148: CardDAV is at 100% coverage again.
David Prévot
taffit at moszumanska.debian.org
Wed Apr 15 01:37:21 UTC 2015
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to branch master
in repository php-sabredav.
commit 12358d8599ba5f5e67164d9396dfe7b100d3ce48
Author: Evert Pot <me at evertpot.com>
Date: Fri Mar 27 15:57:05 2015 -0700
CardDAV is at 100% coverage again.
---
lib/CardDAV/Xml/Filter/ParamFilter.php | 4 -
lib/CardDAV/Xml/Request/AddressBookQueryReport.php | 29 +-
tests/Sabre/CardDAV/PluginTest.php | 1 +
.../Xml/Request/AddressBookQueryReportTest.php | 302 +++++++++++++++++++++
tests/Sabre/DAV/Xml/XmlTest.php | 5 +-
5 files changed, 330 insertions(+), 11 deletions(-)
diff --git a/lib/CardDAV/Xml/Filter/ParamFilter.php b/lib/CardDAV/Xml/Filter/ParamFilter.php
index 44fba48..706929c 100644
--- a/lib/CardDAV/Xml/Filter/ParamFilter.php
+++ b/lib/CardDAV/Xml/Filter/ParamFilter.php
@@ -55,10 +55,6 @@ abstract class ParamFilter implements Element {
$att = $reader->parseAttributes();
$result['name'] = $att['name'];
- if (isset($att['test']) && $att['test']==='allof') {
- $result['test'] = 'allof';
- }
-
$elems = $reader->parseInnerTree();
if (is_array($elems)) foreach($elems as $elem) {
diff --git a/lib/CardDAV/Xml/Request/AddressBookQueryReport.php b/lib/CardDAV/Xml/Request/AddressBookQueryReport.php
index 1e03794..3982668 100644
--- a/lib/CardDAV/Xml/Request/AddressBookQueryReport.php
+++ b/lib/CardDAV/Xml/Request/AddressBookQueryReport.php
@@ -31,6 +31,27 @@ class AddressBookQueryReport implements XmlDeserializable {
/**
* List of property/component filters.
*
+ * This is an array with filters. Every item is a property filter. Every
+ * property filter has the following keys:
+ * * name - name of the component to filter on
+ * * test - anyof or allof
+ * * is-not-defined - Test for non-existence
+ * * param-filters - A list of parameter filters on the property
+ * * text-matches - A list of text values the filter needs to match
+ *
+ * Each param-filter has the following keys:
+ * * name - name of the parameter
+ * * is-not-defined - Test for non-existence
+ * * text-match - Match the parameter value
+ *
+ * Each text-match in property filters, and the single text-match in
+ * param-filters have the following keys:
+ *
+ * * value - value to match
+ * * match-type - contains, starts-with, ends-with, equals
+ * * negate-condition - Do the opposite match
+ * * collation - Usually i;unicode-casemap
+ *
* @var array
*/
public $filters;
@@ -91,7 +112,7 @@ class AddressBookQueryReport implements XmlDeserializable {
*/
static function xmlDeserialize(Reader $reader) {
- $elems = $reader->parseInnerTree([
+ $elems = (array)$reader->parseInnerTree([
'{urn:ietf:params:xml:ns:carddav}prop-filter' => 'Sabre\\CardDAV\\Xml\\Filter\\PropFilter',
'{urn:ietf:params:xml:ns:carddav}param-filter' => 'Sabre\\CardDAV\\Xml\\Filter\\ParamFilter',
'{urn:ietf:params:xml:ns:carddav}address-data' => 'Sabre\\CardDAV\\Xml\\Filter\\AddressData',
@@ -129,11 +150,9 @@ class AddressBookQueryReport implements XmlDeserializable {
}
}
- foreach($elem['value'] as $subElem) {
+ $newProps['filters'] = [];
+ foreach((array)$elem['value'] as $subElem) {
if ($subElem['name'] === '{' . Plugin::NS_CARDDAV . '}prop-filter') {
- if (is_null($newProps['filters'])) {
- $newProps['filters'] = [];
- }
$newProps['filters'][] = $subElem['value'];
}
}
diff --git a/tests/Sabre/CardDAV/PluginTest.php b/tests/Sabre/CardDAV/PluginTest.php
index 8c0b53e..3f95e66 100644
--- a/tests/Sabre/CardDAV/PluginTest.php
+++ b/tests/Sabre/CardDAV/PluginTest.php
@@ -12,6 +12,7 @@ class PluginTest extends AbstractPluginTest {
$this->assertEquals('{' . Plugin::NS_CARDDAV . '}addressbook', $this->server->resourceTypeMapping['Sabre\\CardDAV\\IAddressBook']);
$this->assertTrue(in_array('addressbook', $this->plugin->getFeatures()));
+ $this->assertEquals('carddav', $this->plugin->getPluginInfo()['name']);
}
diff --git a/tests/Sabre/CardDAV/Xml/Request/AddressBookQueryReportTest.php b/tests/Sabre/CardDAV/Xml/Request/AddressBookQueryReportTest.php
new file mode 100644
index 0000000..b110e20
--- /dev/null
+++ b/tests/Sabre/CardDAV/Xml/Request/AddressBookQueryReportTest.php
@@ -0,0 +1,302 @@
+<?php
+
+namespace Sabre\CardDAV\Xml\Request;
+use Sabre\DAV\Xml\XmlTest;
+
+class AddressBookQueryReportTest extends XmlTest {
+
+ protected $elementMap = [
+ '{urn:ietf:params:xml:ns:carddav}addressbook-query' => 'Sabre\\CardDAV\\Xml\\Request\AddressBookQueryReport',
+ ];
+
+ function testDeserialize() {
+
+ $xml = <<<XML
+<?xml version="1.0"?>
+<c:addressbook-query xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:carddav">
+ <d:prop>
+ <d:getetag />
+ </d:prop>
+ <c:filter>
+ <c:prop-filter name="uid" />
+ </c:filter>
+</c:addressbook-query>
+XML;
+
+ $result = $this->parse($xml);
+ $addressBookQueryReport = new AddressBookQueryReport();
+ $addressBookQueryReport->properties = [
+ '{DAV:}getetag',
+ ];
+ $addressBookQueryReport->test = 'anyof';
+ $addressBookQueryReport->filters = [
+ [
+ 'name' => 'uid',
+ 'test' => 'anyof',
+ 'is-not-defined' => false,
+ 'param-filters' => [],
+ 'text-matches' => [],
+ ]
+ ];
+
+ $this->assertEquals(
+ $addressBookQueryReport,
+ $result['value']
+ );
+
+ }
+
+ function testDeserializeAllOf() {
+
+ $xml = <<<XML
+<?xml version="1.0"?>
+<c:addressbook-query xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:carddav">
+ <d:prop>
+ <d:getetag />
+ </d:prop>
+ <c:filter test="allof">
+ <c:prop-filter name="uid" />
+ </c:filter>
+</c:addressbook-query>
+XML;
+
+ $result = $this->parse($xml);
+ $addressBookQueryReport = new AddressBookQueryReport();
+ $addressBookQueryReport->properties = [
+ '{DAV:}getetag',
+ ];
+ $addressBookQueryReport->test = 'allof';
+ $addressBookQueryReport->filters = [
+ [
+ 'name' => 'uid',
+ 'test' => 'anyof',
+ 'is-not-defined' => false,
+ 'param-filters' => [],
+ 'text-matches' => [],
+ ]
+ ];
+
+ $this->assertEquals(
+ $addressBookQueryReport,
+ $result['value']
+ );
+
+ }
+
+ /**
+ * @expectedException \Sabre\DAV\Exception\BadRequest
+ */
+ function testDeserializeBadTest() {
+
+ $xml = <<<XML
+<?xml version="1.0"?>
+<c:addressbook-query xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:carddav">
+ <d:prop>
+ <d:getetag />
+ </d:prop>
+ <c:filter test="bad">
+ <c:prop-filter name="uid" />
+ </c:filter>
+</c:addressbook-query>
+XML;
+
+ $this->parse($xml);
+
+ }
+
+ /**
+ * We should error on this, but KDE does this, so we chose to support it.
+ */
+ function testDeserializeNoFilter() {
+
+ $xml = <<<XML
+<?xml version="1.0"?>
+<c:addressbook-query xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:carddav">
+ <d:prop>
+ <d:getetag />
+ </d:prop>
+</c:addressbook-query>
+XML;
+
+ $result = $this->parse($xml);
+ $addressBookQueryReport = new AddressBookQueryReport();
+ $addressBookQueryReport->properties = [
+ '{DAV:}getetag',
+ ];
+ $addressBookQueryReport->test = 'anyof';
+ $addressBookQueryReport->filters = [];
+
+ $this->assertEquals(
+ $addressBookQueryReport,
+ $result['value']
+ );
+
+ }
+
+ function testDeserializeComplex() {
+
+ $xml = <<<XML
+<?xml version="1.0"?>
+<c:addressbook-query xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:carddav">
+ <d:prop>
+ <d:getetag />
+ <c:address-data content-type="application/vcard+json" version="4.0" />
+ </d:prop>
+ <c:filter>
+ <c:prop-filter name="uid">
+ <c:is-not-defined />
+ </c:prop-filter>
+ <c:prop-filter name="x-foo" test="allof">
+ <c:param-filter name="x-param1" />
+ <c:param-filter name="x-param2">
+ <c:is-not-defined />
+ </c:param-filter>
+ <c:param-filter name="x-param3">
+ <c:text-match match-type="contains">Hello!</c:text-match>
+ </c:param-filter>
+ </c:prop-filter>
+ <c:prop-filter name="x-prop2">
+ <c:text-match match-type="starts-with" negate-condition="yes">No</c:text-match>
+ </c:prop-filter>
+ </c:filter>
+ <c:limit><c:nresults>10</c:nresults></c:limit>
+</c:addressbook-query>
+XML;
+
+ $result = $this->parse($xml);
+ $addressBookQueryReport = new AddressBookQueryReport();
+ $addressBookQueryReport->properties = [
+ '{DAV:}getetag',
+ '{urn:ietf:params:xml:ns:carddav}address-data',
+ ];
+ $addressBookQueryReport->test = 'anyof';
+ $addressBookQueryReport->filters = [
+ [
+ 'name' => 'uid',
+ 'test' => 'anyof',
+ 'is-not-defined' => true,
+ 'param-filters' => [],
+ 'text-matches' => [],
+ ],
+ [
+ 'name' => 'x-foo',
+ 'test' => 'allof',
+ 'is-not-defined' => false,
+ 'param-filters' => [
+ [
+ 'name' => 'x-param1',
+ 'is-not-defined' => false,
+ 'text-match' => null,
+ ],
+ [
+ 'name' => 'x-param2',
+ 'is-not-defined' => true,
+ 'text-match' => null,
+ ],
+ [
+ 'name' => 'x-param3',
+ 'is-not-defined' => false,
+ 'text-match' => [
+ 'negate-condition' => false,
+ 'value' => 'Hello!',
+ 'match-type' => 'contains',
+ 'collation' => 'i;unicode-casemap',
+ ],
+ ],
+ ],
+ 'text-matches' => [],
+ ],
+ [
+ 'name' => 'x-prop2',
+ 'test' => 'anyof',
+ 'is-not-defined' => false,
+ 'param-filters' => [],
+ 'text-matches' => [
+ [
+ 'negate-condition' => true,
+ 'value' => 'No',
+ 'match-type' => 'starts-with',
+ 'collation' => 'i;unicode-casemap',
+ ],
+ ],
+ ]
+ ];
+
+ $addressBookQueryReport->version = '4.0';
+ $addressBookQueryReport->contentType = 'application/vcard+json';
+ $addressBookQueryReport->limit = 10;
+
+ $this->assertEquals(
+ $addressBookQueryReport,
+ $result['value']
+ );
+
+ }
+
+ /**
+ * @expectedException \Sabre\DAV\Exception\BadRequest
+ */
+ function testDeserializeBadMatchType() {
+
+ $xml = <<<XML
+<?xml version="1.0"?>
+<c:addressbook-query xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:carddav">
+ <d:prop>
+ <d:getetag />
+ </d:prop>
+ <c:filter>
+ <c:prop-filter name="x-foo" test="allof">
+ <c:param-filter name="x-param3">
+ <c:text-match match-type="bad">Hello!</c:text-match>
+ </c:param-filter>
+ </c:prop-filter>
+ </c:filter>
+</c:addressbook-query>
+XML;
+ $this->parse($xml);
+
+ }
+
+ /**
+ * @expectedException \Sabre\DAV\Exception\BadRequest
+ */
+ function testDeserializeBadMatchType2() {
+
+ $xml = <<<XML
+<?xml version="1.0"?>
+<c:addressbook-query xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:carddav">
+ <d:prop>
+ <d:getetag />
+ </d:prop>
+ <c:filter>
+ <c:prop-filter name="x-prop2">
+ <c:text-match match-type="bad" negate-condition="yes">No</c:text-match>
+ </c:prop-filter>
+ </c:filter>
+</c:addressbook-query>
+XML;
+ $this->parse($xml);
+
+ }
+
+ /**
+ * @expectedException \Sabre\DAV\Exception\BadRequest
+ */
+ function testDeserializeDoubleFilter() {
+
+ $xml = <<<XML
+<?xml version="1.0"?>
+<c:addressbook-query xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:carddav">
+ <d:prop>
+ <d:getetag />
+ </d:prop>
+ <c:filter>
+ </c:filter>
+ <c:filter>
+ </c:filter>
+</c:addressbook-query>
+XML;
+ $this->parse($xml);
+
+ }
+}
diff --git a/tests/Sabre/DAV/Xml/XmlTest.php b/tests/Sabre/DAV/Xml/XmlTest.php
index 33246f2..9867011 100644
--- a/tests/Sabre/DAV/Xml/XmlTest.php
+++ b/tests/Sabre/DAV/Xml/XmlTest.php
@@ -7,6 +7,7 @@ use Sabre\Xml\Reader;
abstract class XmlTest extends \PHPUnit_Framework_TestCase {
+ protected $elementMap = [];
protected $namespaceMap = ['DAV:' => 'd'];
protected $contextUri = '/';
@@ -22,10 +23,10 @@ abstract class XmlTest extends \PHPUnit_Framework_TestCase {
}
- function parse($xml, $elementMap) {
+ function parse($xml, array $elementMap = []) {
$reader = new Reader();
- $reader->elementMap = $elementMap;
+ $reader->elementMap = array_merge($this->elementMap, $elementMap);
$reader->xml($xml);
return $reader->parse();
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/php-sabredav.git
More information about the Pkg-owncloud-commits
mailing list