aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/sabre/dav/tests/Sabre/DAV/TemporaryFileFilterTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/sabre/dav/tests/Sabre/DAV/TemporaryFileFilterTest.php')
-rw-r--r--vendor/sabre/dav/tests/Sabre/DAV/TemporaryFileFilterTest.php252
1 files changed, 252 insertions, 0 deletions
diff --git a/vendor/sabre/dav/tests/Sabre/DAV/TemporaryFileFilterTest.php b/vendor/sabre/dav/tests/Sabre/DAV/TemporaryFileFilterTest.php
new file mode 100644
index 000000000..d136eeb17
--- /dev/null
+++ b/vendor/sabre/dav/tests/Sabre/DAV/TemporaryFileFilterTest.php
@@ -0,0 +1,252 @@
+<?php
+
+namespace Sabre\DAV;
+
+use Sabre\HTTP;
+
+class TemporaryFileFilterTest extends AbstractServer {
+
+ function setUp() {
+
+ parent::setUp();
+ $plugin = new TemporaryFileFilterPlugin(SABRE_TEMPDIR . '/tff');
+ $this->server->addPlugin($plugin);
+
+ }
+
+ function testPutNormal() {
+
+ $serverVars = array(
+ 'REQUEST_URI' => '/testput.txt',
+ 'REQUEST_METHOD' => 'PUT',
+ );
+
+ $request = new HTTP\Request($serverVars);
+ $request->setBody('Testing new file');
+ $this->server->httpRequest = ($request);
+ $this->server->exec();
+
+ $this->assertEquals('', $this->response->body);
+ $this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
+ $this->assertEquals('0', $this->response->headers['Content-Length']);
+
+ $this->assertEquals('Testing new file',file_get_contents(SABRE_TEMPDIR . '/testput.txt'));
+
+ }
+
+ function testPutTemp() {
+
+ // mimicking an OS/X resource fork
+ $serverVars = array(
+ 'REQUEST_URI' => '/._testput.txt',
+ 'REQUEST_METHOD' => 'PUT',
+ );
+
+ $request = new HTTP\Request($serverVars);
+ $request->setBody('Testing new file');
+ $this->server->httpRequest = ($request);
+ $this->server->exec();
+
+ $this->assertEquals('', $this->response->body);
+ $this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
+ $this->assertEquals(array(
+ 'X-Sabre-Temp' => 'true',
+ ),$this->response->headers);
+
+ $this->assertFalse(file_exists(SABRE_TEMPDIR . '/._testput.txt'),'._testput.txt should not exist in the regular file structure.');
+
+ }
+
+ function testPutTempIfNoneMatch() {
+
+ // mimicking an OS/X resource fork
+ $serverVars = array(
+ 'REQUEST_URI' => '/._testput.txt',
+ 'REQUEST_METHOD' => 'PUT',
+ 'HTTP_IF_NONE_MATCH' => '*',
+ );
+
+ $request = new HTTP\Request($serverVars);
+ $request->setBody('Testing new file');
+ $this->server->httpRequest = ($request);
+ $this->server->exec();
+
+ $this->assertEquals('', $this->response->body);
+ $this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
+ $this->assertEquals(array(
+ 'X-Sabre-Temp' => 'true',
+ ),$this->response->headers);
+
+ $this->assertFalse(file_exists(SABRE_TEMPDIR . '/._testput.txt'),'._testput.txt should not exist in the regular file structure.');
+
+
+ $this->server->exec();
+
+ $this->assertEquals('HTTP/1.1 412 Precondition failed',$this->response->status);
+ $this->assertEquals(array(
+ 'X-Sabre-Temp' => 'true',
+ 'Content-Type' => 'application/xml; charset=utf-8',
+ ),$this->response->headers);
+
+ }
+
+ function testPutGet() {
+
+ // mimicking an OS/X resource fork
+ $serverVars = array(
+ 'REQUEST_URI' => '/._testput.txt',
+ 'REQUEST_METHOD' => 'PUT',
+ );
+
+ $request = new HTTP\Request($serverVars);
+ $request->setBody('Testing new file');
+ $this->server->httpRequest = ($request);
+ $this->server->exec();
+
+ $this->assertEquals('', $this->response->body);
+ $this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
+ $this->assertEquals(array(
+ 'X-Sabre-Temp' => 'true',
+ ),$this->response->headers);
+
+ $serverVars = array(
+ 'REQUEST_URI' => '/._testput.txt',
+ 'REQUEST_METHOD' => 'GET',
+ );
+
+ $request = new HTTP\Request($serverVars);
+ $this->server->httpRequest = ($request);
+ $this->server->exec();
+
+ $this->assertEquals('HTTP/1.1 200 OK',$this->response->status);
+ $this->assertEquals(array(
+ 'X-Sabre-Temp' => 'true',
+ 'Content-Length' => 16,
+ 'Content-Type' => 'application/octet-stream',
+ ),$this->response->headers);
+
+ $this->assertEquals('Testing new file',stream_get_contents($this->response->body));
+
+ }
+
+ function testLockNonExistant() {
+
+ mkdir(SABRE_TEMPDIR . '/locksdir');
+ $locksBackend = new Locks\Backend\FS(SABRE_TEMPDIR . '/locksdir');
+ $locksPlugin = new Locks\Plugin($locksBackend);
+ $this->server->addPlugin($locksPlugin);
+
+ // mimicking an OS/X resource fork
+ $serverVars = array(
+ 'REQUEST_URI' => '/._testlock.txt',
+ 'REQUEST_METHOD' => 'LOCK',
+ );
+
+ $request = new HTTP\Request($serverVars);
+
+ $request->setBody('<?xml version="1.0"?>
+<D:lockinfo xmlns:D="DAV:">
+ <D:lockscope><D:exclusive/></D:lockscope>
+ <D:locktype><D:write/></D:locktype>
+ <D:owner>
+ <D:href>http://example.org/~ejw/contact.html</D:href>
+ </D:owner>
+</D:lockinfo>');
+
+ $this->server->httpRequest = ($request);
+ $this->server->exec();
+
+ $this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
+ $this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
+ $this->assertTrue(preg_match('/^<opaquelocktoken:(.*)>$/',$this->response->headers['Lock-Token'])===1,'We did not get a valid Locktoken back (' . $this->response->headers['Lock-Token'] . ')');
+ $this->assertEquals('true',$this->response->headers['X-Sabre-Temp']);
+
+ $this->assertFalse(file_exists(SABRE_TEMPDIR . '/._testlock.txt'),'._testlock.txt should not exist in the regular file structure.');
+
+ }
+
+ function testPutDelete() {
+
+ // mimicking an OS/X resource fork
+ $serverVars = array(
+ 'REQUEST_URI' => '/._testput.txt',
+ 'REQUEST_METHOD' => 'PUT',
+ );
+
+ $request = new HTTP\Request($serverVars);
+ $request->setBody('Testing new file');
+ $this->server->httpRequest = ($request);
+ $this->server->exec();
+
+ $this->assertEquals('', $this->response->body);
+ $this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
+ $this->assertEquals(array(
+ 'X-Sabre-Temp' => 'true',
+ ),$this->response->headers);
+
+ $serverVars = array(
+ 'REQUEST_URI' => '/._testput.txt',
+ 'REQUEST_METHOD' => 'DELETE',
+ );
+
+ $request = new HTTP\Request($serverVars);
+ $this->server->httpRequest = ($request);
+ $this->server->exec();
+
+ $this->assertEquals('HTTP/1.1 204 No Content',$this->response->status, "Incorrect status code received. Full body:\n". $this->response->body);
+ $this->assertEquals(array(
+ 'X-Sabre-Temp' => 'true',
+ ),$this->response->headers);
+
+ $this->assertEquals('',$this->response->body);
+
+ }
+
+ function testPutPropfind() {
+
+ // mimicking an OS/X resource fork
+ $serverVars = array(
+ 'REQUEST_URI' => '/._testput.txt',
+ 'REQUEST_METHOD' => 'PUT',
+ );
+
+ $request = new HTTP\Request($serverVars);
+ $request->setBody('Testing new file');
+ $this->server->httpRequest = ($request);
+ $this->server->exec();
+
+ $this->assertEquals('', $this->response->body);
+ $this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
+ $this->assertEquals(array(
+ 'X-Sabre-Temp' => 'true',
+ ),$this->response->headers);
+
+ $serverVars = array(
+ 'REQUEST_URI' => '/._testput.txt',
+ 'REQUEST_METHOD' => 'PROPFIND',
+ );
+
+ $request = new HTTP\Request($serverVars);
+ $request->setBody('');
+ $this->server->httpRequest = ($request);
+ $this->server->exec();
+
+ $this->assertEquals('HTTP/1.1 207 Multi-Status',$this->response->status,'Incorrect status code returned. Body: ' . $this->response->body);
+ $this->assertEquals(array(
+ 'X-Sabre-Temp' => 'true',
+ 'Content-Type' => 'application/xml; charset=utf-8',
+ ),$this->response->headers);
+
+ $body = preg_replace("/xmlns(:[A-Za-z0-9_])?=(\"|\')DAV:(\"|\')/","xmlns\\1=\"urn:DAV\"",$this->response->body);
+ $xml = simplexml_load_string($body);
+ $xml->registerXPathNamespace('d','urn:DAV');
+
+ list($data) = $xml->xpath('/d:multistatus/d:response/d:href');
+ $this->assertEquals('/._testput.txt',(string)$data,'href element should have been /._testput.txt');
+
+ $data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:resourcetype');
+ $this->assertEquals(1,count($data));
+
+ }
+
+}