<?php require_once 'Sabre/HTTP/ResponseMock.php'; class Sabre_DAV_ServerPreconditionsTest extends PHPUnit_Framework_TestCase { /** * @covers Sabre_DAV_Server::checkPreconditions * @expectedException Sabre_DAV_Exception_PreconditionFailed */ function testIfMatchNoNode() { $root = new Sabre_DAV_SimpleCollection('root',array(new Sabre_DAV_ServerPreconditionsNode())); $server = new Sabre_DAV_Server($root); $httpRequest = new Sabre_HTTP_Request(array( 'HTTP_IF_MATCH' => '*', 'REQUEST_URI' => '/bar' )); $server->httpRequest = $httpRequest; $server->checkPreconditions(); } /** * @covers Sabre_DAV_Server::checkPreconditions */ function testIfMatchHasNode() { $root = new Sabre_DAV_SimpleCollection('root',array(new Sabre_DAV_ServerPreconditionsNode())); $server = new Sabre_DAV_Server($root); $httpRequest = new Sabre_HTTP_Request(array( 'HTTP_IF_MATCH' => '*', 'REQUEST_URI' => '/foo' )); $server->httpRequest = $httpRequest; $this->assertTrue($server->checkPreconditions()); } /** * @covers Sabre_DAV_Server::checkPreconditions * @expectedException Sabre_DAV_Exception_PreconditionFailed */ function testIfMatchWrongEtag() { $root = new Sabre_DAV_SimpleCollection('root',array(new Sabre_DAV_ServerPreconditionsNode())); $server = new Sabre_DAV_Server($root); $httpRequest = new Sabre_HTTP_Request(array( 'HTTP_IF_MATCH' => '1234', 'REQUEST_URI' => '/foo' )); $server->httpRequest = $httpRequest; $server->checkPreconditions(); } /** * @covers Sabre_DAV_Server::checkPreconditions */ function testIfMatchCorrectEtag() { $root = new Sabre_DAV_SimpleCollection('root',array(new Sabre_DAV_ServerPreconditionsNode())); $server = new Sabre_DAV_Server($root); $httpRequest = new Sabre_HTTP_Request(array( 'HTTP_IF_MATCH' => '"abc123"', 'REQUEST_URI' => '/foo' )); $server->httpRequest = $httpRequest; $this->assertTrue($server->checkPreconditions()); } /** * Evolution sometimes uses \" instead of " for If-Match headers. * * @covers Sabre_DAV_Server::checkPreconditions * @depends testIfMatchCorrectEtag */ function testIfMatchEvolutionEtag() { $root = new Sabre_DAV_SimpleCollection('root',array(new Sabre_DAV_ServerPreconditionsNode())); $server = new Sabre_DAV_Server($root); $httpRequest = new Sabre_HTTP_Request(array( 'HTTP_IF_MATCH' => '\\"abc123\\"', 'REQUEST_URI' => '/foo' )); $server->httpRequest = $httpRequest; $this->assertTrue($server->checkPreconditions()); } /** * @covers Sabre_DAV_Server::checkPreconditions */ function testIfMatchMultiple() { $root = new Sabre_DAV_SimpleCollection('root',array(new Sabre_DAV_ServerPreconditionsNode())); $server = new Sabre_DAV_Server($root); $httpRequest = new Sabre_HTTP_Request(array( 'HTTP_IF_MATCH' => '"hellothere", "abc123"', 'REQUEST_URI' => '/foo' )); $server->httpRequest = $httpRequest; $this->assertTrue($server->checkPreconditions()); } /** * @covers Sabre_DAV_Server::checkPreconditions */ function testIfNoneMatchNoNode() { $root = new Sabre_DAV_SimpleCollection('root',array(new Sabre_DAV_ServerPreconditionsNode())); $server = new Sabre_DAV_Server($root); $httpRequest = new Sabre_HTTP_Request(array( 'HTTP_IF_NONE_MATCH' => '*', 'REQUEST_URI' => '/bar' )); $server->httpRequest = $httpRequest; $this->assertTrue($server->checkPreconditions()); } /** * @covers Sabre_DAV_Server::checkPreconditions * @expectedException Sabre_DAV_Exception_PreconditionFailed */ function testIfNoneMatchHasNode() { $root = new Sabre_DAV_SimpleCollection('root',array(new Sabre_DAV_ServerPreconditionsNode())); $server = new Sabre_DAV_Server($root); $httpRequest = new Sabre_HTTP_Request(array( 'HTTP_IF_NONE_MATCH' => '*', 'REQUEST_URI' => '/foo' )); $server->httpRequest = $httpRequest; $server->checkPreconditions(); } /** * @covers Sabre_DAV_Server::checkPreconditions */ function testIfNoneMatchWrongEtag() { $root = new Sabre_DAV_SimpleCollection('root',array(new Sabre_DAV_ServerPreconditionsNode())); $server = new Sabre_DAV_Server($root); $httpRequest = new Sabre_HTTP_Request(array( 'HTTP_IF_NONE_MATCH' => '"1234"', 'REQUEST_URI' => '/foo' )); $server->httpRequest = $httpRequest; $this->assertTrue($server->checkPreconditions()); } /** * @covers Sabre_DAV_Server::checkPreconditions */ function testIfNoneMatchWrongEtagMultiple() { $root = new Sabre_DAV_SimpleCollection('root',array(new Sabre_DAV_ServerPreconditionsNode())); $server = new Sabre_DAV_Server($root); $httpRequest = new Sabre_HTTP_Request(array( 'HTTP_IF_NONE_MATCH' => '"1234", "5678"', 'REQUEST_URI' => '/foo' )); $server->httpRequest = $httpRequest; $this->assertTrue($server->checkPreconditions()); } /** * @covers Sabre_DAV_Server::checkPreconditions * @expectedException Sabre_DAV_Exception_PreconditionFailed */ public function testIfNoneMatchCorrectEtag() { $root = new Sabre_DAV_SimpleCollection('root',array(new Sabre_DAV_ServerPreconditionsNode())); $server = new Sabre_DAV_Server($root); $httpRequest = new Sabre_HTTP_Request(array( 'HTTP_IF_NONE_MATCH' => '"abc123"', 'REQUEST_URI' => '/foo' )); $server->httpRequest = $httpRequest; $server->checkPreconditions(); } /** * @covers Sabre_DAV_Server::checkPreconditions * @expectedException Sabre_DAV_Exception_PreconditionFailed */ public function testIfNoneMatchCorrectEtagMultiple() { $root = new Sabre_DAV_SimpleCollection('root',array(new Sabre_DAV_ServerPreconditionsNode())); $server = new Sabre_DAV_Server($root); $httpRequest = new Sabre_HTTP_Request(array( 'HTTP_IF_NONE_MATCH' => '"1234", "abc123"', 'REQUEST_URI' => '/foo' )); $server->httpRequest = $httpRequest; $server->checkPreconditions(); } /** * @covers Sabre_DAV_Server::checkPreconditions */ public function testIfNoneMatchCorrectEtagAsGet() { $root = new Sabre_DAV_SimpleCollection('root',array(new Sabre_DAV_ServerPreconditionsNode())); $server = new Sabre_DAV_Server($root); $httpRequest = new Sabre_HTTP_Request(array( 'HTTP_IF_NONE_MATCH' => '"abc123"', 'REQUEST_URI' => '/foo' )); $server->httpRequest = $httpRequest; $server->httpResponse = new Sabre_HTTP_ResponseMock(); $this->assertFalse($server->checkPreconditions(true)); $this->assertEquals('HTTP/1.1 304 Not Modified',$server->httpResponse->status); } /** * @covers Sabre_DAV_Server::checkPreconditions */ public function testIfModifiedSinceUnModified() { $root = new Sabre_DAV_SimpleCollection('root',array(new Sabre_DAV_ServerPreconditionsNode())); $server = new Sabre_DAV_Server($root); $httpRequest = new Sabre_HTTP_Request(array( 'HTTP_IF_MODIFIED_SINCE' => 'Sun, 06 Nov 1994 08:49:37 GMT', 'REQUEST_URI' => '/foo' )); $server->httpRequest = $httpRequest; $server->httpResponse = new Sabre_HTTP_ResponseMock(); $this->assertFalse($server->checkPreconditions()); $this->assertEquals('HTTP/1.1 304 Not Modified',$server->httpResponse->status); $this->assertEquals(array( 'Last-Modified' => 'Sat, 06 Apr 1985 23:30:00 GMT', ), $server->httpResponse->headers); } /** * @covers Sabre_DAV_Server::checkPreconditions */ public function testIfModifiedSinceModified() { $root = new Sabre_DAV_SimpleCollection('root',array(new Sabre_DAV_ServerPreconditionsNode())); $server = new Sabre_DAV_Server($root); $httpRequest = new Sabre_HTTP_Request(array( 'HTTP_IF_MODIFIED_SINCE' => 'Tue, 06 Nov 1984 08:49:37 GMT', 'REQUEST_URI' => '/foo' )); $server->httpRequest = $httpRequest; $server->httpResponse = new Sabre_HTTP_ResponseMock(); $this->assertTrue($server->checkPreconditions()); } /** * @covers Sabre_DAV_Server::checkPreconditions */ public function testIfModifiedSinceInvalidDate() { $root = new Sabre_DAV_SimpleCollection('root',array(new Sabre_DAV_ServerPreconditionsNode())); $server = new Sabre_DAV_Server($root); $httpRequest = new Sabre_HTTP_Request(array( 'HTTP_IF_MODIFIED_SINCE' => 'Your mother', 'REQUEST_URI' => '/foo' )); $server->httpRequest = $httpRequest; $server->httpResponse = new Sabre_HTTP_ResponseMock(); // Invalid dates must be ignored, so this should return true $this->assertTrue($server->checkPreconditions()); } /** * @covers Sabre_DAV_Server::checkPreconditions */ public function testIfModifiedSinceInvalidDate2() { $root = new Sabre_DAV_SimpleCollection('root',array(new Sabre_DAV_ServerPreconditionsNode())); $server = new Sabre_DAV_Server($root); $httpRequest = new Sabre_HTTP_Request(array( 'HTTP_IF_MODIFIED_SINCE' => 'Sun, 06 Nov 1994 08:49:37 EST', 'REQUEST_URI' => '/foo' )); $server->httpRequest = $httpRequest; $server->httpResponse = new Sabre_HTTP_ResponseMock(); $this->assertTrue($server->checkPreconditions()); } /** * @covers Sabre_DAV_Server::checkPreconditions */ public function testIfUnmodifiedSinceUnModified() { $root = new Sabre_DAV_SimpleCollection('root',array(new Sabre_DAV_ServerPreconditionsNode())); $server = new Sabre_DAV_Server($root); $httpRequest = new Sabre_HTTP_Request(array( 'HTTP_IF_UNMODIFIED_SINCE' => 'Sun, 06 Nov 1994 08:49:37 GMT', 'REQUEST_URI' => '/foo' )); $server->httpRequest = $httpRequest; $this->assertTrue($server->checkPreconditions()); } /** * @covers Sabre_DAV_Server::checkPreconditions * @expectedException Sabre_DAV_Exception_PreconditionFailed */ public function testIfUnmodifiedSinceModified() { $root = new Sabre_DAV_SimpleCollection('root',array(new Sabre_DAV_ServerPreconditionsNode())); $server = new Sabre_DAV_Server($root); $httpRequest = new Sabre_HTTP_Request(array( 'HTTP_IF_UNMODIFIED_SINCE' => 'Tue, 06 Nov 1984 08:49:37 GMT', 'REQUEST_URI' => '/foo' )); $server->httpRequest = $httpRequest; $server->httpResponse = new Sabre_HTTP_ResponseMock(); $server->checkPreconditions(); } /** * @covers Sabre_DAV_Server::checkPreconditions */ public function testIfUnmodifiedSinceInvalidDate() { $root = new Sabre_DAV_SimpleCollection('root',array(new Sabre_DAV_ServerPreconditionsNode())); $server = new Sabre_DAV_Server($root); $httpRequest = new Sabre_HTTP_Request(array( 'HTTP_IF_UNMODIFIED_SINCE' => 'Sun, 06 Nov 1984 08:49:37 CET', 'REQUEST_URI' => '/foo' )); $server->httpRequest = $httpRequest; $server->httpResponse = new Sabre_HTTP_ResponseMock(); $this->assertTrue($server->checkPreconditions()); } } class Sabre_DAV_ServerPreconditionsNode extends Sabre_DAV_File { function getETag() { return '"abc123"'; } function getLastModified() { /* my birthday & time, I believe */ return strtotime('1985-04-07 01:30 +02:00'); } function getName() { return 'foo'; } }