792 lines
21 KiB
PHP
792 lines
21 KiB
PHP
|
<?php
|
||
|
|
||
|
require_once 'Sabre/DAV/ClientMock.php';
|
||
|
|
||
|
class Sabre_DAV_ClientTest extends PHPUnit_Framework_TestCase {
|
||
|
|
||
|
function testConstruct() {
|
||
|
|
||
|
$client = new Sabre_DAV_ClientMock(array(
|
||
|
'baseUri' => '/',
|
||
|
));
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @expectedException InvalidArgumentException
|
||
|
*/
|
||
|
function testConstructNoBaseUri() {
|
||
|
|
||
|
$client = new Sabre_DAV_ClientMock(array());
|
||
|
|
||
|
}
|
||
|
|
||
|
function testRequest() {
|
||
|
|
||
|
$client = new Sabre_DAV_ClientMock(array(
|
||
|
'baseUri' => 'http://example.org/foo/bar/',
|
||
|
));
|
||
|
|
||
|
$responseBlob = array(
|
||
|
"HTTP/1.1 200 OK",
|
||
|
"Content-Type: text/plain",
|
||
|
"",
|
||
|
"Hello there!"
|
||
|
);
|
||
|
|
||
|
$client->response = array(
|
||
|
implode("\r\n", $responseBlob),
|
||
|
array(
|
||
|
'header_size' => 45,
|
||
|
'http_code' => 200,
|
||
|
),
|
||
|
0,
|
||
|
""
|
||
|
);
|
||
|
|
||
|
$result = $client->request('POST', 'baz', 'sillybody', array('Content-Type' => 'text/plain'));
|
||
|
|
||
|
$this->assertEquals('http://example.org/foo/bar/baz', $client->url);
|
||
|
$this->assertEquals(array(
|
||
|
CURLOPT_RETURNTRANSFER => true,
|
||
|
CURLOPT_FOLLOWLOCATION => true,
|
||
|
CURLOPT_MAXREDIRS => 5,
|
||
|
CURLOPT_CUSTOMREQUEST => 'POST',
|
||
|
CURLOPT_POSTFIELDS => 'sillybody',
|
||
|
CURLOPT_HEADER => true,
|
||
|
CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
|
||
|
), $client->curlSettings);
|
||
|
|
||
|
$this->assertEquals(array(
|
||
|
'statusCode' => 200,
|
||
|
'headers' => array(
|
||
|
'content-type' => 'text/plain',
|
||
|
),
|
||
|
'body' => 'Hello there!'
|
||
|
), $result);
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function testRequestProxy() {
|
||
|
|
||
|
$client = new Sabre_DAV_ClientMock(array(
|
||
|
'baseUri' => 'http://example.org/foo/bar/',
|
||
|
'proxy' => 'http://localhost:8000/',
|
||
|
));
|
||
|
|
||
|
$responseBlob = array(
|
||
|
"HTTP/1.1 200 OK",
|
||
|
"Content-Type: text/plain",
|
||
|
"",
|
||
|
"Hello there!"
|
||
|
);
|
||
|
|
||
|
$client->response = array(
|
||
|
implode("\r\n", $responseBlob),
|
||
|
array(
|
||
|
'header_size' => 45,
|
||
|
'http_code' => 200,
|
||
|
),
|
||
|
0,
|
||
|
""
|
||
|
);
|
||
|
|
||
|
$result = $client->request('POST', 'baz', 'sillybody', array('Content-Type' => 'text/plain'));
|
||
|
|
||
|
$this->assertEquals('http://example.org/foo/bar/baz', $client->url);
|
||
|
$this->assertEquals(array(
|
||
|
CURLOPT_RETURNTRANSFER => true,
|
||
|
CURLOPT_FOLLOWLOCATION => true,
|
||
|
CURLOPT_MAXREDIRS => 5,
|
||
|
CURLOPT_CUSTOMREQUEST => 'POST',
|
||
|
CURLOPT_POSTFIELDS => 'sillybody',
|
||
|
CURLOPT_HEADER => true,
|
||
|
CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
|
||
|
CURLOPT_PROXY => 'http://localhost:8000/',
|
||
|
), $client->curlSettings);
|
||
|
|
||
|
$this->assertEquals(array(
|
||
|
'statusCode' => 200,
|
||
|
'headers' => array(
|
||
|
'content-type' => 'text/plain',
|
||
|
),
|
||
|
'body' => 'Hello there!'
|
||
|
), $result);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function testRequestAuth() {
|
||
|
|
||
|
$client = new Sabre_DAV_ClientMock(array(
|
||
|
'baseUri' => 'http://example.org/foo/bar/',
|
||
|
'userName' => 'user',
|
||
|
'password' => 'password',
|
||
|
));
|
||
|
|
||
|
$responseBlob = array(
|
||
|
"HTTP/1.1 200 OK",
|
||
|
"Content-Type: text/plain",
|
||
|
"",
|
||
|
"Hello there!"
|
||
|
);
|
||
|
|
||
|
$client->response = array(
|
||
|
implode("\r\n", $responseBlob),
|
||
|
array(
|
||
|
'header_size' => 45,
|
||
|
'http_code' => 200,
|
||
|
),
|
||
|
0,
|
||
|
""
|
||
|
);
|
||
|
|
||
|
$result = $client->request('POST', 'baz', 'sillybody', array('Content-Type' => 'text/plain'));
|
||
|
|
||
|
$this->assertEquals('http://example.org/foo/bar/baz', $client->url);
|
||
|
$this->assertEquals(array(
|
||
|
CURLOPT_RETURNTRANSFER => true,
|
||
|
CURLOPT_FOLLOWLOCATION => true,
|
||
|
CURLOPT_MAXREDIRS => 5,
|
||
|
CURLOPT_CUSTOMREQUEST => 'POST',
|
||
|
CURLOPT_POSTFIELDS => 'sillybody',
|
||
|
CURLOPT_HEADER => true,
|
||
|
CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
|
||
|
CURLOPT_HTTPAUTH => CURLAUTH_BASIC | CURLAUTH_DIGEST,
|
||
|
CURLOPT_USERPWD => 'user:password'
|
||
|
), $client->curlSettings);
|
||
|
|
||
|
$this->assertEquals(array(
|
||
|
'statusCode' => 200,
|
||
|
'headers' => array(
|
||
|
'content-type' => 'text/plain',
|
||
|
),
|
||
|
'body' => 'Hello there!'
|
||
|
), $result);
|
||
|
|
||
|
}
|
||
|
|
||
|
function testRequestAuthBasic() {
|
||
|
|
||
|
$client = new Sabre_DAV_ClientMock(array(
|
||
|
'baseUri' => 'http://example.org/foo/bar/',
|
||
|
'userName' => 'user',
|
||
|
'password' => 'password',
|
||
|
'authType' => Sabre_DAV_Client::AUTH_BASIC,
|
||
|
));
|
||
|
|
||
|
$responseBlob = array(
|
||
|
"HTTP/1.1 200 OK",
|
||
|
"Content-Type: text/plain",
|
||
|
"",
|
||
|
"Hello there!"
|
||
|
);
|
||
|
|
||
|
$client->response = array(
|
||
|
implode("\r\n", $responseBlob),
|
||
|
array(
|
||
|
'header_size' => 45,
|
||
|
'http_code' => 200,
|
||
|
),
|
||
|
0,
|
||
|
""
|
||
|
);
|
||
|
|
||
|
$result = $client->request('POST', 'baz', 'sillybody', array('Content-Type' => 'text/plain'));
|
||
|
|
||
|
$this->assertEquals('http://example.org/foo/bar/baz', $client->url);
|
||
|
$this->assertEquals(array(
|
||
|
CURLOPT_RETURNTRANSFER => true,
|
||
|
CURLOPT_FOLLOWLOCATION => true,
|
||
|
CURLOPT_MAXREDIRS => 5,
|
||
|
CURLOPT_CUSTOMREQUEST => 'POST',
|
||
|
CURLOPT_POSTFIELDS => 'sillybody',
|
||
|
CURLOPT_HEADER => true,
|
||
|
CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
|
||
|
CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
|
||
|
CURLOPT_USERPWD => 'user:password'
|
||
|
), $client->curlSettings);
|
||
|
|
||
|
$this->assertEquals(array(
|
||
|
'statusCode' => 200,
|
||
|
'headers' => array(
|
||
|
'content-type' => 'text/plain',
|
||
|
),
|
||
|
'body' => 'Hello there!'
|
||
|
), $result);
|
||
|
|
||
|
}
|
||
|
|
||
|
function testRequestAuthDigest() {
|
||
|
|
||
|
$client = new Sabre_DAV_ClientMock(array(
|
||
|
'baseUri' => 'http://example.org/foo/bar/',
|
||
|
'userName' => 'user',
|
||
|
'password' => 'password',
|
||
|
'authType' => Sabre_DAV_Client::AUTH_DIGEST,
|
||
|
));
|
||
|
|
||
|
$responseBlob = array(
|
||
|
"HTTP/1.1 200 OK",
|
||
|
"Content-Type: text/plain",
|
||
|
"",
|
||
|
"Hello there!"
|
||
|
);
|
||
|
|
||
|
$client->response = array(
|
||
|
implode("\r\n", $responseBlob),
|
||
|
array(
|
||
|
'header_size' => 45,
|
||
|
'http_code' => 200,
|
||
|
),
|
||
|
0,
|
||
|
""
|
||
|
);
|
||
|
|
||
|
$result = $client->request('POST', 'baz', 'sillybody', array('Content-Type' => 'text/plain'));
|
||
|
|
||
|
$this->assertEquals('http://example.org/foo/bar/baz', $client->url);
|
||
|
$this->assertEquals(array(
|
||
|
CURLOPT_RETURNTRANSFER => true,
|
||
|
CURLOPT_FOLLOWLOCATION => true,
|
||
|
CURLOPT_MAXREDIRS => 5,
|
||
|
CURLOPT_CUSTOMREQUEST => 'POST',
|
||
|
CURLOPT_POSTFIELDS => 'sillybody',
|
||
|
CURLOPT_HEADER => true,
|
||
|
CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
|
||
|
CURLOPT_HTTPAUTH => CURLAUTH_DIGEST,
|
||
|
CURLOPT_USERPWD => 'user:password'
|
||
|
), $client->curlSettings);
|
||
|
|
||
|
$this->assertEquals(array(
|
||
|
'statusCode' => 200,
|
||
|
'headers' => array(
|
||
|
'content-type' => 'text/plain',
|
||
|
),
|
||
|
'body' => 'Hello there!'
|
||
|
), $result);
|
||
|
|
||
|
}
|
||
|
function testRequestError() {
|
||
|
|
||
|
$client = new Sabre_DAV_ClientMock(array(
|
||
|
'baseUri' => 'http://example.org/foo/bar/',
|
||
|
));
|
||
|
|
||
|
$responseBlob = array(
|
||
|
"HTTP/1.1 200 OK",
|
||
|
"Content-Type: text/plain",
|
||
|
"",
|
||
|
"Hello there!"
|
||
|
);
|
||
|
|
||
|
$client->response = array(
|
||
|
implode("\r\n", $responseBlob),
|
||
|
array(
|
||
|
'header_size' => 45,
|
||
|
'http_code' => 200,
|
||
|
),
|
||
|
CURLE_COULDNT_CONNECT,
|
||
|
"Could not connect, or something"
|
||
|
);
|
||
|
|
||
|
$caught = false;
|
||
|
try {
|
||
|
$client->request('POST', 'baz', 'sillybody', array('Content-Type' => 'text/plain'));
|
||
|
} catch (Sabre_DAV_Exception $e) {
|
||
|
$caught = true;
|
||
|
}
|
||
|
if (!$caught) {
|
||
|
$this->markTestFailed('Exception was not thrown');
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
function testRequestHTTPError() {
|
||
|
|
||
|
$client = new Sabre_DAV_ClientMock(array(
|
||
|
'baseUri' => 'http://example.org/foo/bar/',
|
||
|
));
|
||
|
|
||
|
$responseBlob = array(
|
||
|
"HTTP/1.1 400 Bad Request",
|
||
|
"Content-Type: text/plain",
|
||
|
"",
|
||
|
"Hello there!"
|
||
|
);
|
||
|
|
||
|
$client->response = array(
|
||
|
implode("\r\n", $responseBlob),
|
||
|
array(
|
||
|
'header_size' => 45,
|
||
|
'http_code' => 400,
|
||
|
),
|
||
|
0,
|
||
|
""
|
||
|
);
|
||
|
|
||
|
$caught = false;
|
||
|
try {
|
||
|
$client->request('POST', 'baz', 'sillybody', array('Content-Type' => 'text/plain'));
|
||
|
} catch (Sabre_DAV_Exception $e) {
|
||
|
$caught = true;
|
||
|
}
|
||
|
if (!$caught) {
|
||
|
$this->fail('Exception was not thrown');
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
function testRequestHTTP404() {
|
||
|
|
||
|
$client = new Sabre_DAV_ClientMock(array(
|
||
|
'baseUri' => 'http://example.org/foo/bar/',
|
||
|
));
|
||
|
|
||
|
$responseBlob = array(
|
||
|
"HTTP/1.1 404 Not Found",
|
||
|
"Content-Type: text/plain",
|
||
|
"",
|
||
|
"Hello there!"
|
||
|
);
|
||
|
|
||
|
$client->response = array(
|
||
|
implode("\r\n", $responseBlob),
|
||
|
array(
|
||
|
'header_size' => 45,
|
||
|
'http_code' => 404,
|
||
|
),
|
||
|
0,
|
||
|
""
|
||
|
);
|
||
|
|
||
|
$caught = false;
|
||
|
try {
|
||
|
$client->request('POST', 'baz', 'sillybody', array('Content-Type' => 'text/plain'));
|
||
|
} catch (Sabre_DAV_Exception_NotFound $e) {
|
||
|
$caught = true;
|
||
|
}
|
||
|
if (!$caught) {
|
||
|
$this->fail('Exception was not thrown');
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @dataProvider supportedHTTPCodes
|
||
|
*/
|
||
|
function testSpecificHTTPErrors($error) {
|
||
|
|
||
|
$client = new Sabre_DAV_ClientMock(array(
|
||
|
'baseUri' => 'http://example.org/foo/bar/',
|
||
|
));
|
||
|
|
||
|
$responseBlob = array(
|
||
|
"HTTP/1.1 $error blabla",
|
||
|
"Content-Type: text/plain",
|
||
|
"",
|
||
|
"Hello there!"
|
||
|
);
|
||
|
|
||
|
$client->response = array(
|
||
|
implode("\r\n", $responseBlob),
|
||
|
array(
|
||
|
'header_size' => 42,
|
||
|
'http_code' => $error,
|
||
|
),
|
||
|
0,
|
||
|
""
|
||
|
);
|
||
|
|
||
|
$caught = false;
|
||
|
try {
|
||
|
$client->request('POST', 'baz', 'sillybody', array('Content-Type' => 'text/plain'));
|
||
|
} catch (Sabre_DAV_Exception $e) {
|
||
|
$caught = true;
|
||
|
$this->assertEquals($e->getHTTPCode(), $error);
|
||
|
}
|
||
|
if (!$caught) {
|
||
|
$this->fail('Exception was not thrown');
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
public function supportedHTTPCodes() {
|
||
|
|
||
|
return array(
|
||
|
array(400),
|
||
|
array(401),
|
||
|
array(402),
|
||
|
array(403),
|
||
|
array(404),
|
||
|
array(405),
|
||
|
array(409),
|
||
|
array(412),
|
||
|
array(416),
|
||
|
array(500),
|
||
|
array(501),
|
||
|
array(507),
|
||
|
);
|
||
|
|
||
|
}
|
||
|
|
||
|
function testGetAbsoluteUrl() {
|
||
|
|
||
|
$client = new Sabre_DAV_ClientMock(array(
|
||
|
'baseUri' => 'http://example.org/foo/',
|
||
|
));
|
||
|
|
||
|
$this->assertEquals(
|
||
|
'http://example.org/foo/bar',
|
||
|
$client->getAbsoluteUrl('bar')
|
||
|
);
|
||
|
|
||
|
$this->assertEquals(
|
||
|
'http://example.org/bar',
|
||
|
$client->getAbsoluteUrl('/bar')
|
||
|
);
|
||
|
|
||
|
$this->assertEquals(
|
||
|
'http://example.com/bar',
|
||
|
$client->getAbsoluteUrl('http://example.com/bar')
|
||
|
);
|
||
|
|
||
|
}
|
||
|
|
||
|
function testOptions() {
|
||
|
|
||
|
$client = new Sabre_DAV_ClientMock(array(
|
||
|
'baseUri' => 'http://example.org/foo/bar/',
|
||
|
));
|
||
|
|
||
|
$responseBlob = array(
|
||
|
"HTTP/1.1 200 OK",
|
||
|
"DAV: feature1, feature2",
|
||
|
"",
|
||
|
);
|
||
|
|
||
|
$client->response = array(
|
||
|
implode("\r\n", $responseBlob),
|
||
|
array(
|
||
|
'header_size' => 40,
|
||
|
'http_code' => 200,
|
||
|
),
|
||
|
0,
|
||
|
""
|
||
|
);
|
||
|
|
||
|
$result = $client->options();
|
||
|
$this->assertEquals(
|
||
|
array('feature1', 'feature2'),
|
||
|
$result
|
||
|
);
|
||
|
|
||
|
}
|
||
|
|
||
|
function testOptionsNoDav() {
|
||
|
|
||
|
$client = new Sabre_DAV_ClientMock(array(
|
||
|
'baseUri' => 'http://example.org/foo/bar/',
|
||
|
));
|
||
|
|
||
|
$responseBlob = array(
|
||
|
"HTTP/1.1 200 OK",
|
||
|
"",
|
||
|
);
|
||
|
|
||
|
$client->response = array(
|
||
|
implode("\r\n", $responseBlob),
|
||
|
array(
|
||
|
'header_size' => 20,
|
||
|
'http_code' => 200,
|
||
|
),
|
||
|
0,
|
||
|
""
|
||
|
);
|
||
|
|
||
|
$result = $client->options();
|
||
|
$this->assertEquals(
|
||
|
array(),
|
||
|
$result
|
||
|
);
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @expectedException InvalidArgumentException
|
||
|
*/
|
||
|
function testPropFindNoXML() {
|
||
|
|
||
|
$client = new Sabre_DAV_ClientMock(array(
|
||
|
'baseUri' => 'http://example.org/foo/bar/',
|
||
|
));
|
||
|
|
||
|
$responseBlob = array(
|
||
|
"HTTP/1.1 200 OK",
|
||
|
"",
|
||
|
);
|
||
|
|
||
|
$client->response = array(
|
||
|
implode("\r\n", $responseBlob),
|
||
|
array(
|
||
|
'header_size' => 20,
|
||
|
'http_code' => 200,
|
||
|
),
|
||
|
0,
|
||
|
""
|
||
|
);
|
||
|
|
||
|
$client->propfind('', array('{DAV:}foo','{DAV:}bar'));
|
||
|
|
||
|
}
|
||
|
|
||
|
function testPropFind() {
|
||
|
|
||
|
$client = new Sabre_DAV_ClientMock(array(
|
||
|
'baseUri' => 'http://example.org/foo/bar/',
|
||
|
));
|
||
|
|
||
|
$responseBlob = array(
|
||
|
"HTTP/1.1 200 OK",
|
||
|
"",
|
||
|
"<?xml version=\"1.0\"?>",
|
||
|
"<d:multistatus xmlns:d=\"DAV:\">",
|
||
|
" <d:response>",
|
||
|
" <d:href>/foo/bar/</d:href>",
|
||
|
" <d:propstat>",
|
||
|
" <d:prop>",
|
||
|
" <d:foo>hello</d:foo>",
|
||
|
" </d:prop>",
|
||
|
" <d:status>HTTP/1.1 200 OK</d:status>",
|
||
|
" </d:propstat>",
|
||
|
" <d:propstat>",
|
||
|
" <d:prop>",
|
||
|
" <d:bar />",
|
||
|
" </d:prop>",
|
||
|
" <d:status>HTTP/1.1 404 Not Found</d:status>",
|
||
|
" </d:propstat>",
|
||
|
" </d:response>",
|
||
|
"</d:multistatus>",
|
||
|
);
|
||
|
|
||
|
$client->response = array(
|
||
|
implode("\r\n", $responseBlob),
|
||
|
array(
|
||
|
'header_size' => 19,
|
||
|
'http_code' => 200,
|
||
|
),
|
||
|
0,
|
||
|
""
|
||
|
);
|
||
|
|
||
|
$result = $client->propfind('', array('{DAV:}foo','{DAV:}bar'));
|
||
|
|
||
|
$this->assertEquals(array(
|
||
|
'{DAV:}foo' => 'hello',
|
||
|
), $result);
|
||
|
|
||
|
$requestBody = array(
|
||
|
'<?xml version="1.0"?>',
|
||
|
'<d:propfind xmlns:d="DAV:">',
|
||
|
' <d:prop>',
|
||
|
' <d:foo />',
|
||
|
' <d:bar />',
|
||
|
' </d:prop>',
|
||
|
'</d:propfind>'
|
||
|
);
|
||
|
$requestBody = implode("\n", $requestBody);
|
||
|
|
||
|
$this->assertEquals($requestBody, $client->curlSettings[CURLOPT_POSTFIELDS]);
|
||
|
|
||
|
}
|
||
|
|
||
|
function testPropFindDepth1CustomProp() {
|
||
|
|
||
|
$client = new Sabre_DAV_ClientMock(array(
|
||
|
'baseUri' => 'http://example.org/foo/bar/',
|
||
|
));
|
||
|
|
||
|
$responseBlob = array(
|
||
|
"HTTP/1.1 200 OK",
|
||
|
"",
|
||
|
"<?xml version=\"1.0\"?>",
|
||
|
"<d:multistatus xmlns:d=\"DAV:\" xmlns:x=\"urn:custom\">",
|
||
|
" <d:response>",
|
||
|
" <d:href>/foo/bar/</d:href>",
|
||
|
" <d:propstat>",
|
||
|
" <d:prop>",
|
||
|
" <d:foo>hello</d:foo>",
|
||
|
" <x:bar>world</x:bar>",
|
||
|
" </d:prop>",
|
||
|
" <d:status>HTTP/1.1 200 OK</d:status>",
|
||
|
" </d:propstat>",
|
||
|
" </d:response>",
|
||
|
"</d:multistatus>",
|
||
|
);
|
||
|
|
||
|
$client->response = array(
|
||
|
implode("\r\n", $responseBlob),
|
||
|
array(
|
||
|
'header_size' => 19,
|
||
|
'http_code' => 200,
|
||
|
),
|
||
|
0,
|
||
|
""
|
||
|
);
|
||
|
|
||
|
$result = $client->propfind('', array('{DAV:}foo','{urn:custom}bar'),1);
|
||
|
|
||
|
$this->assertEquals(array(
|
||
|
"/foo/bar/" => array(
|
||
|
'{DAV:}foo' => 'hello',
|
||
|
'{urn:custom}bar' => 'world',
|
||
|
),
|
||
|
), $result);
|
||
|
|
||
|
$requestBody = array(
|
||
|
'<?xml version="1.0"?>',
|
||
|
'<d:propfind xmlns:d="DAV:">',
|
||
|
' <d:prop>',
|
||
|
' <d:foo />',
|
||
|
' <x:bar xmlns:x="urn:custom"/>',
|
||
|
' </d:prop>',
|
||
|
'</d:propfind>'
|
||
|
);
|
||
|
$requestBody = implode("\n", $requestBody);
|
||
|
|
||
|
$this->assertEquals($requestBody, $client->curlSettings[CURLOPT_POSTFIELDS]);
|
||
|
|
||
|
}
|
||
|
|
||
|
function testPropPatch() {
|
||
|
|
||
|
$client = new Sabre_DAV_ClientMock(array(
|
||
|
'baseUri' => 'http://example.org/foo/bar/',
|
||
|
));
|
||
|
|
||
|
$responseBlob = array(
|
||
|
"HTTP/1.1 200 OK",
|
||
|
"",
|
||
|
);
|
||
|
|
||
|
$client->response = array(
|
||
|
implode("\r\n", $responseBlob),
|
||
|
array(
|
||
|
'header_size' => 20,
|
||
|
'http_code' => 200,
|
||
|
),
|
||
|
0,
|
||
|
""
|
||
|
);
|
||
|
|
||
|
$client->proppatch('', array(
|
||
|
'{DAV:}foo' => 'newvalue',
|
||
|
'{urn:custom}foo' => 'newvalue2',
|
||
|
'{DAV:}bar' => null,
|
||
|
'{urn:custom}bar' => null,
|
||
|
));
|
||
|
|
||
|
$requestBody = array(
|
||
|
'<?xml version="1.0"?>',
|
||
|
'<d:propertyupdate xmlns:d="DAV:">',
|
||
|
'<d:set><d:prop>',
|
||
|
' <d:foo>newvalue</d:foo>',
|
||
|
'</d:prop></d:set>',
|
||
|
'<d:set><d:prop>',
|
||
|
' <x:foo xmlns:x="urn:custom">newvalue2</x:foo>',
|
||
|
'</d:prop></d:set>',
|
||
|
'<d:remove><d:prop>',
|
||
|
' <d:bar />',
|
||
|
'</d:prop></d:remove>',
|
||
|
'<d:remove><d:prop>',
|
||
|
' <x:bar xmlns:x="urn:custom"/>',
|
||
|
'</d:prop></d:remove>',
|
||
|
'</d:propertyupdate>'
|
||
|
);
|
||
|
$requestBody = implode("\n", $requestBody);
|
||
|
|
||
|
$this->assertEquals($requestBody, $client->curlSettings[CURLOPT_POSTFIELDS]);
|
||
|
|
||
|
}
|
||
|
|
||
|
function testHEADRequest() {
|
||
|
|
||
|
$client = new Sabre_DAV_ClientMock(array(
|
||
|
'baseUri' => 'http://example.org/foo/bar/',
|
||
|
));
|
||
|
|
||
|
$responseBlob = array(
|
||
|
"HTTP/1.1 200 OK",
|
||
|
"Content-Type: text/plain",
|
||
|
"",
|
||
|
"Hello there!"
|
||
|
);
|
||
|
|
||
|
$client->response = array(
|
||
|
implode("\r\n", $responseBlob),
|
||
|
array(
|
||
|
'header_size' => 45,
|
||
|
'http_code' => 200,
|
||
|
),
|
||
|
0,
|
||
|
""
|
||
|
);
|
||
|
|
||
|
$result = $client->request('HEAD', 'baz');
|
||
|
|
||
|
$this->assertEquals('http://example.org/foo/bar/baz', $client->url);
|
||
|
$this->assertEquals(array(
|
||
|
CURLOPT_RETURNTRANSFER => true,
|
||
|
CURLOPT_FOLLOWLOCATION => true,
|
||
|
CURLOPT_MAXREDIRS => 5,
|
||
|
CURLOPT_CUSTOMREQUEST => 'HEAD',
|
||
|
CURLOPT_NOBODY => true,
|
||
|
CURLOPT_HEADER => true,
|
||
|
CURLOPT_HTTPHEADER => array(),
|
||
|
CURLOPT_POSTFIELDS => null,
|
||
|
), $client->curlSettings);
|
||
|
|
||
|
}
|
||
|
|
||
|
function testPUTRequest() {
|
||
|
|
||
|
$client = new Sabre_DAV_ClientMock(array(
|
||
|
'baseUri' => 'http://example.org/foo/bar/',
|
||
|
));
|
||
|
|
||
|
$responseBlob = array(
|
||
|
"HTTP/1.1 200 OK",
|
||
|
"Content-Type: text/plain",
|
||
|
"",
|
||
|
"Hello there!"
|
||
|
);
|
||
|
|
||
|
$client->response = array(
|
||
|
implode("\r\n", $responseBlob),
|
||
|
array(
|
||
|
'header_size' => 45,
|
||
|
'http_code' => 200,
|
||
|
),
|
||
|
0,
|
||
|
""
|
||
|
);
|
||
|
|
||
|
$result = $client->request('PUT', 'bar','newcontent');
|
||
|
|
||
|
$this->assertEquals('http://example.org/foo/bar/bar', $client->url);
|
||
|
$this->assertEquals(array(
|
||
|
CURLOPT_RETURNTRANSFER => true,
|
||
|
CURLOPT_FOLLOWLOCATION => true,
|
||
|
CURLOPT_MAXREDIRS => 5,
|
||
|
CURLOPT_CUSTOMREQUEST => "PUT",
|
||
|
CURLOPT_POSTFIELDS => 'newcontent',
|
||
|
CURLOPT_HEADER => true,
|
||
|
CURLOPT_HTTPHEADER => array(),
|
||
|
), $client->curlSettings);
|
||
|
|
||
|
}
|
||
|
}
|