deprecated-addons/dav/SabreDAV/tests/Sabre/DAV/ServerPreconditionTest.php

392 lines
12 KiB
PHP

<?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';
}
}