markTestSkipped('CURL must be installed to test the client'); } } public function testConstruct() { $client = new ClientMock([ 'baseUri' => '/', ]); $this->assertInstanceOf('Sabre\DAV\ClientMock', $client); } /** * @expectedException \InvalidArgumentException */ public function testConstructNoBaseUri() { $client = new ClientMock([]); } public function testAuth() { $client = new ClientMock([ 'baseUri' => '/', 'userName' => 'foo', 'password' => 'bar', ]); $this->assertEquals('foo:bar', $client->curlSettings[CURLOPT_USERPWD]); $this->assertEquals(CURLAUTH_BASIC | CURLAUTH_DIGEST, $client->curlSettings[CURLOPT_HTTPAUTH]); } public function testBasicAuth() { $client = new ClientMock([ 'baseUri' => '/', 'userName' => 'foo', 'password' => 'bar', 'authType' => Client::AUTH_BASIC, ]); $this->assertEquals('foo:bar', $client->curlSettings[CURLOPT_USERPWD]); $this->assertEquals(CURLAUTH_BASIC, $client->curlSettings[CURLOPT_HTTPAUTH]); } public function testDigestAuth() { $client = new ClientMock([ 'baseUri' => '/', 'userName' => 'foo', 'password' => 'bar', 'authType' => Client::AUTH_DIGEST, ]); $this->assertEquals('foo:bar', $client->curlSettings[CURLOPT_USERPWD]); $this->assertEquals(CURLAUTH_DIGEST, $client->curlSettings[CURLOPT_HTTPAUTH]); } public function testNTLMAuth() { $client = new ClientMock([ 'baseUri' => '/', 'userName' => 'foo', 'password' => 'bar', 'authType' => Client::AUTH_NTLM, ]); $this->assertEquals('foo:bar', $client->curlSettings[CURLOPT_USERPWD]); $this->assertEquals(CURLAUTH_NTLM, $client->curlSettings[CURLOPT_HTTPAUTH]); } public function testProxy() { $client = new ClientMock([ 'baseUri' => '/', 'proxy' => 'localhost:8888', ]); $this->assertEquals('localhost:8888', $client->curlSettings[CURLOPT_PROXY]); } public function testEncoding() { $client = new ClientMock([ 'baseUri' => '/', 'encoding' => Client::ENCODING_IDENTITY | Client::ENCODING_GZIP | Client::ENCODING_DEFLATE, ]); $this->assertEquals('identity,deflate,gzip', $client->curlSettings[CURLOPT_ENCODING]); } public function testPropFind() { $client = new ClientMock([ 'baseUri' => '/', ]); $responseBody = << /foo bar HTTP/1.1 200 OK XML; $client->response = new Response(207, [], $responseBody); $result = $client->propFind('foo', ['{DAV:}displayname', '{urn:zim}gir']); $this->assertEquals(['{DAV:}displayname' => 'bar'], $result); $request = $client->request; $this->assertEquals('PROPFIND', $request->getMethod()); $this->assertEquals('/foo', $request->getUrl()); $this->assertEquals([ 'Depth' => ['0'], 'Content-Type' => ['application/xml'], ], $request->getHeaders()); } /** * @expectedException \Sabre\HTTP\ClientHttpException */ public function testPropFindError() { $client = new ClientMock([ 'baseUri' => '/', ]); $client->response = new Response(405, []); $client->propFind('foo', ['{DAV:}displayname', '{urn:zim}gir']); } public function testPropFindDepth1() { $client = new ClientMock([ 'baseUri' => '/', ]); $responseBody = << /foo bar HTTP/1.1 200 OK XML; $client->response = new Response(207, [], $responseBody); $result = $client->propFind('foo', ['{DAV:}displayname', '{urn:zim}gir'], 1); $this->assertEquals([ '/foo' => [ '{DAV:}displayname' => 'bar', ], ], $result); $request = $client->request; $this->assertEquals('PROPFIND', $request->getMethod()); $this->assertEquals('/foo', $request->getUrl()); $this->assertEquals([ 'Depth' => ['1'], 'Content-Type' => ['application/xml'], ], $request->getHeaders()); } public function testPropPatch() { $client = new ClientMock([ 'baseUri' => '/', ]); $responseBody = << /foo bar HTTP/1.1 200 OK XML; $client->response = new Response(207, [], $responseBody); $result = $client->propPatch('foo', ['{DAV:}displayname' => 'hi', '{urn:zim}gir' => null]); $this->assertTrue($result); $request = $client->request; $this->assertEquals('PROPPATCH', $request->getMethod()); $this->assertEquals('/foo', $request->getUrl()); $this->assertEquals([ 'Content-Type' => ['application/xml'], ], $request->getHeaders()); } /** * @depends testPropPatch * @expectedException \Sabre\HTTP\ClientHttpException */ public function testPropPatchHTTPError() { $client = new ClientMock([ 'baseUri' => '/', ]); $client->response = new Response(403, [], ''); $client->propPatch('foo', ['{DAV:}displayname' => 'hi', '{urn:zim}gir' => null]); } /** * @depends testPropPatch * @expectedException \Sabre\HTTP\ClientException */ public function testPropPatchMultiStatusError() { $client = new ClientMock([ 'baseUri' => '/', ]); $responseBody = << /foo HTTP/1.1 403 Forbidden XML; $client->response = new Response(207, [], $responseBody); $client->propPatch('foo', ['{DAV:}displayname' => 'hi', '{urn:zim}gir' => null]); } public function testOPTIONS() { $client = new ClientMock([ 'baseUri' => '/', ]); $client->response = new Response(207, [ 'DAV' => 'calendar-access, extended-mkcol', ]); $result = $client->options(); $this->assertEquals( ['calendar-access', 'extended-mkcol'], $result ); $request = $client->request; $this->assertEquals('OPTIONS', $request->getMethod()); $this->assertEquals('/', $request->getUrl()); $this->assertEquals([ ], $request->getHeaders()); } }