File: SpecificationTest.php

package info (click to toggle)
php-sabredav 1.8.12-7
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 3,848 kB
  • sloc: php: 28,471; sql: 271; python: 221; makefile: 35; xml: 25; sh: 6
file content (89 lines) | stat: -rw-r--r-- 2,604 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php

namespace Sabre\DAV\PartialUpdate;

use Sabre\DAV\FSExt\File;
use Sabre\DAV\Server;
use Sabre\HTTP;

/**
 * This test is an end-to-end sabredav test that goes through all
 * the cases in the specification.
 *
 * See: http://sabre.io/dav/http-patch/
 */
class SpecificationTest extends \PHPUnit\Framework\TestCase {

    protected $server;

    public function setUp() {

        $tree = array(
            new File(SABRE_TEMPDIR . '/foobar.txt')
        );
        $server = new Server($tree);
        $server->debugExceptions = true;
        $server->addPlugin(new Plugin());

        $tree[0]->put('1234567890');

        $this->server = $server;

    }

    public function tearDown() {

        \Sabre\TestUtil::clearTempDir();

    }

    /**
     * @dataProvider data
     */
    public function testUpdateRange($headerValue, $httpStatus, $endResult, $contentLength = 4) {

        $vars = array(
            'REQUEST_METHOD' => 'PATCH',
            'HTTP_CONTENT_TYPE' => 'application/x-sabredav-partialupdate',
            'HTTP_X_UPDATE_RANGE' => $headerValue,
            'REQUEST_URI' => '/foobar.txt',
        );
        if ($contentLength) {
            $vars['HTTP_CONTENT_LENGTH'] = (string)$contentLength;
        }

        $request = new HTTP\Request($vars);

        $request->setBody('----');
        $this->server->httpRequest = $request;
        $this->server->httpResponse = new HTTP\ResponseMock();
        $this->server->exec();

        $this->assertEquals($httpStatus, $this->server->httpResponse->status, 'Incorrect http status received: ' . $this->server->httpResponse->body);
        if (!is_null($endResult)) {
            $this->assertEquals($endResult, file_get_contents(SABRE_TEMPDIR . '/foobar.txt'));
        }

    } 

    public function data() {

        return array(
            // Problems
            array('foo',       'HTTP/1.1 400 Bad request', null),
            array('bytes=0-3', 'HTTP/1.1 411 Length Required', null, 0),
            array('bytes=4-1', 'HTTP/1.1 416 Requested Range Not Satisfiable', null),

            array('bytes=0-3', 'HTTP/1.1 204 No Content', '----567890'),
            array('bytes=1-4', 'HTTP/1.1 204 No Content', '1----67890'),
            array('bytes=0-',  'HTTP/1.1 204 No Content', '----567890'),
            array('bytes=-4',  'HTTP/1.1 204 No Content', '123456----'),
            array('bytes=-2',  'HTTP/1.1 204 No Content', '12345678----'),
            array('bytes=2-',  'HTTP/1.1 204 No Content', '12----7890'),
            array('append',    'HTTP/1.1 204 No Content', '1234567890----'),

        );

    }

}