1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\DAV; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehleruse Sabre\HTTP; 6*a1a3b679SAndreas Boehler 7*a1a3b679SAndreas Boehlerrequire_once 'Sabre/HTTP/ResponseMock.php'; 8*a1a3b679SAndreas Boehler 9*a1a3b679SAndreas Boehlerclass ServerCopyMoveTest extends \PHPUnit_Framework_TestCase { 10*a1a3b679SAndreas Boehler 11*a1a3b679SAndreas Boehler private $response; 12*a1a3b679SAndreas Boehler /** 13*a1a3b679SAndreas Boehler * @var Server 14*a1a3b679SAndreas Boehler */ 15*a1a3b679SAndreas Boehler private $server; 16*a1a3b679SAndreas Boehler 17*a1a3b679SAndreas Boehler function setUp() { 18*a1a3b679SAndreas Boehler 19*a1a3b679SAndreas Boehler $this->response = new HTTP\ResponseMock(); 20*a1a3b679SAndreas Boehler $dir = new FS\Directory(SABRE_TEMPDIR); 21*a1a3b679SAndreas Boehler $tree = new Tree($dir); 22*a1a3b679SAndreas Boehler $this->server = new Server($tree); 23*a1a3b679SAndreas Boehler $this->server->sapi = new HTTP\SapiMock(); 24*a1a3b679SAndreas Boehler $this->server->debugExceptions = true; 25*a1a3b679SAndreas Boehler $this->server->httpResponse = $this->response; 26*a1a3b679SAndreas Boehler file_put_contents(SABRE_TEMPDIR . '/test.txt', 'Test contents'); 27*a1a3b679SAndreas Boehler file_put_contents(SABRE_TEMPDIR . '/test2.txt', 'Test contents2'); 28*a1a3b679SAndreas Boehler mkdir(SABRE_TEMPDIR . '/col'); 29*a1a3b679SAndreas Boehler file_put_contents(SABRE_TEMPDIR . 'col/test.txt', 'Test contents'); 30*a1a3b679SAndreas Boehler 31*a1a3b679SAndreas Boehler } 32*a1a3b679SAndreas Boehler 33*a1a3b679SAndreas Boehler function tearDown() { 34*a1a3b679SAndreas Boehler 35*a1a3b679SAndreas Boehler $cleanUp = array('test.txt','testput.txt','testcol','test2.txt','test3.txt','col/test.txt','col','col2/test.txt','col2'); 36*a1a3b679SAndreas Boehler foreach($cleanUp as $file) { 37*a1a3b679SAndreas Boehler $tmpFile = SABRE_TEMPDIR . '/' . $file; 38*a1a3b679SAndreas Boehler if (file_exists($tmpFile)) { 39*a1a3b679SAndreas Boehler 40*a1a3b679SAndreas Boehler if (is_dir($tmpFile)) { 41*a1a3b679SAndreas Boehler rmdir($tmpFile); 42*a1a3b679SAndreas Boehler } else { 43*a1a3b679SAndreas Boehler unlink($tmpFile); 44*a1a3b679SAndreas Boehler } 45*a1a3b679SAndreas Boehler 46*a1a3b679SAndreas Boehler } 47*a1a3b679SAndreas Boehler } 48*a1a3b679SAndreas Boehler 49*a1a3b679SAndreas Boehler } 50*a1a3b679SAndreas Boehler 51*a1a3b679SAndreas Boehler 52*a1a3b679SAndreas Boehler function testCopyOverWrite() { 53*a1a3b679SAndreas Boehler 54*a1a3b679SAndreas Boehler $serverVars = array( 55*a1a3b679SAndreas Boehler 'REQUEST_URI' => '/test.txt', 56*a1a3b679SAndreas Boehler 'REQUEST_METHOD' => 'COPY', 57*a1a3b679SAndreas Boehler 'HTTP_DESTINATION' => '/test2.txt', 58*a1a3b679SAndreas Boehler ); 59*a1a3b679SAndreas Boehler 60*a1a3b679SAndreas Boehler $request = HTTP\Sapi::createFromServerArray($serverVars); 61*a1a3b679SAndreas Boehler $this->server->httpRequest = ($request); 62*a1a3b679SAndreas Boehler $this->server->exec(); 63*a1a3b679SAndreas Boehler 64*a1a3b679SAndreas Boehler $this->assertEquals(204, $this->response->status, 'Received an incorrect HTTP status. Full body inspection: ' . $this->response->body); 65*a1a3b679SAndreas Boehler $this->assertEquals(array( 66*a1a3b679SAndreas Boehler 'X-Sabre-Version' => [Version::VERSION], 67*a1a3b679SAndreas Boehler 'Content-Length' => ['0'], 68*a1a3b679SAndreas Boehler ), 69*a1a3b679SAndreas Boehler $this->response->getHeaders() 70*a1a3b679SAndreas Boehler ); 71*a1a3b679SAndreas Boehler 72*a1a3b679SAndreas Boehler $this->assertEquals('Test contents', file_get_contents(SABRE_TEMPDIR. '/test2.txt')); 73*a1a3b679SAndreas Boehler 74*a1a3b679SAndreas Boehler } 75*a1a3b679SAndreas Boehler 76*a1a3b679SAndreas Boehler function testCopyToSelf() { 77*a1a3b679SAndreas Boehler 78*a1a3b679SAndreas Boehler $serverVars = array( 79*a1a3b679SAndreas Boehler 'REQUEST_URI' => '/test.txt', 80*a1a3b679SAndreas Boehler 'REQUEST_METHOD' => 'COPY', 81*a1a3b679SAndreas Boehler 'HTTP_DESTINATION' => '/test.txt', 82*a1a3b679SAndreas Boehler ); 83*a1a3b679SAndreas Boehler 84*a1a3b679SAndreas Boehler $request = HTTP\Sapi::createFromServerArray($serverVars); 85*a1a3b679SAndreas Boehler $this->server->httpRequest = ($request); 86*a1a3b679SAndreas Boehler $this->server->exec(); 87*a1a3b679SAndreas Boehler 88*a1a3b679SAndreas Boehler $this->assertEquals(403, $this->response->status, 'Received an incorrect HTTP status. Full body inspection: ' . $this->response->body); 89*a1a3b679SAndreas Boehler $this->assertEquals('Test contents', file_get_contents(SABRE_TEMPDIR. '/test.txt')); 90*a1a3b679SAndreas Boehler 91*a1a3b679SAndreas Boehler } 92*a1a3b679SAndreas Boehler 93*a1a3b679SAndreas Boehler function testNonExistantParent() { 94*a1a3b679SAndreas Boehler 95*a1a3b679SAndreas Boehler $serverVars = array( 96*a1a3b679SAndreas Boehler 'REQUEST_URI' => '/test.txt', 97*a1a3b679SAndreas Boehler 'REQUEST_METHOD' => 'COPY', 98*a1a3b679SAndreas Boehler 'HTTP_DESTINATION' => '/testcol2/test2.txt', 99*a1a3b679SAndreas Boehler 'HTTP_OVERWRITE' => 'F', 100*a1a3b679SAndreas Boehler ); 101*a1a3b679SAndreas Boehler 102*a1a3b679SAndreas Boehler $request = HTTP\Sapi::createFromServerArray($serverVars); 103*a1a3b679SAndreas Boehler $this->server->httpRequest = ($request); 104*a1a3b679SAndreas Boehler $this->server->exec(); 105*a1a3b679SAndreas Boehler 106*a1a3b679SAndreas Boehler $this->assertEquals(array( 107*a1a3b679SAndreas Boehler 'X-Sabre-Version' => [Version::VERSION], 108*a1a3b679SAndreas Boehler 'Content-Type' => ['application/xml; charset=utf-8'], 109*a1a3b679SAndreas Boehler ), 110*a1a3b679SAndreas Boehler $this->response->getHeaders() 111*a1a3b679SAndreas Boehler ); 112*a1a3b679SAndreas Boehler 113*a1a3b679SAndreas Boehler $this->assertEquals(409, $this->response->status); 114*a1a3b679SAndreas Boehler 115*a1a3b679SAndreas Boehler } 116*a1a3b679SAndreas Boehler 117*a1a3b679SAndreas Boehler function testRandomOverwriteHeader() { 118*a1a3b679SAndreas Boehler 119*a1a3b679SAndreas Boehler $serverVars = array( 120*a1a3b679SAndreas Boehler 'REQUEST_URI' => '/test.txt', 121*a1a3b679SAndreas Boehler 'REQUEST_METHOD' => 'COPY', 122*a1a3b679SAndreas Boehler 'HTTP_DESTINATION' => '/testcol2/test2.txt', 123*a1a3b679SAndreas Boehler 'HTTP_OVERWRITE' => 'SURE!', 124*a1a3b679SAndreas Boehler ); 125*a1a3b679SAndreas Boehler 126*a1a3b679SAndreas Boehler $request = HTTP\Sapi::createFromServerArray($serverVars); 127*a1a3b679SAndreas Boehler $this->server->httpRequest = ($request); 128*a1a3b679SAndreas Boehler $this->server->exec(); 129*a1a3b679SAndreas Boehler 130*a1a3b679SAndreas Boehler $this->assertEquals(400, $this->response->status); 131*a1a3b679SAndreas Boehler 132*a1a3b679SAndreas Boehler } 133*a1a3b679SAndreas Boehler 134*a1a3b679SAndreas Boehler function testCopyDirectory() { 135*a1a3b679SAndreas Boehler 136*a1a3b679SAndreas Boehler $serverVars = array( 137*a1a3b679SAndreas Boehler 'REQUEST_URI' => '/col', 138*a1a3b679SAndreas Boehler 'REQUEST_METHOD' => 'COPY', 139*a1a3b679SAndreas Boehler 'HTTP_DESTINATION' => '/col2', 140*a1a3b679SAndreas Boehler ); 141*a1a3b679SAndreas Boehler 142*a1a3b679SAndreas Boehler $request = HTTP\Sapi::createFromServerArray($serverVars); 143*a1a3b679SAndreas Boehler $this->server->httpRequest = ($request); 144*a1a3b679SAndreas Boehler $this->server->exec(); 145*a1a3b679SAndreas Boehler 146*a1a3b679SAndreas Boehler $this->assertEquals(201, $this->response->status, 'Full response: ' . $this->response->getBody(true)); 147*a1a3b679SAndreas Boehler 148*a1a3b679SAndreas Boehler $this->assertEquals(array( 149*a1a3b679SAndreas Boehler 'X-Sabre-Version' => [Version::VERSION], 150*a1a3b679SAndreas Boehler 'Content-Length' => ['0'], 151*a1a3b679SAndreas Boehler ), 152*a1a3b679SAndreas Boehler $this->response->getHeaders() 153*a1a3b679SAndreas Boehler ); 154*a1a3b679SAndreas Boehler 155*a1a3b679SAndreas Boehler $this->assertEquals('Test contents',file_get_contents(SABRE_TEMPDIR . '/col2/test.txt')); 156*a1a3b679SAndreas Boehler 157*a1a3b679SAndreas Boehler } 158*a1a3b679SAndreas Boehler 159*a1a3b679SAndreas Boehler function testSimpleCopyFile() { 160*a1a3b679SAndreas Boehler 161*a1a3b679SAndreas Boehler $serverVars = array( 162*a1a3b679SAndreas Boehler 'REQUEST_URI' => '/test.txt', 163*a1a3b679SAndreas Boehler 'REQUEST_METHOD' => 'COPY', 164*a1a3b679SAndreas Boehler 'HTTP_DESTINATION' => '/test3.txt', 165*a1a3b679SAndreas Boehler ); 166*a1a3b679SAndreas Boehler 167*a1a3b679SAndreas Boehler $request = HTTP\Sapi::createFromServerArray($serverVars); 168*a1a3b679SAndreas Boehler $this->server->httpRequest = ($request); 169*a1a3b679SAndreas Boehler $this->server->exec(); 170*a1a3b679SAndreas Boehler 171*a1a3b679SAndreas Boehler $this->assertEquals(array( 172*a1a3b679SAndreas Boehler 'X-Sabre-Version' => [Version::VERSION], 173*a1a3b679SAndreas Boehler 'Content-Length' => ['0'], 174*a1a3b679SAndreas Boehler ), 175*a1a3b679SAndreas Boehler $this->response->getHeaders() 176*a1a3b679SAndreas Boehler ); 177*a1a3b679SAndreas Boehler 178*a1a3b679SAndreas Boehler $this->assertEquals(201, $this->response->status); 179*a1a3b679SAndreas Boehler $this->assertEquals('Test contents', file_get_contents(SABRE_TEMPDIR . '/test3.txt')); 180*a1a3b679SAndreas Boehler 181*a1a3b679SAndreas Boehler } 182*a1a3b679SAndreas Boehler 183*a1a3b679SAndreas Boehler function testSimpleCopyCollection() { 184*a1a3b679SAndreas Boehler 185*a1a3b679SAndreas Boehler $serverVars = array( 186*a1a3b679SAndreas Boehler 'REQUEST_URI' => '/col', 187*a1a3b679SAndreas Boehler 'REQUEST_METHOD' => 'COPY', 188*a1a3b679SAndreas Boehler 'HTTP_DESTINATION' => '/col2', 189*a1a3b679SAndreas Boehler ); 190*a1a3b679SAndreas Boehler 191*a1a3b679SAndreas Boehler $request = HTTP\Sapi::createFromServerArray($serverVars); 192*a1a3b679SAndreas Boehler $this->server->httpRequest = ($request); 193*a1a3b679SAndreas Boehler $this->server->exec(); 194*a1a3b679SAndreas Boehler 195*a1a3b679SAndreas Boehler $this->assertEquals(201, $this->response->status, 'Incorrect status received. Full response body: ' . $this->response->body); 196*a1a3b679SAndreas Boehler 197*a1a3b679SAndreas Boehler $this->assertEquals(array( 198*a1a3b679SAndreas Boehler 'X-Sabre-Version' => [Version::VERSION], 199*a1a3b679SAndreas Boehler 'Content-Length' => ['0'], 200*a1a3b679SAndreas Boehler ), 201*a1a3b679SAndreas Boehler $this->response->getHeaders() 202*a1a3b679SAndreas Boehler ); 203*a1a3b679SAndreas Boehler 204*a1a3b679SAndreas Boehler 205*a1a3b679SAndreas Boehler $this->assertEquals('Test contents',file_get_contents(SABRE_TEMPDIR . '/col2/test.txt')); 206*a1a3b679SAndreas Boehler 207*a1a3b679SAndreas Boehler } 208*a1a3b679SAndreas Boehler 209*a1a3b679SAndreas Boehler} 210