xref: /plugin/davcal/vendor/sabre/dav/tests/Sabre/DAV/PartialUpdate/SpecificationTest.php (revision a1a3b6794e0e143a4a8b51d3185ce2d339be61ab)
1*a1a3b679SAndreas Boehler<?php
2*a1a3b679SAndreas Boehler
3*a1a3b679SAndreas Boehlernamespace Sabre\DAV\PartialUpdate;
4*a1a3b679SAndreas Boehler
5*a1a3b679SAndreas Boehleruse Sabre\DAV\FSExt\File;
6*a1a3b679SAndreas Boehleruse Sabre\DAV\Server;
7*a1a3b679SAndreas Boehleruse Sabre\HTTP;
8*a1a3b679SAndreas Boehler
9*a1a3b679SAndreas Boehler/**
10*a1a3b679SAndreas Boehler * This test is an end-to-end sabredav test that goes through all
11*a1a3b679SAndreas Boehler * the cases in the specification.
12*a1a3b679SAndreas Boehler *
13*a1a3b679SAndreas Boehler * See: http://sabre.io/dav/http-patch/
14*a1a3b679SAndreas Boehler */
15*a1a3b679SAndreas Boehlerclass SpecificationTest extends \PHPUnit_Framework_TestCase {
16*a1a3b679SAndreas Boehler
17*a1a3b679SAndreas Boehler    protected $server;
18*a1a3b679SAndreas Boehler
19*a1a3b679SAndreas Boehler    public function setUp() {
20*a1a3b679SAndreas Boehler
21*a1a3b679SAndreas Boehler        $tree = array(
22*a1a3b679SAndreas Boehler            new File(SABRE_TEMPDIR . '/foobar.txt')
23*a1a3b679SAndreas Boehler        );
24*a1a3b679SAndreas Boehler        $server = new Server($tree);
25*a1a3b679SAndreas Boehler        $server->debugExceptions = true;
26*a1a3b679SAndreas Boehler        $server->addPlugin(new Plugin());
27*a1a3b679SAndreas Boehler
28*a1a3b679SAndreas Boehler        $tree[0]->put('1234567890');
29*a1a3b679SAndreas Boehler
30*a1a3b679SAndreas Boehler        $this->server = $server;
31*a1a3b679SAndreas Boehler
32*a1a3b679SAndreas Boehler    }
33*a1a3b679SAndreas Boehler
34*a1a3b679SAndreas Boehler    public function tearDown() {
35*a1a3b679SAndreas Boehler
36*a1a3b679SAndreas Boehler        \Sabre\TestUtil::clearTempDir();
37*a1a3b679SAndreas Boehler
38*a1a3b679SAndreas Boehler    }
39*a1a3b679SAndreas Boehler
40*a1a3b679SAndreas Boehler    /**
41*a1a3b679SAndreas Boehler     * @dataProvider data
42*a1a3b679SAndreas Boehler     */
43*a1a3b679SAndreas Boehler    public function testUpdateRange($headerValue, $httpStatus, $endResult, $contentLength = 4) {
44*a1a3b679SAndreas Boehler
45*a1a3b679SAndreas Boehler        $headers = [
46*a1a3b679SAndreas Boehler            'Content-Type' => 'application/x-sabredav-partialupdate',
47*a1a3b679SAndreas Boehler            'X-Update-Range' => $headerValue,
48*a1a3b679SAndreas Boehler        ];
49*a1a3b679SAndreas Boehler
50*a1a3b679SAndreas Boehler        if ($contentLength) {
51*a1a3b679SAndreas Boehler            $headers['Content-Length'] = (string)$contentLength;
52*a1a3b679SAndreas Boehler        }
53*a1a3b679SAndreas Boehler
54*a1a3b679SAndreas Boehler        $request = new HTTP\Request('PATCH', '/foobar.txt', $headers, '----');
55*a1a3b679SAndreas Boehler
56*a1a3b679SAndreas Boehler        $request->setBody('----');
57*a1a3b679SAndreas Boehler        $this->server->httpRequest = $request;
58*a1a3b679SAndreas Boehler        $this->server->httpResponse = new HTTP\ResponseMock();
59*a1a3b679SAndreas Boehler        $this->server->sapi = new HTTP\SapiMock();
60*a1a3b679SAndreas Boehler        $this->server->exec();
61*a1a3b679SAndreas Boehler
62*a1a3b679SAndreas Boehler        $this->assertEquals($httpStatus, $this->server->httpResponse->status, 'Incorrect http status received: ' . $this->server->httpResponse->body);
63*a1a3b679SAndreas Boehler        if (!is_null($endResult)) {
64*a1a3b679SAndreas Boehler            $this->assertEquals($endResult, file_get_contents(SABRE_TEMPDIR . '/foobar.txt'));
65*a1a3b679SAndreas Boehler        }
66*a1a3b679SAndreas Boehler
67*a1a3b679SAndreas Boehler    }
68*a1a3b679SAndreas Boehler
69*a1a3b679SAndreas Boehler    public function data() {
70*a1a3b679SAndreas Boehler
71*a1a3b679SAndreas Boehler        return array(
72*a1a3b679SAndreas Boehler            // Problems
73*a1a3b679SAndreas Boehler            array('foo',       400, null),
74*a1a3b679SAndreas Boehler            array('bytes=0-3', 411, null, 0),
75*a1a3b679SAndreas Boehler            array('bytes=4-1', 416, null),
76*a1a3b679SAndreas Boehler
77*a1a3b679SAndreas Boehler            array('bytes=0-3', 204, '----567890'),
78*a1a3b679SAndreas Boehler            array('bytes=1-4', 204, '1----67890'),
79*a1a3b679SAndreas Boehler            array('bytes=0-',  204, '----567890'),
80*a1a3b679SAndreas Boehler            array('bytes=-4',  204, '123456----'),
81*a1a3b679SAndreas Boehler            array('bytes=-2',  204, '12345678----'),
82*a1a3b679SAndreas Boehler            array('bytes=2-',  204, '12----7890'),
83*a1a3b679SAndreas Boehler            array('append',    204, '1234567890----'),
84*a1a3b679SAndreas Boehler
85*a1a3b679SAndreas Boehler        );
86*a1a3b679SAndreas Boehler
87*a1a3b679SAndreas Boehler    }
88*a1a3b679SAndreas Boehler
89*a1a3b679SAndreas Boehler}
90