1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\DAV; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehleruse Sabre\HTTP\Request; 6*a1a3b679SAndreas Boehleruse Sabre\HTTP\Response; 7*a1a3b679SAndreas Boehler 8*a1a3b679SAndreas Boehlerrequire_once 'Sabre/DAV/ClientMock.php'; 9*a1a3b679SAndreas Boehler 10*a1a3b679SAndreas Boehlerclass ClientTest extends \PHPUnit_Framework_TestCase { 11*a1a3b679SAndreas Boehler 12*a1a3b679SAndreas Boehler function testConstruct() { 13*a1a3b679SAndreas Boehler 14*a1a3b679SAndreas Boehler $client = new ClientMock(array( 15*a1a3b679SAndreas Boehler 'baseUri' => '/', 16*a1a3b679SAndreas Boehler )); 17*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\DAV\ClientMock', $client); 18*a1a3b679SAndreas Boehler 19*a1a3b679SAndreas Boehler } 20*a1a3b679SAndreas Boehler 21*a1a3b679SAndreas Boehler /** 22*a1a3b679SAndreas Boehler * @expectedException InvalidArgumentException 23*a1a3b679SAndreas Boehler */ 24*a1a3b679SAndreas Boehler function testConstructNoBaseUri() { 25*a1a3b679SAndreas Boehler 26*a1a3b679SAndreas Boehler $client = new ClientMock(array()); 27*a1a3b679SAndreas Boehler 28*a1a3b679SAndreas Boehler } 29*a1a3b679SAndreas Boehler 30*a1a3b679SAndreas Boehler function testAuth() { 31*a1a3b679SAndreas Boehler 32*a1a3b679SAndreas Boehler $client = new ClientMock([ 33*a1a3b679SAndreas Boehler 'baseUri' => '/', 34*a1a3b679SAndreas Boehler 'userName' => 'foo', 35*a1a3b679SAndreas Boehler 'password' => 'bar', 36*a1a3b679SAndreas Boehler ]); 37*a1a3b679SAndreas Boehler 38*a1a3b679SAndreas Boehler $this->assertEquals("foo:bar", $client->curlSettings[CURLOPT_USERPWD]); 39*a1a3b679SAndreas Boehler $this->assertEquals(CURLAUTH_BASIC | CURLAUTH_DIGEST, $client->curlSettings[CURLOPT_HTTPAUTH]); 40*a1a3b679SAndreas Boehler 41*a1a3b679SAndreas Boehler } 42*a1a3b679SAndreas Boehler 43*a1a3b679SAndreas Boehler function testBasicAuth() { 44*a1a3b679SAndreas Boehler 45*a1a3b679SAndreas Boehler $client = new ClientMock([ 46*a1a3b679SAndreas Boehler 'baseUri' => '/', 47*a1a3b679SAndreas Boehler 'userName' => 'foo', 48*a1a3b679SAndreas Boehler 'password' => 'bar', 49*a1a3b679SAndreas Boehler 'authType' => Client::AUTH_BASIC 50*a1a3b679SAndreas Boehler ]); 51*a1a3b679SAndreas Boehler 52*a1a3b679SAndreas Boehler $this->assertEquals("foo:bar", $client->curlSettings[CURLOPT_USERPWD]); 53*a1a3b679SAndreas Boehler $this->assertEquals(CURLAUTH_BASIC, $client->curlSettings[CURLOPT_HTTPAUTH]); 54*a1a3b679SAndreas Boehler 55*a1a3b679SAndreas Boehler } 56*a1a3b679SAndreas Boehler 57*a1a3b679SAndreas Boehler function testDigestAuth() { 58*a1a3b679SAndreas Boehler 59*a1a3b679SAndreas Boehler $client = new ClientMock([ 60*a1a3b679SAndreas Boehler 'baseUri' => '/', 61*a1a3b679SAndreas Boehler 'userName' => 'foo', 62*a1a3b679SAndreas Boehler 'password' => 'bar', 63*a1a3b679SAndreas Boehler 'authType' => Client::AUTH_DIGEST 64*a1a3b679SAndreas Boehler ]); 65*a1a3b679SAndreas Boehler 66*a1a3b679SAndreas Boehler $this->assertEquals("foo:bar", $client->curlSettings[CURLOPT_USERPWD]); 67*a1a3b679SAndreas Boehler $this->assertEquals(CURLAUTH_DIGEST, $client->curlSettings[CURLOPT_HTTPAUTH]); 68*a1a3b679SAndreas Boehler 69*a1a3b679SAndreas Boehler } 70*a1a3b679SAndreas Boehler 71*a1a3b679SAndreas Boehler function testNTLMAuth() { 72*a1a3b679SAndreas Boehler 73*a1a3b679SAndreas Boehler $client = new ClientMock([ 74*a1a3b679SAndreas Boehler 'baseUri' => '/', 75*a1a3b679SAndreas Boehler 'userName' => 'foo', 76*a1a3b679SAndreas Boehler 'password' => 'bar', 77*a1a3b679SAndreas Boehler 'authType' => Client::AUTH_NTLM 78*a1a3b679SAndreas Boehler ]); 79*a1a3b679SAndreas Boehler 80*a1a3b679SAndreas Boehler $this->assertEquals("foo:bar", $client->curlSettings[CURLOPT_USERPWD]); 81*a1a3b679SAndreas Boehler $this->assertEquals(CURLAUTH_NTLM, $client->curlSettings[CURLOPT_HTTPAUTH]); 82*a1a3b679SAndreas Boehler 83*a1a3b679SAndreas Boehler } 84*a1a3b679SAndreas Boehler 85*a1a3b679SAndreas Boehler function testProxy() { 86*a1a3b679SAndreas Boehler 87*a1a3b679SAndreas Boehler $client = new ClientMock([ 88*a1a3b679SAndreas Boehler 'baseUri' => '/', 89*a1a3b679SAndreas Boehler 'proxy' => 'localhost:8888', 90*a1a3b679SAndreas Boehler ]); 91*a1a3b679SAndreas Boehler 92*a1a3b679SAndreas Boehler $this->assertEquals("localhost:8888", $client->curlSettings[CURLOPT_PROXY]); 93*a1a3b679SAndreas Boehler 94*a1a3b679SAndreas Boehler } 95*a1a3b679SAndreas Boehler 96*a1a3b679SAndreas Boehler function testEncoding() { 97*a1a3b679SAndreas Boehler 98*a1a3b679SAndreas Boehler $client = new ClientMock([ 99*a1a3b679SAndreas Boehler 'baseUri' => '/', 100*a1a3b679SAndreas Boehler 'encoding' => Client::ENCODING_IDENTITY | Client::ENCODING_GZIP | Client::ENCODING_DEFLATE, 101*a1a3b679SAndreas Boehler ]); 102*a1a3b679SAndreas Boehler 103*a1a3b679SAndreas Boehler $this->assertEquals("identity,deflate,gzip", $client->curlSettings[CURLOPT_ENCODING]); 104*a1a3b679SAndreas Boehler 105*a1a3b679SAndreas Boehler } 106*a1a3b679SAndreas Boehler 107*a1a3b679SAndreas Boehler function testPropFind() { 108*a1a3b679SAndreas Boehler 109*a1a3b679SAndreas Boehler $client = new ClientMock([ 110*a1a3b679SAndreas Boehler 'baseUri' => '/', 111*a1a3b679SAndreas Boehler ]); 112*a1a3b679SAndreas Boehler 113*a1a3b679SAndreas Boehler $responseBody = <<<XML 114*a1a3b679SAndreas Boehler<?xml version="1.0"?> 115*a1a3b679SAndreas Boehler<multistatus xmlns="DAV:"> 116*a1a3b679SAndreas Boehler<response> 117*a1a3b679SAndreas Boehler <href>/foo</href> 118*a1a3b679SAndreas Boehler <propstat> 119*a1a3b679SAndreas Boehler <prop> 120*a1a3b679SAndreas Boehler <displayname>bar</displayname> 121*a1a3b679SAndreas Boehler </prop> 122*a1a3b679SAndreas Boehler <status>HTTP/1.1 200 OK</status> 123*a1a3b679SAndreas Boehler </propstat> 124*a1a3b679SAndreas Boehler</response> 125*a1a3b679SAndreas Boehler</multistatus> 126*a1a3b679SAndreas BoehlerXML; 127*a1a3b679SAndreas Boehler 128*a1a3b679SAndreas Boehler $client->response = new Response(207, [], $responseBody); 129*a1a3b679SAndreas Boehler $result = $client->propfind('foo', ['{DAV:}displayname', '{urn:zim}gir']); 130*a1a3b679SAndreas Boehler 131*a1a3b679SAndreas Boehler $this->assertEquals(['{DAV:}displayname' => 'bar'], $result); 132*a1a3b679SAndreas Boehler 133*a1a3b679SAndreas Boehler $request = $client->request; 134*a1a3b679SAndreas Boehler $this->assertEquals('PROPFIND', $request->getMethod()); 135*a1a3b679SAndreas Boehler $this->assertEquals('/foo', $request->getUrl()); 136*a1a3b679SAndreas Boehler $this->assertEquals([ 137*a1a3b679SAndreas Boehler 'Depth' => ['0'], 138*a1a3b679SAndreas Boehler 'Content-Type' => ['application/xml'], 139*a1a3b679SAndreas Boehler ], $request->getHeaders()); 140*a1a3b679SAndreas Boehler 141*a1a3b679SAndreas Boehler } 142*a1a3b679SAndreas Boehler 143*a1a3b679SAndreas Boehler /** 144*a1a3b679SAndreas Boehler * @expectedException \Sabre\DAV\Exception 145*a1a3b679SAndreas Boehler */ 146*a1a3b679SAndreas Boehler function testPropFindError() { 147*a1a3b679SAndreas Boehler 148*a1a3b679SAndreas Boehler $client = new ClientMock([ 149*a1a3b679SAndreas Boehler 'baseUri' => '/', 150*a1a3b679SAndreas Boehler ]); 151*a1a3b679SAndreas Boehler 152*a1a3b679SAndreas Boehler $client->response = new Response(405, []); 153*a1a3b679SAndreas Boehler $client->propfind('foo', ['{DAV:}displayname', '{urn:zim}gir']); 154*a1a3b679SAndreas Boehler 155*a1a3b679SAndreas Boehler } 156*a1a3b679SAndreas Boehler 157*a1a3b679SAndreas Boehler function testPropFindDepth1() { 158*a1a3b679SAndreas Boehler 159*a1a3b679SAndreas Boehler $client = new ClientMock([ 160*a1a3b679SAndreas Boehler 'baseUri' => '/', 161*a1a3b679SAndreas Boehler ]); 162*a1a3b679SAndreas Boehler 163*a1a3b679SAndreas Boehler $responseBody = <<<XML 164*a1a3b679SAndreas Boehler<?xml version="1.0"?> 165*a1a3b679SAndreas Boehler<multistatus xmlns="DAV:"> 166*a1a3b679SAndreas Boehler<response> 167*a1a3b679SAndreas Boehler <href>/foo</href> 168*a1a3b679SAndreas Boehler <propstat> 169*a1a3b679SAndreas Boehler <prop> 170*a1a3b679SAndreas Boehler <displayname>bar</displayname> 171*a1a3b679SAndreas Boehler </prop> 172*a1a3b679SAndreas Boehler <status>HTTP/1.1 200 OK</status> 173*a1a3b679SAndreas Boehler </propstat> 174*a1a3b679SAndreas Boehler</response> 175*a1a3b679SAndreas Boehler</multistatus> 176*a1a3b679SAndreas BoehlerXML; 177*a1a3b679SAndreas Boehler 178*a1a3b679SAndreas Boehler $client->response = new Response(207, [], $responseBody); 179*a1a3b679SAndreas Boehler $result = $client->propfind('foo', ['{DAV:}displayname', '{urn:zim}gir'], 1); 180*a1a3b679SAndreas Boehler 181*a1a3b679SAndreas Boehler $this->assertEquals([ 182*a1a3b679SAndreas Boehler '/foo' => [ 183*a1a3b679SAndreas Boehler '{DAV:}displayname' => 'bar' 184*a1a3b679SAndreas Boehler ], 185*a1a3b679SAndreas Boehler ], $result); 186*a1a3b679SAndreas Boehler 187*a1a3b679SAndreas Boehler $request = $client->request; 188*a1a3b679SAndreas Boehler $this->assertEquals('PROPFIND', $request->getMethod()); 189*a1a3b679SAndreas Boehler $this->assertEquals('/foo', $request->getUrl()); 190*a1a3b679SAndreas Boehler $this->assertEquals([ 191*a1a3b679SAndreas Boehler 'Depth' => ['1'], 192*a1a3b679SAndreas Boehler 'Content-Type' => ['application/xml'], 193*a1a3b679SAndreas Boehler ], $request->getHeaders()); 194*a1a3b679SAndreas Boehler 195*a1a3b679SAndreas Boehler } 196*a1a3b679SAndreas Boehler 197*a1a3b679SAndreas Boehler function testPropPatch() { 198*a1a3b679SAndreas Boehler 199*a1a3b679SAndreas Boehler $client = new ClientMock([ 200*a1a3b679SAndreas Boehler 'baseUri' => '/', 201*a1a3b679SAndreas Boehler ]); 202*a1a3b679SAndreas Boehler 203*a1a3b679SAndreas Boehler $responseBody = <<<XML 204*a1a3b679SAndreas Boehler<?xml version="1.0"?> 205*a1a3b679SAndreas Boehler<multistatus xmlns="DAV:"> 206*a1a3b679SAndreas Boehler<response> 207*a1a3b679SAndreas Boehler <href>/foo</href> 208*a1a3b679SAndreas Boehler <propstat> 209*a1a3b679SAndreas Boehler <prop> 210*a1a3b679SAndreas Boehler <displayname>bar</displayname> 211*a1a3b679SAndreas Boehler </prop> 212*a1a3b679SAndreas Boehler <status>HTTP/1.1 200 OK</status> 213*a1a3b679SAndreas Boehler </propstat> 214*a1a3b679SAndreas Boehler</response> 215*a1a3b679SAndreas Boehler</multistatus> 216*a1a3b679SAndreas BoehlerXML; 217*a1a3b679SAndreas Boehler 218*a1a3b679SAndreas Boehler $client->response = new Response(207, [], $responseBody); 219*a1a3b679SAndreas Boehler $result = $client->propPatch('foo', ['{DAV:}displayname' => 'hi', '{urn:zim}gir' => null], 1); 220*a1a3b679SAndreas Boehler $request = $client->request; 221*a1a3b679SAndreas Boehler $this->assertEquals('PROPPATCH', $request->getMethod()); 222*a1a3b679SAndreas Boehler $this->assertEquals('/foo', $request->getUrl()); 223*a1a3b679SAndreas Boehler $this->assertEquals([ 224*a1a3b679SAndreas Boehler 'Content-Type' => ['application/xml'], 225*a1a3b679SAndreas Boehler ], $request->getHeaders()); 226*a1a3b679SAndreas Boehler 227*a1a3b679SAndreas Boehler } 228*a1a3b679SAndreas Boehler 229*a1a3b679SAndreas Boehler function testOPTIONS() { 230*a1a3b679SAndreas Boehler 231*a1a3b679SAndreas Boehler $client = new ClientMock([ 232*a1a3b679SAndreas Boehler 'baseUri' => '/', 233*a1a3b679SAndreas Boehler ]); 234*a1a3b679SAndreas Boehler 235*a1a3b679SAndreas Boehler $client->response = new Response(207, [ 236*a1a3b679SAndreas Boehler 'DAV' => 'calendar-access, extended-mkcol', 237*a1a3b679SAndreas Boehler ]); 238*a1a3b679SAndreas Boehler $result = $client->options(); 239*a1a3b679SAndreas Boehler 240*a1a3b679SAndreas Boehler $this->assertEquals( 241*a1a3b679SAndreas Boehler ['calendar-access', 'extended-mkcol'], 242*a1a3b679SAndreas Boehler $result 243*a1a3b679SAndreas Boehler ); 244*a1a3b679SAndreas Boehler 245*a1a3b679SAndreas Boehler $request = $client->request; 246*a1a3b679SAndreas Boehler $this->assertEquals('OPTIONS', $request->getMethod()); 247*a1a3b679SAndreas Boehler $this->assertEquals('/', $request->getUrl()); 248*a1a3b679SAndreas Boehler $this->assertEquals([ 249*a1a3b679SAndreas Boehler ], $request->getHeaders()); 250*a1a3b679SAndreas Boehler 251*a1a3b679SAndreas Boehler } 252*a1a3b679SAndreas Boehler} 253