xref: /plugin/davcal/vendor/sabre/dav/tests/Sabre/DAV/ServerCopyMoveTest.php (revision a1a3b6794e0e143a4a8b51d3185ce2d339be61ab)
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