]> git.mxchange.org Git - friendica-addons.git/blobdiff - dav/SabreDAV/tests/Sabre/DAV/ServerCopyMoveTest.php
Initial Release of the calendar plugin
[friendica-addons.git] / dav / SabreDAV / tests / Sabre / DAV / ServerCopyMoveTest.php
diff --git a/dav/SabreDAV/tests/Sabre/DAV/ServerCopyMoveTest.php b/dav/SabreDAV/tests/Sabre/DAV/ServerCopyMoveTest.php
new file mode 100644 (file)
index 0000000..b7f5b47
--- /dev/null
@@ -0,0 +1,264 @@
+<?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'));
+
+    }
+
+}