xref: /plugin/davcal/vendor/sabre/dav/tests/Sabre/DAV/PartialUpdate/PluginTest.php (revision a1a3b6794e0e143a4a8b51d3185ce2d339be61ab)
1*a1a3b679SAndreas Boehler<?php
2*a1a3b679SAndreas Boehler
3*a1a3b679SAndreas Boehlernamespace Sabre\DAV\PartialUpdate;
4*a1a3b679SAndreas Boehler
5*a1a3b679SAndreas Boehleruse Sabre\DAV;
6*a1a3b679SAndreas Boehleruse Sabre\HTTP;
7*a1a3b679SAndreas Boehler
8*a1a3b679SAndreas Boehlerrequire_once 'Sabre/DAV/PartialUpdate/FileMock.php';
9*a1a3b679SAndreas Boehler
10*a1a3b679SAndreas Boehlerclass PluginTest extends \Sabre\DAVServerTest {
11*a1a3b679SAndreas Boehler
12*a1a3b679SAndreas Boehler    protected $node;
13*a1a3b679SAndreas Boehler    protected $plugin;
14*a1a3b679SAndreas Boehler
15*a1a3b679SAndreas Boehler    function setUp() {
16*a1a3b679SAndreas Boehler
17*a1a3b679SAndreas Boehler        $this->node = new FileMock();
18*a1a3b679SAndreas Boehler        $this->tree[] = $this->node;
19*a1a3b679SAndreas Boehler
20*a1a3b679SAndreas Boehler        parent::setUp();
21*a1a3b679SAndreas Boehler
22*a1a3b679SAndreas Boehler        $this->plugin = new Plugin();
23*a1a3b679SAndreas Boehler        $this->server->addPlugin($this->plugin);
24*a1a3b679SAndreas Boehler
25*a1a3b679SAndreas Boehler
26*a1a3b679SAndreas Boehler
27*a1a3b679SAndreas Boehler    }
28*a1a3b679SAndreas Boehler
29*a1a3b679SAndreas Boehler    function testInit() {
30*a1a3b679SAndreas Boehler
31*a1a3b679SAndreas Boehler        $this->assertEquals('partialupdate', $this->plugin->getPluginName());
32*a1a3b679SAndreas Boehler        $this->assertEquals(['sabredav-partialupdate'], $this->plugin->getFeatures());
33*a1a3b679SAndreas Boehler        $this->assertEquals([
34*a1a3b679SAndreas Boehler            'PATCH'
35*a1a3b679SAndreas Boehler        ], $this->plugin->getHTTPMethods('partial'));
36*a1a3b679SAndreas Boehler        $this->assertEquals([
37*a1a3b679SAndreas Boehler        ], $this->plugin->getHTTPMethods(''));
38*a1a3b679SAndreas Boehler
39*a1a3b679SAndreas Boehler    }
40*a1a3b679SAndreas Boehler
41*a1a3b679SAndreas Boehler    function testPatchNoRange() {
42*a1a3b679SAndreas Boehler
43*a1a3b679SAndreas Boehler        $this->node->put('00000000');
44*a1a3b679SAndreas Boehler        $request = HTTP\Sapi::createFromServerArray([
45*a1a3b679SAndreas Boehler            'REQUEST_METHOD' => 'PATCH',
46*a1a3b679SAndreas Boehler            'REQUEST_URI'    => '/partial',
47*a1a3b679SAndreas Boehler        ]);
48*a1a3b679SAndreas Boehler        $response = $this->request($request);
49*a1a3b679SAndreas Boehler
50*a1a3b679SAndreas Boehler        $this->assertEquals(400, $response->status, 'Full response body:' . $response->body);
51*a1a3b679SAndreas Boehler
52*a1a3b679SAndreas Boehler    }
53*a1a3b679SAndreas Boehler
54*a1a3b679SAndreas Boehler    function testPatchNotSupported() {
55*a1a3b679SAndreas Boehler
56*a1a3b679SAndreas Boehler        $this->node->put('00000000');
57*a1a3b679SAndreas Boehler        $request = new HTTP\Request('PATCH', '/', ['X-Update-Range' => '3-4']);
58*a1a3b679SAndreas Boehler        $request->setBody(
59*a1a3b679SAndreas Boehler            '111'
60*a1a3b679SAndreas Boehler        );
61*a1a3b679SAndreas Boehler        $response = $this->request($request);
62*a1a3b679SAndreas Boehler
63*a1a3b679SAndreas Boehler        $this->assertEquals(405, $response->status, 'Full response body:' . $response->body);
64*a1a3b679SAndreas Boehler
65*a1a3b679SAndreas Boehler    }
66*a1a3b679SAndreas Boehler
67*a1a3b679SAndreas Boehler    function testPatchNoContentType() {
68*a1a3b679SAndreas Boehler
69*a1a3b679SAndreas Boehler        $this->node->put('00000000');
70*a1a3b679SAndreas Boehler        $request = new HTTP\Request('PATCH', '/partial', ['X-Update-Range' => 'bytes=3-4']);
71*a1a3b679SAndreas Boehler        $request->setBody(
72*a1a3b679SAndreas Boehler            '111'
73*a1a3b679SAndreas Boehler        );
74*a1a3b679SAndreas Boehler        $response = $this->request($request);
75*a1a3b679SAndreas Boehler
76*a1a3b679SAndreas Boehler        $this->assertEquals(415, $response->status, 'Full response body:' . $response->body);
77*a1a3b679SAndreas Boehler
78*a1a3b679SAndreas Boehler    }
79*a1a3b679SAndreas Boehler
80*a1a3b679SAndreas Boehler    function testPatchBadRange() {
81*a1a3b679SAndreas Boehler
82*a1a3b679SAndreas Boehler        $this->node->put('00000000');
83*a1a3b679SAndreas Boehler        $request = new HTTP\Request('PATCH', '/partial', ['X-Update-Range' => 'bytes=3-4', 'Content-Type' => 'application/x-sabredav-partialupdate', 'Content-Length' => '3']);
84*a1a3b679SAndreas Boehler        $request->setBody(
85*a1a3b679SAndreas Boehler            '111'
86*a1a3b679SAndreas Boehler        );
87*a1a3b679SAndreas Boehler        $response = $this->request($request);
88*a1a3b679SAndreas Boehler
89*a1a3b679SAndreas Boehler        $this->assertEquals(416, $response->status, 'Full response body:' . $response->body);
90*a1a3b679SAndreas Boehler
91*a1a3b679SAndreas Boehler    }
92*a1a3b679SAndreas Boehler
93*a1a3b679SAndreas Boehler    function testPatchNoLength() {
94*a1a3b679SAndreas Boehler
95*a1a3b679SAndreas Boehler        $this->node->put('00000000');
96*a1a3b679SAndreas Boehler        $request = new HTTP\Request('PATCH', '/partial', ['X-Update-Range' => 'bytes=3-5', 'Content-Type' => 'application/x-sabredav-partialupdate']);
97*a1a3b679SAndreas Boehler        $request->setBody(
98*a1a3b679SAndreas Boehler            '111'
99*a1a3b679SAndreas Boehler        );
100*a1a3b679SAndreas Boehler        $response = $this->request($request);
101*a1a3b679SAndreas Boehler
102*a1a3b679SAndreas Boehler        $this->assertEquals(411, $response->status, 'Full response body:' . $response->body);
103*a1a3b679SAndreas Boehler
104*a1a3b679SAndreas Boehler    }
105*a1a3b679SAndreas Boehler
106*a1a3b679SAndreas Boehler    function testPatchSuccess() {
107*a1a3b679SAndreas Boehler
108*a1a3b679SAndreas Boehler        $this->node->put('00000000');
109*a1a3b679SAndreas Boehler        $request = new HTTP\Request('PATCH', '/partial', ['X-Update-Range' => 'bytes=3-5', 'Content-Type' => 'application/x-sabredav-partialupdate', 'Content-Length' => 3]);
110*a1a3b679SAndreas Boehler        $request->setBody(
111*a1a3b679SAndreas Boehler            '111'
112*a1a3b679SAndreas Boehler        );
113*a1a3b679SAndreas Boehler        $response = $this->request($request);
114*a1a3b679SAndreas Boehler
115*a1a3b679SAndreas Boehler        $this->assertEquals(204, $response->status, 'Full response body:' . $response->body);
116*a1a3b679SAndreas Boehler        $this->assertEquals('00011100', $this->node->get());
117*a1a3b679SAndreas Boehler
118*a1a3b679SAndreas Boehler    }
119*a1a3b679SAndreas Boehler
120*a1a3b679SAndreas Boehler    function testPatchNoEndRange() {
121*a1a3b679SAndreas Boehler
122*a1a3b679SAndreas Boehler        $this->node->put('00000');
123*a1a3b679SAndreas Boehler        $request = new HTTP\Request('PATCH', '/partial', ['X-Update-Range' => 'bytes=3-', 'Content-Type' => 'application/x-sabredav-partialupdate', 'Content-Length' => '3']);
124*a1a3b679SAndreas Boehler        $request->setBody(
125*a1a3b679SAndreas Boehler            '111'
126*a1a3b679SAndreas Boehler        );
127*a1a3b679SAndreas Boehler
128*a1a3b679SAndreas Boehler        $response = $this->request($request);
129*a1a3b679SAndreas Boehler
130*a1a3b679SAndreas Boehler        $this->assertEquals(204, $response->getStatus(), 'Full response body:' . $response->getBodyAsString());
131*a1a3b679SAndreas Boehler        $this->assertEquals('00111', $this->node->get());
132*a1a3b679SAndreas Boehler
133*a1a3b679SAndreas Boehler    }
134*a1a3b679SAndreas Boehler
135*a1a3b679SAndreas Boehler}
136