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