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