friendica-addons/dav/SabreDAV/tests/Sabre/DAV/ServerCopyMoveTest.php
2012-06-03 18:19:28 +00:00

265 lines
7.9 KiB
PHP

<?php
require_once 'Sabre/HTTP/ResponseMock.php';
class Sabre_DAV_ServerCopyMoveTest extends PHPUnit_Framework_TestCase {
private $response;
/**
* @var Sabre_DAV_Server
*/
private $server;
function setUp() {
$this->response = new Sabre_HTTP_ResponseMock();
$dir = new Sabre_DAV_FS_Directory(SABRE_TEMPDIR);
$tree = new Sabre_DAV_ObjectTree($dir);
$this->server = new Sabre_DAV_Server($tree);
$this->server->debugExceptions = true;
$this->server->httpResponse = $this->response;
file_put_contents(SABRE_TEMPDIR . '/test.txt', 'Test contents');
file_put_contents(SABRE_TEMPDIR . '/test2.txt', 'Test contents2');
mkdir(SABRE_TEMPDIR . '/col');
file_put_contents(SABRE_TEMPDIR . 'col/test.txt', 'Test contents');
}
function tearDown() {
$cleanUp = array('test.txt','testput.txt','testcol','test2.txt','test3.txt','col/test.txt','col','col2/test.txt','col2');
foreach($cleanUp as $file) {
$tmpFile = SABRE_TEMPDIR . '/' . $file;
if (file_exists($tmpFile)) {
if (is_dir($tmpFile)) {
rmdir($tmpFile);
} else {
unlink($tmpFile);
}
}
}
}
function testCopyOverWrite() {
$serverVars = array(
'REQUEST_URI' => '/test.txt',
'REQUEST_METHOD' => 'COPY',
'HTTP_DESTINATION' => '/test2.txt',
);
$request = new Sabre_HTTP_Request($serverVars);
$this->server->httpRequest = ($request);
$this->server->exec();
$this->assertEquals('HTTP/1.1 204 No Content',$this->response->status,'Received an incorrect HTTP status. Full body inspection: ' . $this->response->body);
$this->assertEquals(array(
'Content-Length' => '0',
),
$this->response->headers
);
$this->assertEquals('Test contents',file_get_contents(SABRE_TEMPDIR. '/test2.txt'));
}
function testCopyToSelf() {
$serverVars = array(
'REQUEST_URI' => '/test.txt',
'REQUEST_METHOD' => 'COPY',
'HTTP_DESTINATION' => '/test.txt',
);
$request = new Sabre_HTTP_Request($serverVars);
$this->server->httpRequest = ($request);
$this->server->exec();
$this->assertEquals('HTTP/1.1 403 Forbidden',$this->response->status,'Received an incorrect HTTP status. Full body inspection: ' . $this->response->body);
$this->assertEquals('Test contents',file_get_contents(SABRE_TEMPDIR. '/test.txt'));
}
function testMoveToSelf() {
$serverVars = array(
'REQUEST_URI' => '/test.txt',
'REQUEST_METHOD' => 'MOVE',
'HTTP_DESTINATION' => '/test.txt',
);
$request = new Sabre_HTTP_Request($serverVars);
$this->server->httpRequest = ($request);
$this->server->exec();
$this->assertEquals('HTTP/1.1 403 Forbidden',$this->response->status,'Received an incorrect HTTP status. Full body inspection: ' . $this->response->body);
$this->assertEquals('Test contents',file_get_contents(SABRE_TEMPDIR. '/test.txt'));
}
function testMoveOverWrite() {
$serverVars = array(
'REQUEST_URI' => '/test.txt',
'REQUEST_METHOD' => 'MOVE',
'HTTP_DESTINATION' => '/test2.txt',
);
$request = new Sabre_HTTP_Request($serverVars);
$this->server->httpRequest = ($request);
$this->server->exec();
$this->assertEquals(array(
'Content-Length' => 0,
),
$this->response->headers
);
$this->assertEquals('HTTP/1.1 204 No Content',$this->response->status);
$this->assertEquals('Test contents',file_get_contents(SABRE_TEMPDIR . '/test2.txt'));
$this->assertFalse(file_exists(SABRE_TEMPDIR . '/test.txt'),'The sourcefile test.txt should no longer exist at this point');
}
function testBlockedOverWrite() {
$serverVars = array(
'REQUEST_URI' => '/test.txt',
'REQUEST_METHOD' => 'COPY',
'HTTP_DESTINATION' => '/test2.txt',
'HTTP_OVERWRITE' => 'F',
);
$request = new Sabre_HTTP_Request($serverVars);
$this->server->httpRequest = ($request);
$this->server->exec();
$this->assertEquals(array(
'Content-Type' => 'application/xml; charset=utf-8',
),
$this->response->headers
);
$this->assertEquals('HTTP/1.1 412 Precondition failed',$this->response->status);
$this->assertEquals('Test contents2',file_get_contents(SABRE_TEMPDIR . '/test2.txt'));
}
function testNonExistantParent() {
$serverVars = array(
'REQUEST_URI' => '/test.txt',
'REQUEST_METHOD' => 'COPY',
'HTTP_DESTINATION' => '/testcol2/test2.txt',
'HTTP_OVERWRITE' => 'F',
);
$request = new Sabre_HTTP_Request($serverVars);
$this->server->httpRequest = ($request);
$this->server->exec();
$this->assertEquals(array(
'Content-Type' => 'application/xml; charset=utf-8',
),
$this->response->headers
);
$this->assertEquals('HTTP/1.1 409 Conflict',$this->response->status);
}
function testRandomOverwriteHeader() {
$serverVars = array(
'REQUEST_URI' => '/test.txt',
'REQUEST_METHOD' => 'COPY',
'HTTP_DESTINATION' => '/testcol2/test2.txt',
'HTTP_OVERWRITE' => 'SURE!',
);
$request = new Sabre_HTTP_Request($serverVars);
$this->server->httpRequest = ($request);
$this->server->exec();
$this->assertEquals('HTTP/1.1 400 Bad request',$this->response->status);
}
function testCopyDirectory() {
$serverVars = array(
'REQUEST_URI' => '/col',
'REQUEST_METHOD' => 'COPY',
'HTTP_DESTINATION' => '/col2',
);
$request = new Sabre_HTTP_Request($serverVars);
$this->server->httpRequest = ($request);
$this->server->exec();
$this->assertEquals(array(
'Content-Length' => '0',
),
$this->response->headers
);
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
$this->assertEquals('Test contents',file_get_contents(SABRE_TEMPDIR . '/col2/test.txt'));
}
function testSimpleCopyFile() {
$serverVars = array(
'REQUEST_URI' => '/test.txt',
'REQUEST_METHOD' => 'COPY',
'HTTP_DESTINATION' => '/test3.txt',
);
$request = new Sabre_HTTP_Request($serverVars);
$this->server->httpRequest = ($request);
$this->server->exec();
$this->assertEquals(array(
'Content-Length' => '0',
),
$this->response->headers
);
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
$this->assertEquals('Test contents',file_get_contents(SABRE_TEMPDIR . '/test3.txt'));
}
function testSimpleCopyCollection() {
$serverVars = array(
'REQUEST_URI' => '/col',
'REQUEST_METHOD' => 'COPY',
'HTTP_DESTINATION' => '/col2',
);
$request = new Sabre_HTTP_Request($serverVars);
$this->server->httpRequest = ($request);
$this->server->exec();
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status,'Incorrect status received. Full response body: ' . $this->response->body);
$this->assertEquals(array(
'Content-Length' => '0',
),
$this->response->headers
);
$this->assertEquals('Test contents',file_get_contents(SABRE_TEMPDIR . '/col2/test.txt'));
}
}