aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/sabre/dav/tests/Sabre/DAVACL/ExpandPropertiesTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/sabre/dav/tests/Sabre/DAVACL/ExpandPropertiesTest.php')
-rw-r--r--vendor/sabre/dav/tests/Sabre/DAVACL/ExpandPropertiesTest.php358
1 files changed, 358 insertions, 0 deletions
diff --git a/vendor/sabre/dav/tests/Sabre/DAVACL/ExpandPropertiesTest.php b/vendor/sabre/dav/tests/Sabre/DAVACL/ExpandPropertiesTest.php
new file mode 100644
index 000000000..324788d4a
--- /dev/null
+++ b/vendor/sabre/dav/tests/Sabre/DAVACL/ExpandPropertiesTest.php
@@ -0,0 +1,358 @@
+<?php
+
+namespace Sabre\DAVACL;
+
+use Sabre\DAV;
+use Sabre\HTTP;
+
+require_once 'Sabre/HTTP/ResponseMock.php';
+
+class ExpandPropertiesTest extends \PHPUnit_Framework_TestCase {
+
+ function getServer() {
+
+ $tree = array(
+ new MockPropertyNode('node1', array(
+ '{http://sabredav.org/ns}simple' => 'foo',
+ '{http://sabredav.org/ns}href' => new DAV\Property\Href('node2'),
+ '{DAV:}displayname' => 'Node 1',
+ )),
+ new MockPropertyNode('node2', array(
+ '{http://sabredav.org/ns}simple' => 'simple',
+ '{http://sabredav.org/ns}hreflist' => new DAV\Property\HrefList(array('node1','node3')),
+ '{DAV:}displayname' => 'Node 2',
+ )),
+ new MockPropertyNode('node3', array(
+ '{http://sabredav.org/ns}simple' => 'simple',
+ '{DAV:}displayname' => 'Node 3',
+ )),
+ );
+
+ $fakeServer = new DAV\Server($tree);
+ $fakeServer->debugExceptions = true;
+ $fakeServer->httpResponse = new HTTP\ResponseMock();
+ $plugin = new Plugin();
+ $plugin->allowAccessToNodesWithoutACL = true;
+
+ $this->assertTrue($plugin instanceof Plugin);
+ $fakeServer->addPlugin($plugin);
+ $this->assertEquals($plugin, $fakeServer->getPlugin('acl'));
+
+ return $fakeServer;
+
+ }
+
+ function testSimple() {
+
+ $xml = '<?xml version="1.0"?>
+<d:expand-property xmlns:d="DAV:">
+ <d:property name="displayname" />
+ <d:property name="foo" namespace="http://www.sabredav.org/NS/2010/nonexistant" />
+ <d:property name="simple" namespace="http://sabredav.org/ns" />
+ <d:property name="href" namespace="http://sabredav.org/ns" />
+</d:expand-property>';
+
+ $serverVars = array(
+ 'REQUEST_METHOD' => 'REPORT',
+ 'HTTP_DEPTH' => '0',
+ 'REQUEST_URI' => '/node1',
+ );
+
+ $request = new HTTP\Request($serverVars);
+ $request->setBody($xml);
+
+ $server = $this->getServer();
+ $server->httpRequest = $request;
+
+ $server->exec();
+
+ $this->assertEquals('HTTP/1.1 207 Multi-Status', $server->httpResponse->status,'Incorrect status code received. Full body: ' . $server->httpResponse->body);
+ $this->assertEquals(array(
+ 'Content-Type' => 'application/xml; charset=utf-8',
+ ), $server->httpResponse->headers);
+
+
+ $check = array(
+ '/d:multistatus',
+ '/d:multistatus/d:response' => 1,
+ '/d:multistatus/d:response/d:href' => 1,
+ '/d:multistatus/d:response/d:propstat' => 2,
+ '/d:multistatus/d:response/d:propstat/d:prop' => 2,
+ '/d:multistatus/d:response/d:propstat/d:prop/d:displayname' => 1,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:simple' => 1,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:href' => 1,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:href/d:href' => 1,
+ );
+
+ $xml = simplexml_load_string($server->httpResponse->body);
+ $xml->registerXPathNamespace('d','DAV:');
+ $xml->registerXPathNamespace('s','http://sabredav.org/ns');
+ foreach($check as $v1=>$v2) {
+
+ $xpath = is_int($v1)?$v2:$v1;
+
+ $result = $xml->xpath($xpath);
+
+ $count = 1;
+ if (!is_int($v1)) $count = $v2;
+
+ $this->assertEquals($count,count($result), 'we expected ' . $count . ' appearances of ' . $xpath . ' . We found ' . count($result) . '. Full response: ' . $server->httpResponse->body);
+
+ }
+
+ }
+
+ /**
+ * @depends testSimple
+ */
+ function testExpand() {
+
+ $xml = '<?xml version="1.0"?>
+<d:expand-property xmlns:d="DAV:">
+ <d:property name="href" namespace="http://sabredav.org/ns">
+ <d:property name="displayname" />
+ </d:property>
+</d:expand-property>';
+
+ $serverVars = array(
+ 'REQUEST_METHOD' => 'REPORT',
+ 'HTTP_DEPTH' => '0',
+ 'REQUEST_URI' => '/node1',
+ );
+
+ $request = new HTTP\Request($serverVars);
+ $request->setBody($xml);
+
+ $server = $this->getServer();
+ $server->httpRequest = $request;
+
+ $server->exec();
+
+ $this->assertEquals('HTTP/1.1 207 Multi-Status', $server->httpResponse->status, 'Incorrect response status received. Full response body: ' . $server->httpResponse->body);
+ $this->assertEquals(array(
+ 'Content-Type' => 'application/xml; charset=utf-8',
+ ), $server->httpResponse->headers);
+
+
+ $check = array(
+ '/d:multistatus',
+ '/d:multistatus/d:response' => 1,
+ '/d:multistatus/d:response/d:href' => 1,
+ '/d:multistatus/d:response/d:propstat' => 1,
+ '/d:multistatus/d:response/d:propstat/d:prop' => 1,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:href' => 1,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:href/d:response' => 1,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:href/d:response/d:href' => 1,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:href/d:response/d:propstat' => 1,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:href/d:response/d:propstat/d:prop' => 1,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:href/d:response/d:propstat/d:prop/d:displayname' => 1,
+ );
+
+ $xml = simplexml_load_string($server->httpResponse->body);
+ $xml->registerXPathNamespace('d','DAV:');
+ $xml->registerXPathNamespace('s','http://sabredav.org/ns');
+ foreach($check as $v1=>$v2) {
+
+ $xpath = is_int($v1)?$v2:$v1;
+
+ $result = $xml->xpath($xpath);
+
+ $count = 1;
+ if (!is_int($v1)) $count = $v2;
+
+ $this->assertEquals($count,count($result), 'we expected ' . $count . ' appearances of ' . $xpath . ' . We found ' . count($result));
+
+ }
+
+ }
+
+ /**
+ * @depends testSimple
+ */
+ function testExpandHrefList() {
+
+ $xml = '<?xml version="1.0"?>
+<d:expand-property xmlns:d="DAV:">
+ <d:property name="hreflist" namespace="http://sabredav.org/ns">
+ <d:property name="displayname" />
+ </d:property>
+</d:expand-property>';
+
+ $serverVars = array(
+ 'REQUEST_METHOD' => 'REPORT',
+ 'HTTP_DEPTH' => '0',
+ 'REQUEST_URI' => '/node2',
+ );
+
+ $request = new HTTP\Request($serverVars);
+ $request->setBody($xml);
+
+ $server = $this->getServer();
+ $server->httpRequest = $request;
+
+ $server->exec();
+
+ $this->assertEquals('HTTP/1.1 207 Multi-Status', $server->httpResponse->status);
+ $this->assertEquals(array(
+ 'Content-Type' => 'application/xml; charset=utf-8',
+ ), $server->httpResponse->headers);
+
+
+ $check = array(
+ '/d:multistatus',
+ '/d:multistatus/d:response' => 1,
+ '/d:multistatus/d:response/d:href' => 1,
+ '/d:multistatus/d:response/d:propstat' => 1,
+ '/d:multistatus/d:response/d:propstat/d:prop' => 1,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist' => 1,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response' => 2,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:href' => 2,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat' => 2,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop' => 2,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop/d:displayname' => 2,
+ );
+
+ $xml = simplexml_load_string($server->httpResponse->body);
+ $xml->registerXPathNamespace('d','DAV:');
+ $xml->registerXPathNamespace('s','http://sabredav.org/ns');
+ foreach($check as $v1=>$v2) {
+
+ $xpath = is_int($v1)?$v2:$v1;
+
+ $result = $xml->xpath($xpath);
+
+ $count = 1;
+ if (!is_int($v1)) $count = $v2;
+
+ $this->assertEquals($count,count($result), 'we expected ' . $count . ' appearances of ' . $xpath . ' . We found ' . count($result));
+
+ }
+
+ }
+
+ /**
+ * @depends testExpand
+ */
+ function testExpandDeep() {
+
+ $xml = '<?xml version="1.0"?>
+<d:expand-property xmlns:d="DAV:">
+ <d:property name="hreflist" namespace="http://sabredav.org/ns">
+ <d:property name="href" namespace="http://sabredav.org/ns">
+ <d:property name="displayname" />
+ </d:property>
+ <d:property name="displayname" />
+ </d:property>
+</d:expand-property>';
+
+ $serverVars = array(
+ 'REQUEST_METHOD' => 'REPORT',
+ 'HTTP_DEPTH' => '0',
+ 'REQUEST_URI' => '/node2',
+ );
+
+ $request = new HTTP\Request($serverVars);
+ $request->setBody($xml);
+
+ $server = $this->getServer();
+ $server->httpRequest = $request;
+
+ $server->exec();
+
+ $this->assertEquals('HTTP/1.1 207 Multi-Status', $server->httpResponse->status);
+ $this->assertEquals(array(
+ 'Content-Type' => 'application/xml; charset=utf-8',
+ ), $server->httpResponse->headers);
+
+
+ $check = array(
+ '/d:multistatus',
+ '/d:multistatus/d:response' => 1,
+ '/d:multistatus/d:response/d:href' => 1,
+ '/d:multistatus/d:response/d:propstat' => 1,
+ '/d:multistatus/d:response/d:propstat/d:prop' => 1,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist' => 1,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response' => 2,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:href' => 2,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat' => 3,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop' => 3,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop/d:displayname' => 2,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop/s:href' => 2,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop/s:href/d:response' => 1,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop/s:href/d:response/d:href' => 1,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop/s:href/d:response/d:propstat' => 1,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop/s:href/d:response/d:propstat/d:prop' => 1,
+ '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop/s:href/d:response/d:propstat/d:prop/d:displayname' => 1,
+ );
+
+ $xml = simplexml_load_string($server->httpResponse->body);
+ $xml->registerXPathNamespace('d','DAV:');
+ $xml->registerXPathNamespace('s','http://sabredav.org/ns');
+ foreach($check as $v1=>$v2) {
+
+ $xpath = is_int($v1)?$v2:$v1;
+
+ $result = $xml->xpath($xpath);
+
+ $count = 1;
+ if (!is_int($v1)) $count = $v2;
+
+ $this->assertEquals($count,count($result), 'we expected ' . $count . ' appearances of ' . $xpath . ' . We found ' . count($result));
+
+ }
+
+ }
+}
+class MockPropertyNode implements DAV\INode, DAV\IProperties {
+
+ function __construct($name, array $properties) {
+
+ $this->name = $name;
+ $this->properties = $properties;
+
+ }
+
+ function getName() {
+
+ return $this->name;
+
+ }
+
+ function getProperties($requestedProperties) {
+
+ $returnedProperties = array();
+ foreach($requestedProperties as $requestedProperty) {
+ if (isset($this->properties[$requestedProperty])) {
+ $returnedProperties[$requestedProperty] =
+ $this->properties[$requestedProperty];
+ }
+ }
+ return $returnedProperties;
+
+ }
+
+ function delete() {
+
+ throw new DAV\Exception('Not implemented');
+
+ }
+
+ function setName($name) {
+
+ throw new DAV\Exception('Not implemented');
+
+ }
+
+ function getLastModified() {
+
+ return null;
+
+ }
+
+ function updateProperties($properties) {
+
+ throw new DAV\Exception('Not implemented');
+
+ }
+
+}