xref: /plugin/davcal/vendor/sabre/dav/tests/Sabre/DAV/ServerSimpleTest.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 Boehlerclass ServerSimpleTest extends AbstractServer{
8*a1a3b679SAndreas Boehler
9*a1a3b679SAndreas Boehler    function testConstructArray() {
10*a1a3b679SAndreas Boehler
11*a1a3b679SAndreas Boehler        $nodes = [
12*a1a3b679SAndreas Boehler            new SimpleCollection('hello')
13*a1a3b679SAndreas Boehler        ];
14*a1a3b679SAndreas Boehler
15*a1a3b679SAndreas Boehler        $server = new Server($nodes);
16*a1a3b679SAndreas Boehler        $this->assertEquals($nodes[0], $server->tree->getNodeForPath('hello'));
17*a1a3b679SAndreas Boehler
18*a1a3b679SAndreas Boehler    }
19*a1a3b679SAndreas Boehler
20*a1a3b679SAndreas Boehler    /**
21*a1a3b679SAndreas Boehler     * @expectedException Sabre\DAV\Exception
22*a1a3b679SAndreas Boehler     */
23*a1a3b679SAndreas Boehler    function testConstructIncorrectObj() {
24*a1a3b679SAndreas Boehler
25*a1a3b679SAndreas Boehler        $nodes = [
26*a1a3b679SAndreas Boehler            new SimpleCollection('hello'),
27*a1a3b679SAndreas Boehler            new \STDClass(),
28*a1a3b679SAndreas Boehler        ];
29*a1a3b679SAndreas Boehler
30*a1a3b679SAndreas Boehler        $server = new Server($nodes);
31*a1a3b679SAndreas Boehler
32*a1a3b679SAndreas Boehler    }
33*a1a3b679SAndreas Boehler
34*a1a3b679SAndreas Boehler    /**
35*a1a3b679SAndreas Boehler     * @expectedException Sabre\DAV\Exception
36*a1a3b679SAndreas Boehler     */
37*a1a3b679SAndreas Boehler    function testConstructInvalidArg() {
38*a1a3b679SAndreas Boehler
39*a1a3b679SAndreas Boehler        $server = new Server(1);
40*a1a3b679SAndreas Boehler
41*a1a3b679SAndreas Boehler    }
42*a1a3b679SAndreas Boehler
43*a1a3b679SAndreas Boehler    function testOptions() {
44*a1a3b679SAndreas Boehler
45*a1a3b679SAndreas Boehler        $request = new HTTP\Request('OPTIONS', '/');
46*a1a3b679SAndreas Boehler        $this->server->httpRequest = $request;
47*a1a3b679SAndreas Boehler        $this->server->exec();
48*a1a3b679SAndreas Boehler
49*a1a3b679SAndreas Boehler        $this->assertEquals([
50*a1a3b679SAndreas Boehler            'DAV'             => ['1, 3, extended-mkcol'],
51*a1a3b679SAndreas Boehler            'MS-Author-Via'   => ['DAV'],
52*a1a3b679SAndreas Boehler            'Allow'           => ['OPTIONS, GET, HEAD, DELETE, PROPFIND, PUT, PROPPATCH, COPY, MOVE, REPORT'],
53*a1a3b679SAndreas Boehler            'Accept-Ranges'   => ['bytes'],
54*a1a3b679SAndreas Boehler            'Content-Length'  => ['0'],
55*a1a3b679SAndreas Boehler            'X-Sabre-Version' => [Version::VERSION],
56*a1a3b679SAndreas Boehler        ],$this->response->getHeaders());
57*a1a3b679SAndreas Boehler
58*a1a3b679SAndreas Boehler        $this->assertEquals(200, $this->response->status);
59*a1a3b679SAndreas Boehler        $this->assertEquals('', $this->response->body);
60*a1a3b679SAndreas Boehler
61*a1a3b679SAndreas Boehler    }
62*a1a3b679SAndreas Boehler
63*a1a3b679SAndreas Boehler    function testOptionsUnmapped() {
64*a1a3b679SAndreas Boehler
65*a1a3b679SAndreas Boehler        $request = new HTTP\Request('OPTIONS', '/unmapped');
66*a1a3b679SAndreas Boehler        $this->server->httpRequest = $request;
67*a1a3b679SAndreas Boehler
68*a1a3b679SAndreas Boehler        $this->server->exec();
69*a1a3b679SAndreas Boehler
70*a1a3b679SAndreas Boehler        $this->assertEquals([
71*a1a3b679SAndreas Boehler            'DAV'             => ['1, 3, extended-mkcol'],
72*a1a3b679SAndreas Boehler            'MS-Author-Via'   => ['DAV'],
73*a1a3b679SAndreas Boehler            'Allow'           => ['OPTIONS, GET, HEAD, DELETE, PROPFIND, PUT, PROPPATCH, COPY, MOVE, REPORT, MKCOL'],
74*a1a3b679SAndreas Boehler            'Accept-Ranges'   => ['bytes'],
75*a1a3b679SAndreas Boehler            'Content-Length'  => ['0'],
76*a1a3b679SAndreas Boehler            'X-Sabre-Version' => [Version::VERSION],
77*a1a3b679SAndreas Boehler        ],$this->response->getHeaders());
78*a1a3b679SAndreas Boehler
79*a1a3b679SAndreas Boehler        $this->assertEquals(200, $this->response->status);
80*a1a3b679SAndreas Boehler        $this->assertEquals('', $this->response->body);
81*a1a3b679SAndreas Boehler
82*a1a3b679SAndreas Boehler    }
83*a1a3b679SAndreas Boehler
84*a1a3b679SAndreas Boehler    function testNonExistantMethod() {
85*a1a3b679SAndreas Boehler
86*a1a3b679SAndreas Boehler        $serverVars = [
87*a1a3b679SAndreas Boehler            'REQUEST_URI'    => '/',
88*a1a3b679SAndreas Boehler            'REQUEST_METHOD' => 'BLABLA',
89*a1a3b679SAndreas Boehler        ];
90*a1a3b679SAndreas Boehler
91*a1a3b679SAndreas Boehler        $request = HTTP\Sapi::createFromServerArray($serverVars);
92*a1a3b679SAndreas Boehler        $this->server->httpRequest = ($request);
93*a1a3b679SAndreas Boehler        $this->server->exec();
94*a1a3b679SAndreas Boehler
95*a1a3b679SAndreas Boehler        $this->assertEquals([
96*a1a3b679SAndreas Boehler            'X-Sabre-Version' => [Version::VERSION],
97*a1a3b679SAndreas Boehler            'Content-Type'    => ['application/xml; charset=utf-8'],
98*a1a3b679SAndreas Boehler        ],$this->response->getHeaders());
99*a1a3b679SAndreas Boehler
100*a1a3b679SAndreas Boehler        $this->assertEquals(501, $this->response->status);
101*a1a3b679SAndreas Boehler
102*a1a3b679SAndreas Boehler
103*a1a3b679SAndreas Boehler    }
104*a1a3b679SAndreas Boehler
105*a1a3b679SAndreas Boehler    function testBaseUri() {
106*a1a3b679SAndreas Boehler
107*a1a3b679SAndreas Boehler        $serverVars = [
108*a1a3b679SAndreas Boehler            'REQUEST_URI'    => '/blabla/test.txt',
109*a1a3b679SAndreas Boehler            'REQUEST_METHOD' => 'GET',
110*a1a3b679SAndreas Boehler        ];
111*a1a3b679SAndreas Boehler        $filename = $this->tempDir . '/test.txt';
112*a1a3b679SAndreas Boehler
113*a1a3b679SAndreas Boehler        $request = HTTP\Sapi::createFromServerArray($serverVars);
114*a1a3b679SAndreas Boehler        $this->server->setBaseUri('/blabla/');
115*a1a3b679SAndreas Boehler        $this->assertEquals('/blabla/',$this->server->getBaseUri());
116*a1a3b679SAndreas Boehler        $this->server->httpRequest = ($request);
117*a1a3b679SAndreas Boehler        $this->server->exec();
118*a1a3b679SAndreas Boehler
119*a1a3b679SAndreas Boehler        $this->assertEquals([
120*a1a3b679SAndreas Boehler            'X-Sabre-Version' => [Version::VERSION],
121*a1a3b679SAndreas Boehler            'Content-Type'    => ['application/octet-stream'],
122*a1a3b679SAndreas Boehler            'Content-Length'  => [13],
123*a1a3b679SAndreas Boehler            'Last-Modified'   => [HTTP\Util::toHTTPDate(new \DateTime('@' . filemtime($this->tempDir . '/test.txt')))],
124*a1a3b679SAndreas Boehler            'ETag'            => ['"' . sha1(fileinode($filename) . filesize($filename) . filemtime($filename)) . '"'],
125*a1a3b679SAndreas Boehler            ],
126*a1a3b679SAndreas Boehler            $this->response->getHeaders()
127*a1a3b679SAndreas Boehler         );
128*a1a3b679SAndreas Boehler
129*a1a3b679SAndreas Boehler        $this->assertEquals(200, $this->response->status);
130*a1a3b679SAndreas Boehler        $this->assertEquals('Test contents', stream_get_contents($this->response->body));
131*a1a3b679SAndreas Boehler
132*a1a3b679SAndreas Boehler    }
133*a1a3b679SAndreas Boehler
134*a1a3b679SAndreas Boehler    function testBaseUriAddSlash() {
135*a1a3b679SAndreas Boehler
136*a1a3b679SAndreas Boehler        $tests = [
137*a1a3b679SAndreas Boehler            '/'         => '/',
138*a1a3b679SAndreas Boehler            '/foo'      => '/foo/',
139*a1a3b679SAndreas Boehler            '/foo/'     => '/foo/',
140*a1a3b679SAndreas Boehler            '/foo/bar'  => '/foo/bar/',
141*a1a3b679SAndreas Boehler            '/foo/bar/' => '/foo/bar/',
142*a1a3b679SAndreas Boehler        ];
143*a1a3b679SAndreas Boehler
144*a1a3b679SAndreas Boehler        foreach($tests as $test=>$result) {
145*a1a3b679SAndreas Boehler            $this->server->setBaseUri($test);
146*a1a3b679SAndreas Boehler
147*a1a3b679SAndreas Boehler            $this->assertEquals($result, $this->server->getBaseUri());
148*a1a3b679SAndreas Boehler
149*a1a3b679SAndreas Boehler        }
150*a1a3b679SAndreas Boehler
151*a1a3b679SAndreas Boehler    }
152*a1a3b679SAndreas Boehler
153*a1a3b679SAndreas Boehler    function testCalculateUri() {
154*a1a3b679SAndreas Boehler
155*a1a3b679SAndreas Boehler        $uris = [
156*a1a3b679SAndreas Boehler            'http://www.example.org/root/somepath',
157*a1a3b679SAndreas Boehler            '/root/somepath',
158*a1a3b679SAndreas Boehler            '/root/somepath/',
159*a1a3b679SAndreas Boehler        ];
160*a1a3b679SAndreas Boehler
161*a1a3b679SAndreas Boehler        $this->server->setBaseUri('/root/');
162*a1a3b679SAndreas Boehler
163*a1a3b679SAndreas Boehler        foreach($uris as $uri) {
164*a1a3b679SAndreas Boehler
165*a1a3b679SAndreas Boehler            $this->assertEquals('somepath',$this->server->calculateUri($uri));
166*a1a3b679SAndreas Boehler
167*a1a3b679SAndreas Boehler        }
168*a1a3b679SAndreas Boehler
169*a1a3b679SAndreas Boehler        $this->server->setBaseUri('/root');
170*a1a3b679SAndreas Boehler
171*a1a3b679SAndreas Boehler        foreach($uris as $uri) {
172*a1a3b679SAndreas Boehler
173*a1a3b679SAndreas Boehler            $this->assertEquals('somepath',$this->server->calculateUri($uri));
174*a1a3b679SAndreas Boehler
175*a1a3b679SAndreas Boehler        }
176*a1a3b679SAndreas Boehler
177*a1a3b679SAndreas Boehler        $this->assertEquals('', $this->server->calculateUri('/root'));
178*a1a3b679SAndreas Boehler
179*a1a3b679SAndreas Boehler    }
180*a1a3b679SAndreas Boehler
181*a1a3b679SAndreas Boehler    function testCalculateUriSpecialChars() {
182*a1a3b679SAndreas Boehler
183*a1a3b679SAndreas Boehler        $uris = [
184*a1a3b679SAndreas Boehler            'http://www.example.org/root/%C3%A0fo%C3%B3',
185*a1a3b679SAndreas Boehler            '/root/%C3%A0fo%C3%B3',
186*a1a3b679SAndreas Boehler            '/root/%C3%A0fo%C3%B3/'
187*a1a3b679SAndreas Boehler        ];
188*a1a3b679SAndreas Boehler
189*a1a3b679SAndreas Boehler        $this->server->setBaseUri('/root/');
190*a1a3b679SAndreas Boehler
191*a1a3b679SAndreas Boehler        foreach($uris as $uri) {
192*a1a3b679SAndreas Boehler
193*a1a3b679SAndreas Boehler            $this->assertEquals("\xc3\xa0fo\xc3\xb3",$this->server->calculateUri($uri));
194*a1a3b679SAndreas Boehler
195*a1a3b679SAndreas Boehler        }
196*a1a3b679SAndreas Boehler
197*a1a3b679SAndreas Boehler        $this->server->setBaseUri('/root');
198*a1a3b679SAndreas Boehler
199*a1a3b679SAndreas Boehler        foreach($uris as $uri) {
200*a1a3b679SAndreas Boehler
201*a1a3b679SAndreas Boehler            $this->assertEquals("\xc3\xa0fo\xc3\xb3",$this->server->calculateUri($uri));
202*a1a3b679SAndreas Boehler
203*a1a3b679SAndreas Boehler        }
204*a1a3b679SAndreas Boehler
205*a1a3b679SAndreas Boehler        $this->server->setBaseUri('/');
206*a1a3b679SAndreas Boehler
207*a1a3b679SAndreas Boehler        foreach($uris as $uri) {
208*a1a3b679SAndreas Boehler
209*a1a3b679SAndreas Boehler            $this->assertEquals("root/\xc3\xa0fo\xc3\xb3",$this->server->calculateUri($uri));
210*a1a3b679SAndreas Boehler
211*a1a3b679SAndreas Boehler        }
212*a1a3b679SAndreas Boehler
213*a1a3b679SAndreas Boehler    }
214*a1a3b679SAndreas Boehler
215*a1a3b679SAndreas Boehler    /**
216*a1a3b679SAndreas Boehler     * @expectedException \Sabre\DAV\Exception\Forbidden
217*a1a3b679SAndreas Boehler     */
218*a1a3b679SAndreas Boehler    function testCalculateUriBreakout() {
219*a1a3b679SAndreas Boehler
220*a1a3b679SAndreas Boehler        $uri = '/path1/';
221*a1a3b679SAndreas Boehler
222*a1a3b679SAndreas Boehler        $this->server->setBaseUri('/path2/');
223*a1a3b679SAndreas Boehler        $this->server->calculateUri($uri);
224*a1a3b679SAndreas Boehler
225*a1a3b679SAndreas Boehler    }
226*a1a3b679SAndreas Boehler
227*a1a3b679SAndreas Boehler    /**
228*a1a3b679SAndreas Boehler     */
229*a1a3b679SAndreas Boehler    function testGuessBaseUri() {
230*a1a3b679SAndreas Boehler
231*a1a3b679SAndreas Boehler        $serverVars = [
232*a1a3b679SAndreas Boehler            'REQUEST_URI' => '/index.php/root',
233*a1a3b679SAndreas Boehler            'PATH_INFO'   => '/root',
234*a1a3b679SAndreas Boehler        ];
235*a1a3b679SAndreas Boehler
236*a1a3b679SAndreas Boehler        $httpRequest = HTTP\Sapi::createFromServerArray($serverVars);
237*a1a3b679SAndreas Boehler        $server = new Server();
238*a1a3b679SAndreas Boehler        $server->httpRequest = $httpRequest;
239*a1a3b679SAndreas Boehler
240*a1a3b679SAndreas Boehler        $this->assertEquals('/index.php/', $server->guessBaseUri());
241*a1a3b679SAndreas Boehler
242*a1a3b679SAndreas Boehler    }
243*a1a3b679SAndreas Boehler
244*a1a3b679SAndreas Boehler    /**
245*a1a3b679SAndreas Boehler     * @depends testGuessBaseUri
246*a1a3b679SAndreas Boehler     */
247*a1a3b679SAndreas Boehler    function testGuessBaseUriPercentEncoding() {
248*a1a3b679SAndreas Boehler
249*a1a3b679SAndreas Boehler        $serverVars = [
250*a1a3b679SAndreas Boehler            'REQUEST_URI' => '/index.php/dir/path2/path%20with%20spaces',
251*a1a3b679SAndreas Boehler            'PATH_INFO'   => '/dir/path2/path with spaces',
252*a1a3b679SAndreas Boehler        ];
253*a1a3b679SAndreas Boehler
254*a1a3b679SAndreas Boehler        $httpRequest = HTTP\Sapi::createFromServerArray($serverVars);
255*a1a3b679SAndreas Boehler        $server = new Server();
256*a1a3b679SAndreas Boehler        $server->httpRequest = $httpRequest;
257*a1a3b679SAndreas Boehler
258*a1a3b679SAndreas Boehler        $this->assertEquals('/index.php/', $server->guessBaseUri());
259*a1a3b679SAndreas Boehler
260*a1a3b679SAndreas Boehler    }
261*a1a3b679SAndreas Boehler
262*a1a3b679SAndreas Boehler    /**
263*a1a3b679SAndreas Boehler     * @depends testGuessBaseUri
264*a1a3b679SAndreas Boehler     */
265*a1a3b679SAndreas Boehler    /*
266*a1a3b679SAndreas Boehler    function testGuessBaseUriPercentEncoding2() {
267*a1a3b679SAndreas Boehler
268*a1a3b679SAndreas Boehler        $this->markTestIncomplete('This behaviour is not yet implemented');
269*a1a3b679SAndreas Boehler        $serverVars = [
270*a1a3b679SAndreas Boehler            'REQUEST_URI' => '/some%20directory+mixed/index.php/dir/path2/path%20with%20spaces',
271*a1a3b679SAndreas Boehler            'PATH_INFO'   => '/dir/path2/path with spaces',
272*a1a3b679SAndreas Boehler        ];
273*a1a3b679SAndreas Boehler
274*a1a3b679SAndreas Boehler        $httpRequest = HTTP\Sapi::createFromServerArray($serverVars);
275*a1a3b679SAndreas Boehler        $server = new Server();
276*a1a3b679SAndreas Boehler        $server->httpRequest = $httpRequest;
277*a1a3b679SAndreas Boehler
278*a1a3b679SAndreas Boehler        $this->assertEquals('/some%20directory+mixed/index.php/', $server->guessBaseUri());
279*a1a3b679SAndreas Boehler
280*a1a3b679SAndreas Boehler    }*/
281*a1a3b679SAndreas Boehler
282*a1a3b679SAndreas Boehler    function testGuessBaseUri2() {
283*a1a3b679SAndreas Boehler
284*a1a3b679SAndreas Boehler        $serverVars = [
285*a1a3b679SAndreas Boehler            'REQUEST_URI' => '/index.php/root/',
286*a1a3b679SAndreas Boehler            'PATH_INFO'   => '/root/',
287*a1a3b679SAndreas Boehler        ];
288*a1a3b679SAndreas Boehler
289*a1a3b679SAndreas Boehler        $httpRequest = HTTP\Sapi::createFromServerArray($serverVars);
290*a1a3b679SAndreas Boehler        $server = new Server();
291*a1a3b679SAndreas Boehler        $server->httpRequest = $httpRequest;
292*a1a3b679SAndreas Boehler
293*a1a3b679SAndreas Boehler        $this->assertEquals('/index.php/', $server->guessBaseUri());
294*a1a3b679SAndreas Boehler
295*a1a3b679SAndreas Boehler    }
296*a1a3b679SAndreas Boehler
297*a1a3b679SAndreas Boehler    function testGuessBaseUriNoPathInfo() {
298*a1a3b679SAndreas Boehler
299*a1a3b679SAndreas Boehler        $serverVars = [
300*a1a3b679SAndreas Boehler            'REQUEST_URI' => '/index.php/root',
301*a1a3b679SAndreas Boehler        ];
302*a1a3b679SAndreas Boehler
303*a1a3b679SAndreas Boehler        $httpRequest = HTTP\Sapi::createFromServerArray($serverVars);
304*a1a3b679SAndreas Boehler        $server = new Server();
305*a1a3b679SAndreas Boehler        $server->httpRequest = $httpRequest;
306*a1a3b679SAndreas Boehler
307*a1a3b679SAndreas Boehler        $this->assertEquals('/', $server->guessBaseUri());
308*a1a3b679SAndreas Boehler
309*a1a3b679SAndreas Boehler    }
310*a1a3b679SAndreas Boehler
311*a1a3b679SAndreas Boehler    function testGuessBaseUriNoPathInfo2() {
312*a1a3b679SAndreas Boehler
313*a1a3b679SAndreas Boehler        $serverVars = [
314*a1a3b679SAndreas Boehler            'REQUEST_URI' => '/a/b/c/test.php',
315*a1a3b679SAndreas Boehler        ];
316*a1a3b679SAndreas Boehler
317*a1a3b679SAndreas Boehler        $httpRequest = HTTP\Sapi::createFromServerArray($serverVars);
318*a1a3b679SAndreas Boehler        $server = new Server();
319*a1a3b679SAndreas Boehler        $server->httpRequest = $httpRequest;
320*a1a3b679SAndreas Boehler
321*a1a3b679SAndreas Boehler        $this->assertEquals('/', $server->guessBaseUri());
322*a1a3b679SAndreas Boehler
323*a1a3b679SAndreas Boehler    }
324*a1a3b679SAndreas Boehler
325*a1a3b679SAndreas Boehler
326*a1a3b679SAndreas Boehler    /**
327*a1a3b679SAndreas Boehler     * @depends testGuessBaseUri
328*a1a3b679SAndreas Boehler     */
329*a1a3b679SAndreas Boehler    function testGuessBaseUriQueryString() {
330*a1a3b679SAndreas Boehler
331*a1a3b679SAndreas Boehler        $serverVars = [
332*a1a3b679SAndreas Boehler            'REQUEST_URI' => '/index.php/root?query_string=blabla',
333*a1a3b679SAndreas Boehler            'PATH_INFO'   => '/root',
334*a1a3b679SAndreas Boehler        ];
335*a1a3b679SAndreas Boehler
336*a1a3b679SAndreas Boehler        $httpRequest = HTTP\Sapi::createFromServerArray($serverVars);
337*a1a3b679SAndreas Boehler        $server = new Server();
338*a1a3b679SAndreas Boehler        $server->httpRequest = $httpRequest;
339*a1a3b679SAndreas Boehler
340*a1a3b679SAndreas Boehler        $this->assertEquals('/index.php/', $server->guessBaseUri());
341*a1a3b679SAndreas Boehler
342*a1a3b679SAndreas Boehler    }
343*a1a3b679SAndreas Boehler
344*a1a3b679SAndreas Boehler    /**
345*a1a3b679SAndreas Boehler     * @depends testGuessBaseUri
346*a1a3b679SAndreas Boehler     * @expectedException \Sabre\DAV\Exception
347*a1a3b679SAndreas Boehler     */
348*a1a3b679SAndreas Boehler    function testGuessBaseUriBadConfig() {
349*a1a3b679SAndreas Boehler
350*a1a3b679SAndreas Boehler        $serverVars = [
351*a1a3b679SAndreas Boehler            'REQUEST_URI' => '/index.php/root/heyyy',
352*a1a3b679SAndreas Boehler            'PATH_INFO'   => '/root',
353*a1a3b679SAndreas Boehler        ];
354*a1a3b679SAndreas Boehler
355*a1a3b679SAndreas Boehler        $httpRequest = HTTP\Sapi::createFromServerArray($serverVars);
356*a1a3b679SAndreas Boehler        $server = new Server();
357*a1a3b679SAndreas Boehler        $server->httpRequest = $httpRequest;
358*a1a3b679SAndreas Boehler
359*a1a3b679SAndreas Boehler        $server->guessBaseUri();
360*a1a3b679SAndreas Boehler
361*a1a3b679SAndreas Boehler    }
362*a1a3b679SAndreas Boehler
363*a1a3b679SAndreas Boehler    function testTriggerException() {
364*a1a3b679SAndreas Boehler
365*a1a3b679SAndreas Boehler        $serverVars = [
366*a1a3b679SAndreas Boehler            'REQUEST_URI' => '/',
367*a1a3b679SAndreas Boehler            'REQUEST_METHOD' => 'FOO',
368*a1a3b679SAndreas Boehler        ];
369*a1a3b679SAndreas Boehler
370*a1a3b679SAndreas Boehler        $httpRequest = HTTP\Sapi::createFromServerArray($serverVars);
371*a1a3b679SAndreas Boehler        $this->server->httpRequest = $httpRequest;
372*a1a3b679SAndreas Boehler        $this->server->on('beforeMethod', [$this,'exceptionTrigger']);
373*a1a3b679SAndreas Boehler        $this->server->exec();
374*a1a3b679SAndreas Boehler
375*a1a3b679SAndreas Boehler        $this->assertEquals([
376*a1a3b679SAndreas Boehler            'Content-Type' => ['application/xml; charset=utf-8'],
377*a1a3b679SAndreas Boehler        ],$this->response->getHeaders());
378*a1a3b679SAndreas Boehler
379*a1a3b679SAndreas Boehler        $this->assertEquals(500, $this->response->status);
380*a1a3b679SAndreas Boehler
381*a1a3b679SAndreas Boehler    }
382*a1a3b679SAndreas Boehler
383*a1a3b679SAndreas Boehler    function exceptionTrigger() {
384*a1a3b679SAndreas Boehler
385*a1a3b679SAndreas Boehler        throw new Exception('Hola');
386*a1a3b679SAndreas Boehler
387*a1a3b679SAndreas Boehler    }
388*a1a3b679SAndreas Boehler
389*a1a3b679SAndreas Boehler    function testReportNotFound() {
390*a1a3b679SAndreas Boehler
391*a1a3b679SAndreas Boehler        $serverVars = [
392*a1a3b679SAndreas Boehler            'REQUEST_URI'    => '/',
393*a1a3b679SAndreas Boehler            'REQUEST_METHOD' => 'REPORT',
394*a1a3b679SAndreas Boehler        ];
395*a1a3b679SAndreas Boehler
396*a1a3b679SAndreas Boehler        $request = HTTP\Sapi::createFromServerArray($serverVars);
397*a1a3b679SAndreas Boehler        $this->server->httpRequest = ($request);
398*a1a3b679SAndreas Boehler        $this->server->httpRequest->setBody('<?xml version="1.0"?><bla:myreport xmlns:bla="http://www.rooftopsolutions.nl/NS"></bla:myreport>');
399*a1a3b679SAndreas Boehler        $this->server->exec();
400*a1a3b679SAndreas Boehler
401*a1a3b679SAndreas Boehler        $this->assertEquals([
402*a1a3b679SAndreas Boehler            'X-Sabre-Version' => [Version::VERSION],
403*a1a3b679SAndreas Boehler            'Content-Type'    => ['application/xml; charset=utf-8'],
404*a1a3b679SAndreas Boehler            ],
405*a1a3b679SAndreas Boehler            $this->response->getHeaders()
406*a1a3b679SAndreas Boehler         );
407*a1a3b679SAndreas Boehler
408*a1a3b679SAndreas Boehler        $this->assertEquals(415, $this->response->status, 'We got an incorrect status back. Full response body follows: ' . $this->response->body);
409*a1a3b679SAndreas Boehler
410*a1a3b679SAndreas Boehler    }
411*a1a3b679SAndreas Boehler
412*a1a3b679SAndreas Boehler    function testReportIntercepted() {
413*a1a3b679SAndreas Boehler
414*a1a3b679SAndreas Boehler        $serverVars = [
415*a1a3b679SAndreas Boehler            'REQUEST_URI'    => '/',
416*a1a3b679SAndreas Boehler            'REQUEST_METHOD' => 'REPORT',
417*a1a3b679SAndreas Boehler        ];
418*a1a3b679SAndreas Boehler
419*a1a3b679SAndreas Boehler        $request = HTTP\Sapi::createFromServerArray($serverVars);
420*a1a3b679SAndreas Boehler        $this->server->httpRequest = ($request);
421*a1a3b679SAndreas Boehler        $this->server->httpRequest->setBody('<?xml version="1.0"?><bla:myreport xmlns:bla="http://www.rooftopsolutions.nl/NS"></bla:myreport>');
422*a1a3b679SAndreas Boehler        $this->server->on('report', [$this,'reportHandler']);
423*a1a3b679SAndreas Boehler        $this->server->exec();
424*a1a3b679SAndreas Boehler
425*a1a3b679SAndreas Boehler        $this->assertEquals([
426*a1a3b679SAndreas Boehler            'X-Sabre-Version' => [Version::VERSION],
427*a1a3b679SAndreas Boehler            'testheader'      => ['testvalue'],
428*a1a3b679SAndreas Boehler            ],
429*a1a3b679SAndreas Boehler            $this->response->getHeaders()
430*a1a3b679SAndreas Boehler        );
431*a1a3b679SAndreas Boehler
432*a1a3b679SAndreas Boehler        $this->assertEquals(418, $this->response->status,'We got an incorrect status back. Full response body follows: ' . $this->response->body);
433*a1a3b679SAndreas Boehler
434*a1a3b679SAndreas Boehler    }
435*a1a3b679SAndreas Boehler
436*a1a3b679SAndreas Boehler    function reportHandler($reportName) {
437*a1a3b679SAndreas Boehler
438*a1a3b679SAndreas Boehler        if ($reportName=='{http://www.rooftopsolutions.nl/NS}myreport') {
439*a1a3b679SAndreas Boehler            $this->server->httpResponse->setStatus(418);
440*a1a3b679SAndreas Boehler            $this->server->httpResponse->setHeader('testheader','testvalue');
441*a1a3b679SAndreas Boehler            return false;
442*a1a3b679SAndreas Boehler        }
443*a1a3b679SAndreas Boehler        else return;
444*a1a3b679SAndreas Boehler
445*a1a3b679SAndreas Boehler    }
446*a1a3b679SAndreas Boehler
447*a1a3b679SAndreas Boehler    function testGetPropertiesForChildren() {
448*a1a3b679SAndreas Boehler
449*a1a3b679SAndreas Boehler        $result = $this->server->getPropertiesForChildren('',[
450*a1a3b679SAndreas Boehler            '{DAV:}getcontentlength',
451*a1a3b679SAndreas Boehler        ]);
452*a1a3b679SAndreas Boehler
453*a1a3b679SAndreas Boehler        $expected = [
454*a1a3b679SAndreas Boehler            'test.txt' => ['{DAV:}getcontentlength' => 13],
455*a1a3b679SAndreas Boehler            'dir/'     => [],
456*a1a3b679SAndreas Boehler        ];
457*a1a3b679SAndreas Boehler
458*a1a3b679SAndreas Boehler        $this->assertEquals($expected,$result);
459*a1a3b679SAndreas Boehler
460*a1a3b679SAndreas Boehler    }
461*a1a3b679SAndreas Boehler
462*a1a3b679SAndreas Boehler}
463