'/',
));
}
/**
* @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",
"",
"",
"",
" ",
" /foo/bar/",
" ",
" ",
" hello",
" ",
" HTTP/1.1 200 OK",
" ",
" ",
" ",
" ",
" ",
" HTTP/1.1 404 Not Found",
" ",
" ",
"",
);
$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(
'',
'',
' ',
' ',
' ',
' ',
''
);
$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",
"",
"",
"",
" ",
" /foo/bar/",
" ",
" ",
" hello",
" world",
" ",
" HTTP/1.1 200 OK",
" ",
" ",
"",
);
$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(
'',
'',
' ',
' ',
' ',
' ',
''
);
$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(
'',
'',
'',
' newvalue',
'',
'',
' newvalue2',
'',
'',
' ',
'',
'',
' ',
'',
''
);
$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);
}
}