xref: /plugin/davcal/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalSearchPropertySetTest.php (revision a1a3b6794e0e143a4a8b51d3185ce2d339be61ab)
1*a1a3b679SAndreas Boehler<?php
2*a1a3b679SAndreas Boehler
3*a1a3b679SAndreas Boehlernamespace Sabre\DAVACL;
4*a1a3b679SAndreas Boehler
5*a1a3b679SAndreas Boehleruse Sabre\DAV;
6*a1a3b679SAndreas Boehleruse Sabre\HTTP;
7*a1a3b679SAndreas Boehler
8*a1a3b679SAndreas Boehlerrequire_once 'Sabre/HTTP/ResponseMock.php';
9*a1a3b679SAndreas Boehler
10*a1a3b679SAndreas Boehlerclass PrincipalSearchPropertySetTest extends \PHPUnit_Framework_TestCase {
11*a1a3b679SAndreas Boehler
12*a1a3b679SAndreas Boehler    function getServer() {
13*a1a3b679SAndreas Boehler
14*a1a3b679SAndreas Boehler        $backend = new PrincipalBackend\Mock();
15*a1a3b679SAndreas Boehler
16*a1a3b679SAndreas Boehler        $dir = new DAV\SimpleCollection('root');
17*a1a3b679SAndreas Boehler        $principals = new PrincipalCollection($backend);
18*a1a3b679SAndreas Boehler        $dir->addChild($principals);
19*a1a3b679SAndreas Boehler
20*a1a3b679SAndreas Boehler        $fakeServer = new DAV\Server($dir);
21*a1a3b679SAndreas Boehler        $fakeServer->sapi = new HTTP\SapiMock();
22*a1a3b679SAndreas Boehler        $fakeServer->httpResponse = new HTTP\ResponseMock();
23*a1a3b679SAndreas Boehler        $plugin = new Plugin($backend,'realm');
24*a1a3b679SAndreas Boehler        $this->assertTrue($plugin instanceof Plugin);
25*a1a3b679SAndreas Boehler        $fakeServer->addPlugin($plugin);
26*a1a3b679SAndreas Boehler        $this->assertEquals($plugin, $fakeServer->getPlugin('acl'));
27*a1a3b679SAndreas Boehler
28*a1a3b679SAndreas Boehler        return $fakeServer;
29*a1a3b679SAndreas Boehler
30*a1a3b679SAndreas Boehler    }
31*a1a3b679SAndreas Boehler
32*a1a3b679SAndreas Boehler    function testDepth1() {
33*a1a3b679SAndreas Boehler
34*a1a3b679SAndreas Boehler        $xml = '<?xml version="1.0"?>
35*a1a3b679SAndreas Boehler<d:principal-search-property-set xmlns:d="DAV:" />';
36*a1a3b679SAndreas Boehler
37*a1a3b679SAndreas Boehler        $serverVars = array(
38*a1a3b679SAndreas Boehler            'REQUEST_METHOD' => 'REPORT',
39*a1a3b679SAndreas Boehler            'HTTP_DEPTH'     => '1',
40*a1a3b679SAndreas Boehler            'REQUEST_URI'    => '/principals',
41*a1a3b679SAndreas Boehler        );
42*a1a3b679SAndreas Boehler
43*a1a3b679SAndreas Boehler        $request = HTTP\Sapi::createFromServerArray($serverVars);
44*a1a3b679SAndreas Boehler        $request->setBody($xml);
45*a1a3b679SAndreas Boehler
46*a1a3b679SAndreas Boehler        $server = $this->getServer();
47*a1a3b679SAndreas Boehler        $server->httpRequest = $request;
48*a1a3b679SAndreas Boehler
49*a1a3b679SAndreas Boehler        $server->exec();
50*a1a3b679SAndreas Boehler
51*a1a3b679SAndreas Boehler        $this->assertEquals(400, $server->httpResponse->status);
52*a1a3b679SAndreas Boehler        $this->assertEquals(array(
53*a1a3b679SAndreas Boehler            'X-Sabre-Version' => [DAV\Version::VERSION],
54*a1a3b679SAndreas Boehler            'Content-Type' => ['application/xml; charset=utf-8'],
55*a1a3b679SAndreas Boehler        ), $server->httpResponse->getHeaders());
56*a1a3b679SAndreas Boehler
57*a1a3b679SAndreas Boehler    }
58*a1a3b679SAndreas Boehler
59*a1a3b679SAndreas Boehler    function testDepthIncorrectXML() {
60*a1a3b679SAndreas Boehler
61*a1a3b679SAndreas Boehler        $xml = '<?xml version="1.0"?>
62*a1a3b679SAndreas Boehler<d:principal-search-property-set xmlns:d="DAV:"><d:ohell /></d:principal-search-property-set>';
63*a1a3b679SAndreas Boehler
64*a1a3b679SAndreas Boehler        $serverVars = array(
65*a1a3b679SAndreas Boehler            'REQUEST_METHOD' => 'REPORT',
66*a1a3b679SAndreas Boehler            'HTTP_DEPTH'     => '0',
67*a1a3b679SAndreas Boehler            'REQUEST_URI'    => '/principals',
68*a1a3b679SAndreas Boehler        );
69*a1a3b679SAndreas Boehler
70*a1a3b679SAndreas Boehler        $request = HTTP\Sapi::createFromServerArray($serverVars);
71*a1a3b679SAndreas Boehler        $request->setBody($xml);
72*a1a3b679SAndreas Boehler
73*a1a3b679SAndreas Boehler        $server = $this->getServer();
74*a1a3b679SAndreas Boehler        $server->httpRequest = $request;
75*a1a3b679SAndreas Boehler
76*a1a3b679SAndreas Boehler        $server->exec();
77*a1a3b679SAndreas Boehler
78*a1a3b679SAndreas Boehler        $this->assertEquals(400, $server->httpResponse->status, $server->httpResponse->body);
79*a1a3b679SAndreas Boehler        $this->assertEquals(array(
80*a1a3b679SAndreas Boehler            'X-Sabre-Version' => [DAV\Version::VERSION],
81*a1a3b679SAndreas Boehler            'Content-Type' => ['application/xml; charset=utf-8'],
82*a1a3b679SAndreas Boehler        ), $server->httpResponse->getHeaders());
83*a1a3b679SAndreas Boehler
84*a1a3b679SAndreas Boehler    }
85*a1a3b679SAndreas Boehler
86*a1a3b679SAndreas Boehler    function testCorrect() {
87*a1a3b679SAndreas Boehler
88*a1a3b679SAndreas Boehler        $xml = '<?xml version="1.0"?>
89*a1a3b679SAndreas Boehler<d:principal-search-property-set xmlns:d="DAV:"/>';
90*a1a3b679SAndreas Boehler
91*a1a3b679SAndreas Boehler        $serverVars = array(
92*a1a3b679SAndreas Boehler            'REQUEST_METHOD' => 'REPORT',
93*a1a3b679SAndreas Boehler            'HTTP_DEPTH'     => '0',
94*a1a3b679SAndreas Boehler            'REQUEST_URI'    => '/principals',
95*a1a3b679SAndreas Boehler        );
96*a1a3b679SAndreas Boehler
97*a1a3b679SAndreas Boehler        $request = HTTP\Sapi::createFromServerArray($serverVars);
98*a1a3b679SAndreas Boehler        $request->setBody($xml);
99*a1a3b679SAndreas Boehler
100*a1a3b679SAndreas Boehler        $server = $this->getServer();
101*a1a3b679SAndreas Boehler        $server->httpRequest = $request;
102*a1a3b679SAndreas Boehler
103*a1a3b679SAndreas Boehler        $server->exec();
104*a1a3b679SAndreas Boehler
105*a1a3b679SAndreas Boehler        $this->assertEquals(200, $server->httpResponse->status, $server->httpResponse->body);
106*a1a3b679SAndreas Boehler        $this->assertEquals(array(
107*a1a3b679SAndreas Boehler            'X-Sabre-Version' => [DAV\Version::VERSION],
108*a1a3b679SAndreas Boehler            'Content-Type' => ['application/xml; charset=utf-8'],
109*a1a3b679SAndreas Boehler        ), $server->httpResponse->getHeaders());
110*a1a3b679SAndreas Boehler
111*a1a3b679SAndreas Boehler
112*a1a3b679SAndreas Boehler        $check = array(
113*a1a3b679SAndreas Boehler            '/d:principal-search-property-set',
114*a1a3b679SAndreas Boehler            '/d:principal-search-property-set/d:principal-search-property' => 2,
115*a1a3b679SAndreas Boehler            '/d:principal-search-property-set/d:principal-search-property/d:prop' => 2,
116*a1a3b679SAndreas Boehler            '/d:principal-search-property-set/d:principal-search-property/d:prop/d:displayname' => 1,
117*a1a3b679SAndreas Boehler            '/d:principal-search-property-set/d:principal-search-property/d:prop/s:email-address' => 1,
118*a1a3b679SAndreas Boehler            '/d:principal-search-property-set/d:principal-search-property/d:description' => 2,
119*a1a3b679SAndreas Boehler        );
120*a1a3b679SAndreas Boehler
121*a1a3b679SAndreas Boehler        $xml = simplexml_load_string($server->httpResponse->body);
122*a1a3b679SAndreas Boehler        $xml->registerXPathNamespace('d','DAV:');
123*a1a3b679SAndreas Boehler        $xml->registerXPathNamespace('s','http://sabredav.org/ns');
124*a1a3b679SAndreas Boehler        foreach($check as $v1=>$v2) {
125*a1a3b679SAndreas Boehler
126*a1a3b679SAndreas Boehler            $xpath = is_int($v1)?$v2:$v1;
127*a1a3b679SAndreas Boehler
128*a1a3b679SAndreas Boehler            $result = $xml->xpath($xpath);
129*a1a3b679SAndreas Boehler
130*a1a3b679SAndreas Boehler            $count = 1;
131*a1a3b679SAndreas Boehler            if (!is_int($v1)) $count = $v2;
132*a1a3b679SAndreas Boehler
133*a1a3b679SAndreas Boehler            $this->assertEquals($count,count($result), 'we expected ' . $count . ' appearances of ' . $xpath . ' . We found ' . count($result) . '. Full response body: ' . $server->httpResponse->body);
134*a1a3b679SAndreas Boehler
135*a1a3b679SAndreas Boehler        }
136*a1a3b679SAndreas Boehler
137*a1a3b679SAndreas Boehler    }
138*a1a3b679SAndreas Boehler
139*a1a3b679SAndreas Boehler}
140