forked from friendica/deprecated-addons
moved deprecated communityhome, dav and yourls to the deprecated-addons repository
This commit is contained in:
parent
24444adef3
commit
31520f804d
675 changed files with 195144 additions and 0 deletions
511
dav/SabreDAV/tests/Sabre/CalDAV/Backend/AbstractPDOTest.php
Normal file
511
dav/SabreDAV/tests/Sabre/CalDAV/Backend/AbstractPDOTest.php
Normal file
|
|
@ -0,0 +1,511 @@
|
|||
<?php
|
||||
|
||||
abstract class Sabre_CalDAV_Backend_AbstractPDOTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
protected $pdo;
|
||||
|
||||
function testConstruct() {
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
|
||||
$this->assertTrue($backend instanceof Sabre_CalDAV_Backend_PDO);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testConstruct
|
||||
*/
|
||||
function testGetCalendarsForUserNoCalendars() {
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
|
||||
$calendars = $backend->getCalendarsForUser('principals/user2');
|
||||
$this->assertEquals(array(),$calendars);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testConstruct
|
||||
*/
|
||||
function testCreateCalendarAndFetch() {
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
|
||||
$returnedId = $backend->createCalendar('principals/user2','somerandomid',array(
|
||||
'{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => new Sabre_CalDAV_Property_SupportedCalendarComponentSet(array('VEVENT')),
|
||||
'{DAV:}displayname' => 'Hello!',
|
||||
));
|
||||
$calendars = $backend->getCalendarsForUser('principals/user2');
|
||||
|
||||
$elementCheck = array(
|
||||
'id' => $returnedId,
|
||||
'uri' => 'somerandomid',
|
||||
'{DAV:}displayname' => 'Hello!',
|
||||
'{urn:ietf:params:xml:ns:caldav}calendar-description' => '',
|
||||
);
|
||||
|
||||
$this->assertInternalType('array',$calendars);
|
||||
$this->assertEquals(1,count($calendars));
|
||||
|
||||
foreach($elementCheck as $name=>$value) {
|
||||
|
||||
$this->assertArrayHasKey($name, $calendars[0]);
|
||||
$this->assertEquals($value,$calendars[0][$name]);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testConstruct
|
||||
*/
|
||||
function testUpdateCalendarAndFetch() {
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
|
||||
|
||||
//Creating a new calendar
|
||||
$newId = $backend->createCalendar('principals/user2','somerandomid',array());
|
||||
|
||||
// Updating the calendar
|
||||
$result = $backend->updateCalendar($newId,array(
|
||||
'{DAV:}displayname' => 'myCalendar',
|
||||
));
|
||||
|
||||
// Verifying the result of the update
|
||||
$this->assertEquals(true, $result);
|
||||
|
||||
// Fetching all calendars from this user
|
||||
$calendars = $backend->getCalendarsForUser('principals/user2');
|
||||
|
||||
// Checking if all the information is still correct
|
||||
$elementCheck = array(
|
||||
'id' => $newId,
|
||||
'uri' => 'somerandomid',
|
||||
'{DAV:}displayname' => 'myCalendar',
|
||||
'{urn:ietf:params:xml:ns:caldav}calendar-description' => '',
|
||||
'{urn:ietf:params:xml:ns:caldav}calendar-timezone' => '',
|
||||
'{http://calendarserver.org/ns/}getctag' => '2',
|
||||
);
|
||||
|
||||
$this->assertInternalType('array',$calendars);
|
||||
$this->assertEquals(1,count($calendars));
|
||||
|
||||
foreach($elementCheck as $name=>$value) {
|
||||
|
||||
$this->assertArrayHasKey($name, $calendars[0]);
|
||||
$this->assertEquals($value,$calendars[0][$name]);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testUpdateCalendarAndFetch
|
||||
*/
|
||||
function testUpdateCalendarUnknownProperty() {
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
|
||||
|
||||
//Creating a new calendar
|
||||
$newId = $backend->createCalendar('principals/user2','somerandomid',array());
|
||||
|
||||
// Updating the calendar
|
||||
$result = $backend->updateCalendar($newId,array(
|
||||
'{DAV:}displayname' => 'myCalendar',
|
||||
'{DAV:}yourmom' => 'wittycomment',
|
||||
));
|
||||
|
||||
// Verifying the result of the update
|
||||
$this->assertEquals(array(
|
||||
'403' => array('{DAV:}yourmom' => null),
|
||||
'424' => array('{DAV:}displayname' => null),
|
||||
), $result);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testCreateCalendarAndFetch
|
||||
*/
|
||||
function testDeleteCalendar() {
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
|
||||
$returnedId = $backend->createCalendar('principals/user2','somerandomid',array(
|
||||
'{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => new Sabre_CalDAV_Property_SupportedCalendarComponentSet(array('VEVENT')),
|
||||
'{DAV:}displayname' => 'Hello!',
|
||||
));
|
||||
|
||||
$backend->deleteCalendar($returnedId);
|
||||
|
||||
$calendars = $backend->getCalendarsForUser('principals/user2');
|
||||
$this->assertEquals(array(),$calendars);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testCreateCalendarAndFetch
|
||||
* @expectedException Sabre_DAV_Exception
|
||||
*/
|
||||
function testCreateCalendarIncorrectComponentSet() {;
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
|
||||
|
||||
//Creating a new calendar
|
||||
$newId = $backend->createCalendar('principals/user2','somerandomid',array(
|
||||
'{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => 'blabla',
|
||||
));
|
||||
|
||||
}
|
||||
|
||||
function testCreateCalendarObject() {
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
|
||||
$returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
|
||||
|
||||
$object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n";
|
||||
|
||||
$backend->createCalendarObject($returnedId, 'random-id', $object);
|
||||
|
||||
$result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = "random-id"');
|
||||
$this->assertEquals(array(
|
||||
'etag' => md5($object),
|
||||
'size' => strlen($object),
|
||||
'calendardata' => $object,
|
||||
'firstoccurence' => strtotime('20120101'),
|
||||
'lastoccurence' => strtotime('20120101')+(3600*24),
|
||||
'componenttype' => 'VEVENT',
|
||||
), $result->fetch(PDO::FETCH_ASSOC));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_BadRequest
|
||||
* @depends testCreateCalendarObject
|
||||
*/
|
||||
function testCreateCalendarObjectNoComponent() {
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
|
||||
$returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
|
||||
|
||||
$object = "BEGIN:VCALENDAR\r\nBEGIN:VTIMEZONE\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n";
|
||||
|
||||
$backend->createCalendarObject($returnedId, 'random-id', $object);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testCreateCalendarObject
|
||||
*/
|
||||
function testCreateCalendarObjectDuration() {
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
|
||||
$returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
|
||||
|
||||
$object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nDURATION:P2D\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n";
|
||||
|
||||
$backend->createCalendarObject($returnedId, 'random-id', $object);
|
||||
|
||||
$result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = "random-id"');
|
||||
$this->assertEquals(array(
|
||||
'etag' => md5($object),
|
||||
'size' => strlen($object),
|
||||
'calendardata' => $object,
|
||||
'firstoccurence' => strtotime('20120101'),
|
||||
'lastoccurence' => strtotime('20120101')+(3600*48),
|
||||
'componenttype' => 'VEVENT',
|
||||
), $result->fetch(PDO::FETCH_ASSOC));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testCreateCalendarObject
|
||||
*/
|
||||
function testCreateCalendarObjectNoDTEND() {
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
|
||||
$returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
|
||||
|
||||
$object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE-TIME:20120101T100000Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n";
|
||||
|
||||
$backend->createCalendarObject($returnedId, 'random-id', $object);
|
||||
|
||||
$result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = "random-id"');
|
||||
$this->assertEquals(array(
|
||||
'etag' => md5($object),
|
||||
'size' => strlen($object),
|
||||
'calendardata' => $object,
|
||||
'firstoccurence' => strtotime('2012-01-01 10:00:00'),
|
||||
'lastoccurence' => strtotime('2012-01-01 10:00:00'),
|
||||
'componenttype' => 'VEVENT',
|
||||
), $result->fetch(PDO::FETCH_ASSOC));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testCreateCalendarObject
|
||||
*/
|
||||
function testCreateCalendarObjectInfiniteReccurence() {
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
|
||||
$returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
|
||||
|
||||
$object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE-TIME:20120101T100000Z\r\nRRULE:FREQ=DAILY\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n";
|
||||
|
||||
$backend->createCalendarObject($returnedId, 'random-id', $object);
|
||||
|
||||
$result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = "random-id"');
|
||||
$this->assertEquals(array(
|
||||
'etag' => md5($object),
|
||||
'size' => strlen($object),
|
||||
'calendardata' => $object,
|
||||
'firstoccurence' => strtotime('2012-01-01 10:00:00'),
|
||||
'lastoccurence' => strtotime(Sabre_CalDAV_Backend_PDO::MAX_DATE),
|
||||
'componenttype' => 'VEVENT',
|
||||
), $result->fetch(PDO::FETCH_ASSOC));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testCreateCalendarObject
|
||||
*/
|
||||
function testCreateCalendarObjectEndingReccurence() {
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
|
||||
$returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
|
||||
|
||||
$object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE-TIME:20120101T100000Z\r\nDTEND;VALUE=DATE-TIME:20120101T110000Z\r\nRRULE:FREQ=DAILY;COUNT=1000\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n";
|
||||
|
||||
$backend->createCalendarObject($returnedId, 'random-id', $object);
|
||||
|
||||
$result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = "random-id"');
|
||||
$this->assertEquals(array(
|
||||
'etag' => md5($object),
|
||||
'size' => strlen($object),
|
||||
'calendardata' => $object,
|
||||
'firstoccurence' => strtotime('2012-01-01 10:00:00'),
|
||||
'lastoccurence' => strtotime('2012-01-01 11:00:00') + (3600 * 24 * 999),
|
||||
'componenttype' => 'VEVENT',
|
||||
), $result->fetch(PDO::FETCH_ASSOC));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testCreateCalendarObject
|
||||
*/
|
||||
function testCreateCalendarObjectTask() {
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
|
||||
$returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
|
||||
|
||||
$object = "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nDUE;VALUE=DATE-TIME:20120101T100000Z\r\nEND:VTODO\r\nEND:VCALENDAR\r\n";
|
||||
|
||||
$backend->createCalendarObject($returnedId, 'random-id', $object);
|
||||
|
||||
$result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = "random-id"');
|
||||
$this->assertEquals(array(
|
||||
'etag' => md5($object),
|
||||
'size' => strlen($object),
|
||||
'calendardata' => $object,
|
||||
'firstoccurence' => null,
|
||||
'lastoccurence' => null,
|
||||
'componenttype' => 'VTODO',
|
||||
), $result->fetch(PDO::FETCH_ASSOC));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testCreateCalendarObject
|
||||
*/
|
||||
function testGetCalendarObjects() {
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
|
||||
$returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
|
||||
|
||||
$object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n";
|
||||
$backend->createCalendarObject($returnedId, 'random-id', $object);
|
||||
|
||||
$data = $backend->getCalendarObjects($returnedId,'random-id');
|
||||
|
||||
$this->assertEquals(1, count($data));
|
||||
$data = $data[0];
|
||||
|
||||
$this->assertEquals($returnedId, $data['calendarid']);
|
||||
$this->assertEquals('random-id', $data['uri']);
|
||||
$this->assertEquals(strlen($object),$data['size']);
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testCreateCalendarObject
|
||||
*/
|
||||
function testUpdateCalendarObject() {
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
|
||||
$returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
|
||||
|
||||
$object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n";
|
||||
$object2 = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20130101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n";
|
||||
$backend->createCalendarObject($returnedId, 'random-id', $object);
|
||||
$backend->updateCalendarObject($returnedId, 'random-id', $object2);
|
||||
|
||||
$data = $backend->getCalendarObject($returnedId,'random-id');
|
||||
|
||||
$this->assertEquals($object2, $data['calendardata']);
|
||||
$this->assertEquals($returnedId, $data['calendarid']);
|
||||
$this->assertEquals('random-id', $data['uri']);
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testCreateCalendarObject
|
||||
*/
|
||||
function testDeleteCalendarObject() {
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
|
||||
$returnedId = $backend->createCalendar('principals/user2','somerandomid',array());
|
||||
|
||||
$object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n";
|
||||
$backend->createCalendarObject($returnedId, 'random-id', $object);
|
||||
$backend->deleteCalendarObject($returnedId, 'random-id');
|
||||
|
||||
$data = $backend->getCalendarObject($returnedId,'random-id');
|
||||
$this->assertNull($data);
|
||||
|
||||
}
|
||||
|
||||
function testCalendarQueryNoResult() {
|
||||
|
||||
$abstract = new Sabre_CalDAV_Backend_PDO($this->pdo);
|
||||
$filters = array(
|
||||
'name' => 'VCALENDAR',
|
||||
'comp-filters' => array(
|
||||
array(
|
||||
'name' => 'VJOURNAL',
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => null,
|
||||
),
|
||||
),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => null,
|
||||
);
|
||||
|
||||
$this->assertEquals(array(
|
||||
), $abstract->calendarQuery(1, $filters));
|
||||
|
||||
}
|
||||
|
||||
function testCalendarQueryTodo() {
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
|
||||
$backend->createCalendarObject(1, "todo", "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n");
|
||||
$backend->createCalendarObject(1, "event", "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n");
|
||||
|
||||
$filters = array(
|
||||
'name' => 'VCALENDAR',
|
||||
'comp-filters' => array(
|
||||
array(
|
||||
'name' => 'VTODO',
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => null,
|
||||
),
|
||||
),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => null,
|
||||
);
|
||||
|
||||
$this->assertEquals(array(
|
||||
"todo",
|
||||
), $backend->calendarQuery(1, $filters));
|
||||
|
||||
}
|
||||
function testCalendarQueryTodoNotMatch() {
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
|
||||
$backend->createCalendarObject(1, "todo", "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n");
|
||||
$backend->createCalendarObject(1, "event", "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n");
|
||||
|
||||
$filters = array(
|
||||
'name' => 'VCALENDAR',
|
||||
'comp-filters' => array(
|
||||
array(
|
||||
'name' => 'VTODO',
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(
|
||||
array(
|
||||
'name' => 'summary',
|
||||
'text-match' => null,
|
||||
'time-range' => null,
|
||||
'param-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
),
|
||||
),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => null,
|
||||
),
|
||||
),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => null,
|
||||
);
|
||||
|
||||
$this->assertEquals(array(
|
||||
), $backend->calendarQuery(1, $filters));
|
||||
|
||||
}
|
||||
|
||||
function testCalendarQueryNoFilter() {
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
|
||||
$backend->createCalendarObject(1, "todo", "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n");
|
||||
$backend->createCalendarObject(1, "event", "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n");
|
||||
|
||||
$filters = array(
|
||||
'name' => 'VCALENDAR',
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => null,
|
||||
);
|
||||
|
||||
$result = $backend->calendarQuery(1, $filters);
|
||||
$this->assertTrue(in_array('todo', $result));
|
||||
$this->assertTrue(in_array('event', $result));
|
||||
|
||||
}
|
||||
|
||||
function testCalendarQueryTimeRange() {
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_PDO($this->pdo);
|
||||
$backend->createCalendarObject(1, "todo", "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n");
|
||||
$backend->createCalendarObject(1, "event", "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n");
|
||||
$backend->createCalendarObject(1, "event2", "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20120103\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n");
|
||||
|
||||
$filters = array(
|
||||
'name' => 'VCALENDAR',
|
||||
'comp-filters' => array(
|
||||
array(
|
||||
'name' => 'VEVENT',
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => array(
|
||||
'start' => new DateTime('20120103'),
|
||||
'end' => new DateTime('20120104'),
|
||||
),
|
||||
),
|
||||
),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => null,
|
||||
);
|
||||
|
||||
$this->assertEquals(array(
|
||||
"event2",
|
||||
), $backend->calendarQuery(1, $filters));
|
||||
|
||||
}
|
||||
}
|
||||
86
dav/SabreDAV/tests/Sabre/CalDAV/Backend/AbstractTest.php
Normal file
86
dav/SabreDAV/tests/Sabre/CalDAV/Backend/AbstractTest.php
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
<?php
|
||||
|
||||
class Sabre_CalDAV_Backend_AbstractTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testUpdateCalendar() {
|
||||
|
||||
$abstract = new Sabre_CalDAV_Backend_AbstractMock();
|
||||
$this->assertEquals(false, $abstract->updateCalendar('randomid', array('{DAV:}displayname' => 'anything')));
|
||||
|
||||
}
|
||||
|
||||
function testCalendarQuery() {
|
||||
|
||||
$abstract = new Sabre_CalDAV_Backend_AbstractMock();
|
||||
$filters = array(
|
||||
'name' => 'VCALENDAR',
|
||||
'comp-filters' => array(
|
||||
array(
|
||||
'name' => 'VEVENT',
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => null,
|
||||
),
|
||||
),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => null,
|
||||
);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'event1.ics',
|
||||
), $abstract->calendarQuery(1, $filters));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class Sabre_CalDAV_Backend_AbstractMock extends Sabre_CalDAV_Backend_Abstract {
|
||||
|
||||
function getCalendarsForUser($principalUri) { }
|
||||
function createCalendar($principalUri,$calendarUri,array $properties) { }
|
||||
function deleteCalendar($calendarId) { }
|
||||
function getCalendarObjects($calendarId) {
|
||||
|
||||
return array(
|
||||
array(
|
||||
'id' => 1,
|
||||
'calendarid' => 1,
|
||||
'uri' => 'event1.ics',
|
||||
),
|
||||
array(
|
||||
'id' => 2,
|
||||
'calendarid' => 1,
|
||||
'uri' => 'task1.ics',
|
||||
),
|
||||
);
|
||||
|
||||
}
|
||||
function getCalendarObject($calendarId,$objectUri) {
|
||||
|
||||
switch($objectUri) {
|
||||
|
||||
case 'event1.ics' :
|
||||
return array(
|
||||
'id' => 1,
|
||||
'calendarid' => 1,
|
||||
'uri' => 'event1.ics',
|
||||
'calendardata' => "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n",
|
||||
);
|
||||
case 'task1.ics' :
|
||||
return array(
|
||||
'id' => 1,
|
||||
'calendarid' => 1,
|
||||
'uri' => 'event1.ics',
|
||||
'calendardata' => "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n",
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
function createCalendarObject($calendarId,$objectUri,$calendarData) { }
|
||||
function updateCalendarObject($calendarId,$objectUri,$calendarData) { }
|
||||
function deleteCalendarObject($calendarId,$objectUri) { }
|
||||
|
||||
}
|
||||
277
dav/SabreDAV/tests/Sabre/CalDAV/Backend/Mock.php
Normal file
277
dav/SabreDAV/tests/Sabre/CalDAV/Backend/Mock.php
Normal file
|
|
@ -0,0 +1,277 @@
|
|||
<?php
|
||||
|
||||
class Sabre_CalDAV_Backend_Mock extends Sabre_CalDAV_Backend_Abstract implements Sabre_CalDAV_Backend_NotificationSupport {
|
||||
|
||||
private $calendarData;
|
||||
private $calendars;
|
||||
private $notifications;
|
||||
|
||||
function __construct(array $calendars, array $calendarData, array $notifications = array()) {
|
||||
|
||||
$this->calendars = $calendars;
|
||||
$this->calendarData = $calendarData;
|
||||
$this->notifications = $notifications;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of calendars for a principal.
|
||||
*
|
||||
* Every project is an array with the following keys:
|
||||
* * id, a unique id that will be used by other functions to modify the
|
||||
* calendar. This can be the same as the uri or a database key.
|
||||
* * uri, which the basename of the uri with which the calendar is
|
||||
* accessed.
|
||||
* * principalUri. The owner of the calendar. Almost always the same as
|
||||
* principalUri passed to this method.
|
||||
*
|
||||
* Furthermore it can contain webdav properties in clark notation. A very
|
||||
* common one is '{DAV:}displayname'.
|
||||
*
|
||||
* @param string $principalUri
|
||||
* @return array
|
||||
*/
|
||||
function getCalendarsForUser($principalUri) {
|
||||
|
||||
$r = array();
|
||||
foreach($this->calendars as $row) {
|
||||
if ($row['principaluri'] == $principalUri) {
|
||||
$r[] = $row;
|
||||
}
|
||||
}
|
||||
|
||||
return $r;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new calendar for a principal.
|
||||
*
|
||||
* If the creation was a success, an id must be returned that can be used to reference
|
||||
* this calendar in other methods, such as updateCalendar.
|
||||
*
|
||||
* This function must return a server-wide unique id that can be used
|
||||
* later to reference the calendar.
|
||||
*
|
||||
* @param string $principalUri
|
||||
* @param string $calendarUri
|
||||
* @param array $properties
|
||||
* @return string|int
|
||||
*/
|
||||
function createCalendar($principalUri,$calendarUri,array $properties) {
|
||||
|
||||
$id = Sabre_DAV_UUIDUtil::getUUID();
|
||||
$this->calendars[] = array_merge(array(
|
||||
'id' => $id,
|
||||
'principaluri' => $principalUri,
|
||||
'uri' => $calendarUri,
|
||||
'{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}supported-calendar-component-set' => new Sabre_CalDAV_Property_SupportedCalendarComponentSet(array('VEVENT','VTODO')),
|
||||
), $properties);
|
||||
|
||||
return $id;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates properties on this node,
|
||||
*
|
||||
* The properties array uses the propertyName in clark-notation as key,
|
||||
* and the array value for the property value. In the case a property
|
||||
* should be deleted, the property value will be null.
|
||||
*
|
||||
* This method must be atomic. If one property cannot be changed, the
|
||||
* entire operation must fail.
|
||||
*
|
||||
* If the operation was successful, true can be returned.
|
||||
* If the operation failed, false can be returned.
|
||||
*
|
||||
* Deletion of a non-existent property is always successful.
|
||||
*
|
||||
* Lastly, it is optional to return detailed information about any
|
||||
* failures. In this case an array should be returned with the following
|
||||
* structure:
|
||||
*
|
||||
* array(
|
||||
* 403 => array(
|
||||
* '{DAV:}displayname' => null,
|
||||
* ),
|
||||
* 424 => array(
|
||||
* '{DAV:}owner' => null,
|
||||
* )
|
||||
* )
|
||||
*
|
||||
* In this example it was forbidden to update {DAV:}displayname.
|
||||
* (403 Forbidden), which in turn also caused {DAV:}owner to fail
|
||||
* (424 Failed Dependency) because the request needs to be atomic.
|
||||
*
|
||||
* @param string $calendarId
|
||||
* @param array $properties
|
||||
* @return bool|array
|
||||
*/
|
||||
public function updateCalendar($calendarId, array $properties) {
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a calendar and all it's objects
|
||||
*
|
||||
* @param string $calendarId
|
||||
* @return void
|
||||
*/
|
||||
public function deleteCalendar($calendarId) {
|
||||
|
||||
foreach($this->calendars as $k=>$calendar) {
|
||||
if ($calendar['id'] === $calendarId) {
|
||||
unset($this->calendars[$k]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all calendar objects within a calendar object.
|
||||
*
|
||||
* Every item contains an array with the following keys:
|
||||
* * id - unique identifier which will be used for subsequent updates
|
||||
* * calendardata - The iCalendar-compatible calendar data
|
||||
* * uri - a unique key which will be used to construct the uri. This can be any arbitrary string.
|
||||
* * lastmodified - a timestamp of the last modification time
|
||||
* * etag - An arbitrary string, surrounded by double-quotes. (e.g.:
|
||||
* ' "abcdef"')
|
||||
* * calendarid - The calendarid as it was passed to this function.
|
||||
*
|
||||
* Note that the etag is optional, but it's highly encouraged to return for
|
||||
* speed reasons.
|
||||
*
|
||||
* The calendardata is also optional. If it's not returned
|
||||
* 'getCalendarObject' will be called later, which *is* expected to return
|
||||
* calendardata.
|
||||
*
|
||||
* @param string $calendarId
|
||||
* @return array
|
||||
*/
|
||||
public function getCalendarObjects($calendarId) {
|
||||
|
||||
if (!isset($this->calendarData[$calendarId]))
|
||||
return array();
|
||||
|
||||
$objects = $this->calendarData[$calendarId];
|
||||
foreach($objects as $uri => &$object) {
|
||||
$object['calendarid'] = $calendarId;
|
||||
$object['uri'] = $uri;
|
||||
|
||||
}
|
||||
return $objects;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns information from a single calendar object, based on it's object
|
||||
* uri.
|
||||
*
|
||||
* The returned array must have the same keys as getCalendarObjects. The
|
||||
* 'calendardata' object is required here though, while it's not required
|
||||
* for getCalendarObjects.
|
||||
*
|
||||
* @param string $calendarId
|
||||
* @param string $objectUri
|
||||
* @return array
|
||||
*/
|
||||
function getCalendarObject($calendarId,$objectUri) {
|
||||
|
||||
if (!isset($this->calendarData[$calendarId][$objectUri])) {
|
||||
throw new Sabre_DAV_Exception_NotFound('Object could not be found');
|
||||
}
|
||||
$object = $this->calendarData[$calendarId][$objectUri];
|
||||
$object['calendarid'] = $calendarId;
|
||||
$object['uri'] = $objectUri;
|
||||
return $object;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new calendar object.
|
||||
*
|
||||
* @param string $calendarId
|
||||
* @param string $objectUri
|
||||
* @param string $calendarData
|
||||
* @return void
|
||||
*/
|
||||
function createCalendarObject($calendarId,$objectUri,$calendarData) {
|
||||
|
||||
$this->calendarData[$calendarId][$objectUri] = array(
|
||||
'calendardata' => $calendarData,
|
||||
'calendarid' => $calendarId,
|
||||
'uri' => $objectUri,
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates an existing calendarobject, based on it's uri.
|
||||
*
|
||||
* @param string $calendarId
|
||||
* @param string $objectUri
|
||||
* @param string $calendarData
|
||||
* @return void
|
||||
*/
|
||||
function updateCalendarObject($calendarId,$objectUri,$calendarData) {
|
||||
|
||||
$this->calendarData[$calendarId][$objectUri] = array(
|
||||
'calendardata' => $calendarData,
|
||||
'calendarid' => $calendarId,
|
||||
'uri' => $objectUri,
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes an existing calendar object.
|
||||
*
|
||||
* @param string $calendarId
|
||||
* @param string $objectUri
|
||||
* @return void
|
||||
*/
|
||||
function deleteCalendarObject($calendarId,$objectUri) {
|
||||
|
||||
throw new Exception('Not implemented');
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of notifications for a given principal url.
|
||||
*
|
||||
* The returned array should only consist of implementations of
|
||||
* Sabre_CalDAV_Notifications_INotificationType.
|
||||
*
|
||||
* @param string $principalUri
|
||||
* @return array
|
||||
*/
|
||||
public function getNotificationsForPrincipal($principalUri) {
|
||||
|
||||
if (isset($this->notifications[$principalUri])) {
|
||||
return $this->notifications[$principalUri];
|
||||
}
|
||||
return array();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* This deletes a specific notifcation.
|
||||
*
|
||||
* This may be called by a client once it deems a notification handled.
|
||||
*
|
||||
* @param string $principalUri
|
||||
* @param Sabre_CalDAV_Notifications_INotificationType $notification
|
||||
* @return void
|
||||
*/
|
||||
public function deleteNotification($principalUri, Sabre_CalDAV_Notifications_INotificationType $notification) {
|
||||
|
||||
throw new Sabre_DAV_Exception_NotImplemented('This doesn\'t work!');
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
37
dav/SabreDAV/tests/Sabre/CalDAV/Backend/PDOMySQLTest.php
Normal file
37
dav/SabreDAV/tests/Sabre/CalDAV/Backend/PDOMySQLTest.php
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/TestUtil.php';
|
||||
require_once 'Sabre/CalDAV/TestUtil.php';
|
||||
require_once 'Sabre/CalDAV/Backend/AbstractPDOTest.php';
|
||||
|
||||
class Sabre_CalDAV_Backend_PDOMySQLTest extends Sabre_CalDAV_Backend_AbstractPDOTest {
|
||||
|
||||
function setup() {
|
||||
|
||||
if (!SABRE_HASMYSQL) $this->markTestSkipped('MySQL driver is not available, or not properly configured');
|
||||
$pdo = Sabre_TestUtil::getMySQLDB();
|
||||
if (!$pdo) $this->markTestSkipped('Could not connect to mysql database');
|
||||
|
||||
$pdo->query('DROP TABLE IF EXISTS calendarobjects, calendars');
|
||||
|
||||
$queries = explode(
|
||||
';',
|
||||
file_get_contents(__DIR__ . '/../../../../examples/sql/mysql.calendars.sql')
|
||||
);
|
||||
|
||||
foreach($queries as $query) {
|
||||
$query = trim($query," \r\n\t");
|
||||
if ($query)
|
||||
$pdo->exec($query);
|
||||
}
|
||||
$this->pdo = $pdo;
|
||||
|
||||
}
|
||||
|
||||
function teardown() {
|
||||
|
||||
$this->pdo = null;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
21
dav/SabreDAV/tests/Sabre/CalDAV/Backend/PDOSqliteTest.php
Normal file
21
dav/SabreDAV/tests/Sabre/CalDAV/Backend/PDOSqliteTest.php
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/CalDAV/Backend/AbstractPDOTest.php';
|
||||
|
||||
class Sabre_CalDAV_Backend_PDOSQLiteTest extends Sabre_CalDAV_Backend_AbstractPDOTest {
|
||||
|
||||
function setup() {
|
||||
|
||||
if (!SABRE_HASSQLITE) $this->markTestSkipped('SQLite driver is not available');
|
||||
$this->pdo = Sabre_CalDAV_TestUtil::getSQLiteDB();
|
||||
|
||||
}
|
||||
|
||||
function teardown() {
|
||||
|
||||
$this->pdo = null;
|
||||
unlink(SABRE_TEMPDIR . '/testdb.sqlite');
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
360
dav/SabreDAV/tests/Sabre/CalDAV/CalendarObjectTest.php
Normal file
360
dav/SabreDAV/tests/Sabre/CalDAV/CalendarObjectTest.php
Normal file
|
|
@ -0,0 +1,360 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/CalDAV/TestUtil.php';
|
||||
require_once 'Sabre/DAV/Auth/MockBackend.php';
|
||||
require_once 'Sabre/DAVACL/MockPrincipalBackend.php';
|
||||
require_once 'Sabre/CalDAV/Backend/Mock.php';
|
||||
|
||||
class Sabre_CalDAV_CalendarObjectTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @var Sabre_CalDAV_Backend_PDO
|
||||
*/
|
||||
protected $backend;
|
||||
/**
|
||||
* @var Sabre_CalDAV_Calendar
|
||||
*/
|
||||
protected $calendar;
|
||||
protected $principalBackend;
|
||||
|
||||
function setup() {
|
||||
|
||||
if (!SABRE_HASSQLITE) $this->markTestSkipped('SQLite driver is not available');
|
||||
$this->backend = Sabre_CalDAV_TestUtil::getBackend();
|
||||
$this->principalBackend = new Sabre_DAVACL_MockPrincipalBackend;
|
||||
|
||||
$calendars = $this->backend->getCalendarsForUser('principals/user1');
|
||||
$this->assertEquals(2,count($calendars));
|
||||
$this->calendar = new Sabre_CalDAV_Calendar($this->principalBackend,$this->backend, $calendars[0]);
|
||||
|
||||
}
|
||||
|
||||
function teardown() {
|
||||
|
||||
unset($this->calendar);
|
||||
unset($this->backend);
|
||||
|
||||
}
|
||||
|
||||
function testSetup() {
|
||||
|
||||
$children = $this->calendar->getChildren();
|
||||
$this->assertTrue($children[0] instanceof Sabre_CalDAV_CalendarObject);
|
||||
|
||||
$this->assertInternalType('string',$children[0]->getName());
|
||||
$this->assertInternalType('string',$children[0]->get());
|
||||
$this->assertInternalType('string',$children[0]->getETag());
|
||||
$this->assertEquals('text/calendar; charset=utf-8', $children[0]->getContentType());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException InvalidArgumentException
|
||||
*/
|
||||
function testInvalidArg1() {
|
||||
|
||||
$obj = new Sabre_CalDAV_CalendarObject(
|
||||
new Sabre_CalDAV_Backend_Mock(array(),array()),
|
||||
array(),
|
||||
array()
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException InvalidArgumentException
|
||||
*/
|
||||
function testInvalidArg2() {
|
||||
|
||||
$obj = new Sabre_CalDAV_CalendarObject(
|
||||
new Sabre_CalDAV_Backend_Mock(array(),array()),
|
||||
array(),
|
||||
array('calendarid' => '1')
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSetup
|
||||
*/
|
||||
function testPut() {
|
||||
|
||||
$children = $this->calendar->getChildren();
|
||||
$this->assertTrue($children[0] instanceof Sabre_CalDAV_CalendarObject);
|
||||
$newData = Sabre_CalDAV_TestUtil::getTestCalendarData();
|
||||
|
||||
$children[0]->put($newData);
|
||||
$this->assertEquals($newData, $children[0]->get());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSetup
|
||||
*/
|
||||
function testPutStream() {
|
||||
|
||||
$children = $this->calendar->getChildren();
|
||||
$this->assertTrue($children[0] instanceof Sabre_CalDAV_CalendarObject);
|
||||
$newData = Sabre_CalDAV_TestUtil::getTestCalendarData();
|
||||
|
||||
$stream = fopen('php://temp','r+');
|
||||
fwrite($stream, $newData);
|
||||
rewind($stream);
|
||||
$children[0]->put($stream);
|
||||
$this->assertEquals($newData, $children[0]->get());
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @depends testSetup
|
||||
*/
|
||||
function testDelete() {
|
||||
|
||||
$children = $this->calendar->getChildren();
|
||||
$this->assertTrue($children[0] instanceof Sabre_CalDAV_CalendarObject);
|
||||
|
||||
$obj = $children[0];
|
||||
$obj->delete();
|
||||
|
||||
$children2 = $this->calendar->getChildren();
|
||||
$this->assertEquals(count($children)-1, count($children2));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSetup
|
||||
*/
|
||||
function testGetLastModified() {
|
||||
|
||||
$children = $this->calendar->getChildren();
|
||||
$this->assertTrue($children[0] instanceof Sabre_CalDAV_CalendarObject);
|
||||
|
||||
$obj = $children[0];
|
||||
|
||||
$lastMod = $obj->getLastModified();
|
||||
$this->assertTrue(is_int($lastMod) || ctype_digit($lastMod));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSetup
|
||||
*/
|
||||
function testGetSize() {
|
||||
|
||||
$children = $this->calendar->getChildren();
|
||||
$this->assertTrue($children[0] instanceof Sabre_CalDAV_CalendarObject);
|
||||
|
||||
$obj = $children[0];
|
||||
|
||||
$size = $obj->getSize();
|
||||
$this->assertInternalType('int', $size);
|
||||
|
||||
}
|
||||
|
||||
function testGetOwner() {
|
||||
|
||||
$children = $this->calendar->getChildren();
|
||||
$this->assertTrue($children[0] instanceof Sabre_CalDAV_CalendarObject);
|
||||
|
||||
$obj = $children[0];
|
||||
$this->assertEquals('principals/user1', $obj->getOwner());
|
||||
|
||||
}
|
||||
|
||||
function testGetGroup() {
|
||||
|
||||
$children = $this->calendar->getChildren();
|
||||
$this->assertTrue($children[0] instanceof Sabre_CalDAV_CalendarObject);
|
||||
|
||||
$obj = $children[0];
|
||||
$this->assertNull($obj->getGroup());
|
||||
|
||||
}
|
||||
|
||||
function testGetACL() {
|
||||
|
||||
$expected = array(
|
||||
array(
|
||||
'privilege' => '{DAV:}read',
|
||||
'principal' => 'principals/user1',
|
||||
'protected' => true,
|
||||
),
|
||||
array(
|
||||
'privilege' => '{DAV:}write',
|
||||
'principal' => 'principals/user1',
|
||||
'protected' => true,
|
||||
),
|
||||
array(
|
||||
'privilege' => '{DAV:}read',
|
||||
'principal' => 'principals/user1/calendar-proxy-write',
|
||||
'protected' => true,
|
||||
),
|
||||
array(
|
||||
'privilege' => '{DAV:}write',
|
||||
'principal' => 'principals/user1/calendar-proxy-write',
|
||||
'protected' => true,
|
||||
),
|
||||
array(
|
||||
'privilege' => '{DAV:}read',
|
||||
'principal' => 'principals/user1/calendar-proxy-read',
|
||||
'protected' => true,
|
||||
),
|
||||
);
|
||||
|
||||
$children = $this->calendar->getChildren();
|
||||
$this->assertTrue($children[0] instanceof Sabre_CalDAV_CalendarObject);
|
||||
|
||||
$obj = $children[0];
|
||||
$this->assertEquals($expected, $obj->getACL());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_MethodNotAllowed
|
||||
*/
|
||||
function testSetACL() {
|
||||
|
||||
$children = $this->calendar->getChildren();
|
||||
$this->assertTrue($children[0] instanceof Sabre_CalDAV_CalendarObject);
|
||||
|
||||
$obj = $children[0];
|
||||
$obj->setACL(array());
|
||||
|
||||
}
|
||||
|
||||
function testGet() {
|
||||
|
||||
$children = $this->calendar->getChildren();
|
||||
$this->assertTrue($children[0] instanceof Sabre_CalDAV_CalendarObject);
|
||||
|
||||
$obj = $children[0];
|
||||
|
||||
$expected = "BEGIN:VCALENDAR
|
||||
VERSION:2.0
|
||||
PRODID:-//Apple Inc.//iCal 4.0.1//EN
|
||||
CALSCALE:GREGORIAN
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:Asia/Seoul
|
||||
BEGIN:DAYLIGHT
|
||||
TZOFFSETFROM:+0900
|
||||
RRULE:FREQ=YEARLY;UNTIL=19880507T150000Z;BYMONTH=5;BYDAY=2SU
|
||||
DTSTART:19870510T000000
|
||||
TZNAME:GMT+09:00
|
||||
TZOFFSETTO:+1000
|
||||
END:DAYLIGHT
|
||||
BEGIN:STANDARD
|
||||
TZOFFSETFROM:+1000
|
||||
DTSTART:19881009T000000
|
||||
TZNAME:GMT+09:00
|
||||
TZOFFSETTO:+0900
|
||||
END:STANDARD
|
||||
END:VTIMEZONE
|
||||
BEGIN:VEVENT
|
||||
CREATED:20100225T154229Z
|
||||
UID:39A6B5ED-DD51-4AFE-A683-C35EE3749627
|
||||
TRANSP:TRANSPARENT
|
||||
SUMMARY:Something here
|
||||
DTSTAMP:20100228T130202Z
|
||||
DTSTART;TZID=Asia/Seoul:20100223T060000
|
||||
DTEND;TZID=Asia/Seoul:20100223T070000
|
||||
ATTENDEE;PARTSTAT=NEEDS-ACTION:mailto:lisa@example.com
|
||||
SEQUENCE:2
|
||||
END:VEVENT
|
||||
END:VCALENDAR";
|
||||
|
||||
|
||||
|
||||
$this->assertEquals($expected, $obj->get());
|
||||
|
||||
}
|
||||
|
||||
function testGetRefetch() {
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_Mock(array(), array(
|
||||
1 => array(
|
||||
'foo' => array(
|
||||
'calendardata' => 'foo',
|
||||
'uri' => 'foo'
|
||||
),
|
||||
)
|
||||
));
|
||||
$obj = new Sabre_CalDAV_CalendarObject($backend, array(), array('calendarid' => 1, 'uri' => 'foo'));
|
||||
|
||||
$this->assertEquals('foo', $obj->get());
|
||||
|
||||
}
|
||||
|
||||
function testGetEtag1() {
|
||||
|
||||
$objectInfo = array(
|
||||
'calendardata' => 'foo',
|
||||
'uri' => 'foo',
|
||||
'etag' => 'bar',
|
||||
'calendarid' => 1
|
||||
);
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_Mock(array(), array());
|
||||
$obj = new Sabre_CalDAV_CalendarObject($backend, array(), $objectInfo);
|
||||
|
||||
$this->assertEquals('bar', $obj->getETag());
|
||||
|
||||
}
|
||||
|
||||
function testGetEtag2() {
|
||||
|
||||
$objectInfo = array(
|
||||
'calendardata' => 'foo',
|
||||
'uri' => 'foo',
|
||||
'calendarid' => 1
|
||||
);
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_Mock(array(), array());
|
||||
$obj = new Sabre_CalDAV_CalendarObject($backend, array(), $objectInfo);
|
||||
|
||||
$this->assertEquals('"' . md5('foo') . '"', $obj->getETag());
|
||||
|
||||
}
|
||||
|
||||
function testGetSupportedPrivilegesSet() {
|
||||
|
||||
$objectInfo = array(
|
||||
'calendardata' => 'foo',
|
||||
'uri' => 'foo',
|
||||
'calendarid' => 1
|
||||
);
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_Mock(array(), array());
|
||||
$obj = new Sabre_CalDAV_CalendarObject($backend, array(), $objectInfo);
|
||||
$this->assertNull($obj->getSupportedPrivilegeSet());
|
||||
|
||||
}
|
||||
|
||||
function testGetSize1() {
|
||||
|
||||
$objectInfo = array(
|
||||
'calendardata' => 'foo',
|
||||
'uri' => 'foo',
|
||||
'calendarid' => 1
|
||||
);
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_Mock(array(), array());
|
||||
$obj = new Sabre_CalDAV_CalendarObject($backend, array(), $objectInfo);
|
||||
$this->assertEquals(3, $obj->getSize());
|
||||
|
||||
}
|
||||
|
||||
function testGetSize2() {
|
||||
|
||||
$objectInfo = array(
|
||||
'uri' => 'foo',
|
||||
'calendarid' => 1,
|
||||
'size' => 4,
|
||||
);
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_Mock(array(), array());
|
||||
$obj = new Sabre_CalDAV_CalendarObject($backend, array(), $objectInfo);
|
||||
$this->assertEquals(4, $obj->getSize());
|
||||
|
||||
}
|
||||
}
|
||||
537
dav/SabreDAV/tests/Sabre/CalDAV/CalendarQueryParserTest.php
Normal file
537
dav/SabreDAV/tests/Sabre/CalDAV/CalendarQueryParserTest.php
Normal file
|
|
@ -0,0 +1,537 @@
|
|||
<?php
|
||||
|
||||
class Sabre_CalDAV_CalendarQueryParserTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function parse($xml) {
|
||||
|
||||
$xml =
|
||||
'<?xml version="1.0"?>
|
||||
<c:calendar-query xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">
|
||||
' . implode("\n", $xml) . '
|
||||
</c:calendar-query>';
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
|
||||
|
||||
$q = new Sabre_CalDAV_CalendarQueryParser($dom);
|
||||
$q->parse();
|
||||
return $q->filters;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_BadRequest
|
||||
*/
|
||||
function testNoFilter() {
|
||||
|
||||
$xml = array();
|
||||
$this->parse($xml);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_BadRequest
|
||||
*/
|
||||
function testTwoCompFilter() {
|
||||
|
||||
$xml = array(
|
||||
'<c:filter>',
|
||||
' <c:comp-filter name="VEVENT" />',
|
||||
' <c:comp-filter name="VEVENT" />',
|
||||
'</c:filter>'
|
||||
);
|
||||
$this->parse($xml);
|
||||
|
||||
}
|
||||
|
||||
function testBasicFilter() {
|
||||
|
||||
$xml = array(
|
||||
'<c:filter>',
|
||||
' <c:comp-filter name="VCALENDAR" />',
|
||||
'</c:filter>'
|
||||
);
|
||||
$result = $this->parse($xml);
|
||||
|
||||
$expected = array(
|
||||
'name' => 'VCALENDAR',
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => false
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
$result
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function testCompIsNotDefined() {
|
||||
|
||||
$xml = array(
|
||||
'<c:filter>',
|
||||
' <c:comp-filter name="VCALENDAR">',
|
||||
' <c:comp-filter name="VEVENT">',
|
||||
' <c:is-not-defined/>',
|
||||
' </c:comp-filter>',
|
||||
' </c:comp-filter>',
|
||||
'</c:filter>'
|
||||
);
|
||||
$result = $this->parse($xml);
|
||||
|
||||
$expected = array(
|
||||
'name' => 'VCALENDAR',
|
||||
'comp-filters' => array(
|
||||
array(
|
||||
'name' => 'VEVENT',
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => true,
|
||||
'time-range' => false
|
||||
),
|
||||
),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => false
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
$result
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_BadRequest
|
||||
*/
|
||||
function testCompTimeRangeOnVCALENDAR() {
|
||||
|
||||
$xml = array(
|
||||
'<c:filter>',
|
||||
' <c:comp-filter name="VCALENDAR">',
|
||||
' <c:time-range start="20110101T000000Z" end="20111231T235959Z" />',
|
||||
' </c:comp-filter>',
|
||||
'</c:filter>'
|
||||
);
|
||||
$result = $this->parse($xml);
|
||||
|
||||
}
|
||||
|
||||
function testCompTimeRange() {
|
||||
|
||||
$xml = array(
|
||||
'<c:filter>',
|
||||
' <c:comp-filter name="VCALENDAR">',
|
||||
' <c:comp-filter name="VEVENT">',
|
||||
' <c:time-range start="20110101T000000Z" end="20111231T235959Z" />',
|
||||
' </c:comp-filter>',
|
||||
' <c:comp-filter name="VTODO">',
|
||||
' <c:time-range start="20110101T000000Z" />',
|
||||
' </c:comp-filter>',
|
||||
' <c:comp-filter name="VJOURNAL">',
|
||||
' <c:time-range end="20111231T235959Z" />',
|
||||
' </c:comp-filter>',
|
||||
' </c:comp-filter>',
|
||||
'</c:filter>'
|
||||
);
|
||||
$result = $this->parse($xml);
|
||||
|
||||
$expected = array(
|
||||
'name' => 'VCALENDAR',
|
||||
'comp-filters' => array(
|
||||
array(
|
||||
'name' => 'VEVENT',
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => array(
|
||||
'start' => new DateTime('2011-01-01 00:00:00', new DateTimeZone('GMT')),
|
||||
'end' => new DateTime('2011-12-31 23:59:59', new DateTimeZone('GMT')),
|
||||
),
|
||||
),
|
||||
array(
|
||||
'name' => 'VTODO',
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => array(
|
||||
'start' => new DateTime('2011-01-01 00:00:00', new DateTimeZone('GMT')),
|
||||
'end' => null,
|
||||
),
|
||||
),
|
||||
array(
|
||||
'name' => 'VJOURNAL',
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => array(
|
||||
'start' => null,
|
||||
'end' => new DateTime('2011-12-31 23:59:59', new DateTimeZone('GMT')),
|
||||
),
|
||||
),
|
||||
),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => false
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
$result
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_BadRequest
|
||||
*/
|
||||
function testCompTimeRangeBadRange() {
|
||||
|
||||
$xml = array(
|
||||
'<c:filter>',
|
||||
' <c:comp-filter name="VCALENDAR">',
|
||||
' <c:comp-filter name="VEVENT">',
|
||||
' <c:time-range start="20110101T000000Z" end="20100101T000000Z" />',
|
||||
' </c:comp-filter>',
|
||||
' </c:comp-filter>',
|
||||
'</c:filter>'
|
||||
);
|
||||
$this->parse($xml);
|
||||
|
||||
}
|
||||
|
||||
function testProp() {
|
||||
|
||||
$xml = array(
|
||||
'<c:filter>',
|
||||
' <c:comp-filter name="VCALENDAR">',
|
||||
' <c:comp-filter name="VEVENT">',
|
||||
' <c:prop-filter name="SUMMARY">',
|
||||
' <c:text-match>vacation</c:text-match>',
|
||||
' </c:prop-filter>',
|
||||
' </c:comp-filter>',
|
||||
' </c:comp-filter>',
|
||||
'</c:filter>'
|
||||
);
|
||||
$result = $this->parse($xml);
|
||||
|
||||
$expected = array(
|
||||
'name' => 'VCALENDAR',
|
||||
'comp-filters' => array(
|
||||
array(
|
||||
'name' => 'VEVENT',
|
||||
'is-not-defined' => false,
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(
|
||||
array(
|
||||
'name' => 'SUMMARY',
|
||||
'is-not-defined' => false,
|
||||
'param-filters' => array(),
|
||||
'text-match' => array(
|
||||
'negate-condition' => false,
|
||||
'collation' => 'i;ascii-casemap',
|
||||
'value' => 'vacation',
|
||||
),
|
||||
'time-range' => null,
|
||||
),
|
||||
),
|
||||
'time-range' => null,
|
||||
),
|
||||
),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => false
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
$result
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function testComplex() {
|
||||
|
||||
$xml = array(
|
||||
'<c:filter>',
|
||||
' <c:comp-filter name="VCALENDAR">',
|
||||
' <c:comp-filter name="VEVENT">',
|
||||
' <c:prop-filter name="SUMMARY">',
|
||||
' <c:text-match collation="i;unicode-casemap">vacation</c:text-match>',
|
||||
' </c:prop-filter>',
|
||||
' <c:prop-filter name="DTSTAMP">',
|
||||
' <c:time-range start="20110704T000000Z" />',
|
||||
' </c:prop-filter>',
|
||||
' <c:prop-filter name="ORGANIZER">',
|
||||
' <c:is-not-defined />',
|
||||
' </c:prop-filter>',
|
||||
' <c:prop-filter name="DTSTART">',
|
||||
' <c:param-filter name="VALUE">',
|
||||
' <c:text-match negate-condition="yes">DATE</c:text-match>',
|
||||
' </c:param-filter>',
|
||||
' </c:prop-filter>',
|
||||
' </c:comp-filter>',
|
||||
' </c:comp-filter>',
|
||||
'</c:filter>'
|
||||
);
|
||||
$result = $this->parse($xml);
|
||||
|
||||
$expected = array(
|
||||
'name' => 'VCALENDAR',
|
||||
'comp-filters' => array(
|
||||
array(
|
||||
'name' => 'VEVENT',
|
||||
'is-not-defined' => false,
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(
|
||||
array(
|
||||
'name' => 'SUMMARY',
|
||||
'is-not-defined' => false,
|
||||
'param-filters' => array(),
|
||||
'text-match' => array(
|
||||
'negate-condition' => false,
|
||||
'collation' => 'i;unicode-casemap',
|
||||
'value' => 'vacation',
|
||||
),
|
||||
'time-range' => null,
|
||||
),
|
||||
array(
|
||||
'name' => 'DTSTAMP',
|
||||
'is-not-defined' => false,
|
||||
'param-filters' => array(),
|
||||
'text-match' => null,
|
||||
'time-range' => array(
|
||||
'start' => new DateTime('2011-07-04 00:00:00', new DateTimeZone('GMT')),
|
||||
'end' => null,
|
||||
),
|
||||
),
|
||||
array(
|
||||
'name' => 'ORGANIZER',
|
||||
'is-not-defined' => true,
|
||||
'param-filters' => array(),
|
||||
'text-match' => null,
|
||||
'time-range' => null,
|
||||
),
|
||||
array(
|
||||
'name' => 'DTSTART',
|
||||
'is-not-defined' => false,
|
||||
'param-filters' => array(
|
||||
array(
|
||||
'name' => 'VALUE',
|
||||
'is-not-defined' => false,
|
||||
'text-match' => array(
|
||||
'negate-condition' => true,
|
||||
'value' => 'DATE',
|
||||
'collation' => 'i;ascii-casemap',
|
||||
),
|
||||
),
|
||||
),
|
||||
'text-match' => null,
|
||||
'time-range' => null,
|
||||
),
|
||||
),
|
||||
'time-range' => null,
|
||||
),
|
||||
),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => false
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
$result
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function testOther1() {
|
||||
|
||||
// This body was exactly sent to us from the sabredav mailing list. Checking if this parses correctly.
|
||||
|
||||
$body = <<<BLA
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<C:calendar-query xmlns:D="DAV:"
|
||||
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||||
<D:prop>
|
||||
<C:calendar-data/>
|
||||
<D:getetag/>
|
||||
</D:prop>
|
||||
<C:filter>
|
||||
<C:comp-filter name="VCALENDAR">
|
||||
<C:comp-filter name="VEVENT">
|
||||
<C:time-range start="20090101T000000Z" end="20121202T000000Z"/>
|
||||
</C:comp-filter>
|
||||
</C:comp-filter>
|
||||
</C:filter>
|
||||
</C:calendar-query>
|
||||
BLA;
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($body);
|
||||
|
||||
$q = new Sabre_CalDAV_CalendarQueryParser($dom);
|
||||
$q->parse();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'{urn:ietf:params:xml:ns:caldav}calendar-data',
|
||||
'{DAV:}getetag',
|
||||
), $q->requestedProperties);
|
||||
|
||||
$expectedFilters = array(
|
||||
'name' => 'VCALENDAR',
|
||||
'comp-filters' => array(
|
||||
array(
|
||||
'name' => 'VEVENT',
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(),
|
||||
'time-range' => array(
|
||||
'start' => new DateTime('2009-01-01 00:00:00', new DateTimeZone('UTC')),
|
||||
'end' => new DateTime('2012-12-02 00:00:00', new DateTimeZone('UTC')),
|
||||
),
|
||||
'is-not-defined' => false,
|
||||
),
|
||||
),
|
||||
'prop-filters' => array(),
|
||||
'time-range' => null,
|
||||
'is-not-defined' => false,
|
||||
);
|
||||
|
||||
$this->assertEquals($expectedFilters, $q->filters);
|
||||
|
||||
}
|
||||
|
||||
function testExpand() {
|
||||
|
||||
$xml = array(
|
||||
'<d:prop>',
|
||||
' <c:calendar-data>',
|
||||
' <c:expand start="20110101T000000Z" end="20120101T000000Z"/>',
|
||||
' </c:calendar-data>',
|
||||
'</d:prop>',
|
||||
'<c:filter>',
|
||||
' <c:comp-filter name="VCALENDAR" />',
|
||||
'</c:filter>'
|
||||
);
|
||||
|
||||
$xml =
|
||||
'<?xml version="1.0"?>
|
||||
<c:calendar-query xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">
|
||||
' . implode("\n", $xml) . '
|
||||
</c:calendar-query>';
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
|
||||
$q = new Sabre_CalDAV_CalendarQueryParser($dom);
|
||||
$q->parse();
|
||||
|
||||
|
||||
$expected = array(
|
||||
'name' => 'VCALENDAR',
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => false
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
$q->filters
|
||||
);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'{urn:ietf:params:xml:ns:caldav}calendar-data',
|
||||
), $q->requestedProperties);
|
||||
|
||||
$this->assertEquals(
|
||||
array(
|
||||
'start' => new DateTime('2011-01-01 00:00:00', new DateTimeZone('UTC')),
|
||||
'end' => new DateTime('2012-01-01 00:00:00', new DateTimeZone('UTC')),
|
||||
),
|
||||
$q->expand
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_BadRequest
|
||||
*/
|
||||
function testExpandNoStart() {
|
||||
|
||||
$xml = array(
|
||||
'<d:prop>',
|
||||
' <c:calendar-data>',
|
||||
' <c:expand end="20120101T000000Z"/>',
|
||||
' </c:calendar-data>',
|
||||
'</d:prop>',
|
||||
'<c:filter>',
|
||||
' <c:comp-filter name="VCALENDAR" />',
|
||||
'</c:filter>'
|
||||
);
|
||||
|
||||
$xml =
|
||||
'<?xml version="1.0"?>
|
||||
<c:calendar-query xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">
|
||||
' . implode("\n", $xml) . '
|
||||
</c:calendar-query>';
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
|
||||
$q = new Sabre_CalDAV_CalendarQueryParser($dom);
|
||||
$q->parse();
|
||||
|
||||
}
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_BadRequest
|
||||
*/
|
||||
function testExpandNoEnd() {
|
||||
|
||||
$xml = array(
|
||||
'<d:prop>',
|
||||
' <c:calendar-data>',
|
||||
' <c:expand start="20120101T000000Z"/>',
|
||||
' </c:calendar-data>',
|
||||
'</d:prop>',
|
||||
'<c:filter>',
|
||||
' <c:comp-filter name="VCALENDAR" />',
|
||||
'</c:filter>'
|
||||
);
|
||||
|
||||
$xml =
|
||||
'<?xml version="1.0"?>
|
||||
<c:calendar-query xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">
|
||||
' . implode("\n", $xml) . '
|
||||
</c:calendar-query>';
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
|
||||
$q = new Sabre_CalDAV_CalendarQueryParser($dom);
|
||||
$q->parse();
|
||||
|
||||
}
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_BadRequest
|
||||
*/
|
||||
function testExpandBadTimes() {
|
||||
|
||||
$xml = array(
|
||||
'<d:prop>',
|
||||
' <c:calendar-data>',
|
||||
' <c:expand start="20120101T000000Z" end="19980101T000000Z"/>',
|
||||
' </c:calendar-data>',
|
||||
'</d:prop>',
|
||||
'<c:filter>',
|
||||
' <c:comp-filter name="VCALENDAR" />',
|
||||
'</c:filter>'
|
||||
);
|
||||
|
||||
$xml =
|
||||
'<?xml version="1.0"?>
|
||||
<c:calendar-query xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">
|
||||
' . implode("\n", $xml) . '
|
||||
</c:calendar-query>';
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
|
||||
$q = new Sabre_CalDAV_CalendarQueryParser($dom);
|
||||
$q->parse();
|
||||
|
||||
}
|
||||
}
|
||||
117
dav/SabreDAV/tests/Sabre/CalDAV/CalendarQueryVAlarmTest.php
Normal file
117
dav/SabreDAV/tests/Sabre/CalDAV/CalendarQueryVAlarmTest.php
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
<?php
|
||||
|
||||
use Sabre\VObject;
|
||||
|
||||
class Sabre_CalDAV_CalendarQueryVAlarmTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* This test is specifically for a time-range query on a VALARM, contained
|
||||
* in a VEVENT that's recurring
|
||||
*/
|
||||
function testValarm() {
|
||||
|
||||
$vevent = VObject\Component::create('VEVENT');
|
||||
$vevent->RRULE = 'FREQ=MONTHLY';
|
||||
$vevent->DTSTART = '20120101T120000Z';
|
||||
$vevent->UID = 'bla';
|
||||
|
||||
$valarm = VObject\Component::create('VALARM');
|
||||
$valarm->TRIGGER = '-P15D';
|
||||
$vevent->add($valarm);
|
||||
|
||||
$vcalendar = VObject\Component::create('VCALENDAR');
|
||||
$vcalendar->add($vevent);
|
||||
|
||||
$filter = array(
|
||||
'name' => 'VCALENDAR',
|
||||
'is-not-defined' => false,
|
||||
'time-range' => null,
|
||||
'prop-filters' => array(),
|
||||
'comp-filters' => array(
|
||||
array(
|
||||
'name' => 'VEVENT',
|
||||
'is-not-defined' => false,
|
||||
'time-range' => null,
|
||||
'prop-filters' => array(),
|
||||
'comp-filters' => array(
|
||||
array(
|
||||
'name' => 'VALARM',
|
||||
'is-not-defined' => false,
|
||||
'prop-filters' => array(),
|
||||
'comp-filters' => array(),
|
||||
'time-range' => array(
|
||||
'start' => new DateTime('2012-05-10'),
|
||||
'end' => new DateTime('2012-05-20'),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
$validator = new Sabre_CalDAV_CalendarQueryValidator();
|
||||
$this->assertTrue($validator->validate($vcalendar, $filter));
|
||||
|
||||
|
||||
// A limited recurrence rule, should return false
|
||||
$vevent = VObject\Component::create('VEVENT');
|
||||
$vevent->RRULE = 'FREQ=MONTHLY;COUNT=1';
|
||||
$vevent->DTSTART = '20120101T120000Z';
|
||||
$vevent->UID = 'bla';
|
||||
|
||||
$valarm = VObject\Component::create('VALARM');
|
||||
$valarm->TRIGGER = '-P15D';
|
||||
$vevent->add($valarm);
|
||||
|
||||
$vcalendar = VObject\Component::create('VCALENDAR');
|
||||
$vcalendar->add($vevent);
|
||||
|
||||
$this->assertFalse($validator->validate($vcalendar, $filter));
|
||||
}
|
||||
|
||||
function testAlarmWayBefore() {
|
||||
|
||||
$vevent = VObject\Component::create('VEVENT');
|
||||
$vevent->DTSTART = '20120101T120000Z';
|
||||
$vevent->UID = 'bla';
|
||||
|
||||
$valarm = VObject\Component::create('VALARM');
|
||||
$valarm->TRIGGER = '-P2W1D';
|
||||
$vevent->add($valarm);
|
||||
|
||||
$vcalendar = VObject\Component::create('VCALENDAR');
|
||||
$vcalendar->add($vevent);
|
||||
|
||||
$filter = array(
|
||||
'name' => 'VCALENDAR',
|
||||
'is-not-defined' => false,
|
||||
'time-range' => null,
|
||||
'prop-filters' => array(),
|
||||
'comp-filters' => array(
|
||||
array(
|
||||
'name' => 'VEVENT',
|
||||
'is-not-defined' => false,
|
||||
'time-range' => null,
|
||||
'prop-filters' => array(),
|
||||
'comp-filters' => array(
|
||||
array(
|
||||
'name' => 'VALARM',
|
||||
'is-not-defined' => false,
|
||||
'prop-filters' => array(),
|
||||
'comp-filters' => array(),
|
||||
'time-range' => array(
|
||||
'start' => new DateTime('2011-12-10'),
|
||||
'end' => new DateTime('2011-12-20'),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
$validator = new Sabre_CalDAV_CalendarQueryValidator();
|
||||
$this->assertTrue($validator->validate($vcalendar, $filter));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
769
dav/SabreDAV/tests/Sabre/CalDAV/CalendarQueryValidatorTest.php
Normal file
769
dav/SabreDAV/tests/Sabre/CalDAV/CalendarQueryValidatorTest.php
Normal file
|
|
@ -0,0 +1,769 @@
|
|||
<?php
|
||||
|
||||
use Sabre\VObject;
|
||||
|
||||
class Sabre_CalDAV_CalendarQueryValidatorTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @dataProvider provider
|
||||
*/
|
||||
function testValid($icalObject, $filters, $outcome) {
|
||||
|
||||
$validator = new Sabre_CalDAV_CalendarQueryValidator();
|
||||
|
||||
// Wrapping filter in a VCALENDAR component filter, as this is always
|
||||
// there anyway.
|
||||
$filters = array(
|
||||
'name' => 'VCALENDAR',
|
||||
'comp-filters' => array($filters),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => null,
|
||||
);
|
||||
|
||||
$vObject = VObject\Reader::read($icalObject);
|
||||
|
||||
switch($outcome) {
|
||||
case 0 :
|
||||
$this->assertFalse($validator->validate($vObject, $filters));
|
||||
break;
|
||||
case 1 :
|
||||
$this->assertTrue($validator->validate($vObject, $filters));
|
||||
break;
|
||||
case -1 :
|
||||
try {
|
||||
$validator->validate($vObject, $filters);
|
||||
} catch (Exception $e) {
|
||||
// Success
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function provider() {
|
||||
|
||||
$blob1 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:hi
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$blob2 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:hi
|
||||
BEGIN:VALARM
|
||||
ACTION:DISPLAY
|
||||
END:VALARM
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$blob3 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:hi
|
||||
DTSTART;VALUE=DATE:20110704
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
$blob4 = <<<yow
|
||||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
FN:Evert
|
||||
END:VCARD
|
||||
yow;
|
||||
|
||||
$blob5 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VEVENT
|
||||
DTSTART:20110101T120000Z
|
||||
DTEND:20110102T120000Z
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$blob6 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VEVENT
|
||||
DTSTART:20110101T120000Z
|
||||
DURATION:PT5H
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$blob7 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VEVENT
|
||||
DTSTART;VALUE=DATE:20110101
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$blob8 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VEVENT
|
||||
DTSTART:20110101T120000Z
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$blob9 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VTODO
|
||||
DTSTART:20110101T120000Z
|
||||
DURATION:PT1H
|
||||
END:VTODO
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
$blob10 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VTODO
|
||||
DTSTART:20110101T120000Z
|
||||
DUE:20110101T130000Z
|
||||
END:VTODO
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
$blob11 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VTODO
|
||||
DTSTART:20110101T120000Z
|
||||
END:VTODO
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$blob12 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VTODO
|
||||
DUE:20110101T130000Z
|
||||
END:VTODO
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$blob13 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VTODO
|
||||
COMPLETED:20110101T130000Z
|
||||
CREATED:20110101T110000Z
|
||||
END:VTODO
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$blob14 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VTODO
|
||||
COMPLETED:20110101T130000Z
|
||||
END:VTODO
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$blob15 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VTODO
|
||||
CREATED:20110101T110000Z
|
||||
END:VTODO
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
|
||||
$blob16 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VTODO
|
||||
END:VTODO
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$blob17 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VJOURNAL
|
||||
END:VJOURNAL
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$blob18 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VJOURNAL
|
||||
DTSTART:20110101T120000Z
|
||||
END:VJOURNAL
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$blob19 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VJOURNAL
|
||||
DTSTART;VALUE=DATE:20110101
|
||||
END:VJOURNAL
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$blob20 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VFREEBUSY
|
||||
END:VFREEBUSY
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$blob21 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VEVENT
|
||||
DTSTART:20110101T120000Z
|
||||
BEGIN:VALARM
|
||||
TRIGGER:-PT1H
|
||||
END:VALARM
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$blob22 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VEVENT
|
||||
DTSTART:20110101T120000Z
|
||||
BEGIN:VALARM
|
||||
TRIGGER;VALUE=DURATION:-PT1H
|
||||
END:VALARM
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$blob23 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VEVENT
|
||||
DTSTART:20110101T120000Z
|
||||
BEGIN:VALARM
|
||||
TRIGGER;VALUE=DURATION;RELATED=END:-PT1H
|
||||
END:VALARM
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$blob24 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VEVENT
|
||||
DTSTART:20110101T120000Z
|
||||
DTEND:20110101T130000Z
|
||||
BEGIN:VALARM
|
||||
TRIGGER;VALUE=DURATION;RELATED=END:-PT2H
|
||||
END:VALARM
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$blob25 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VEVENT
|
||||
DTSTART:20110101T120000Z
|
||||
DURATION:PT1H
|
||||
BEGIN:VALARM
|
||||
TRIGGER;VALUE=DURATION;RELATED=END:-PT2H
|
||||
END:VALARM
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$blob26 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VEVENT
|
||||
DTSTART:20110101T120000Z
|
||||
DURATION:PT1H
|
||||
BEGIN:VALARM
|
||||
TRIGGER;VALUE=DATE-TIME:20110101T110000Z
|
||||
END:VALARM
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
|
||||
$blob27 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VTODO
|
||||
DTSTART:20110101T120000Z
|
||||
DUE:20110101T130000Z
|
||||
BEGIN:VALARM
|
||||
TRIGGER;VALUE=DURATION;RELATED=END:-PT2H
|
||||
END:VALARM
|
||||
END:VTODO
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$blob28 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VJOURNAL
|
||||
DTSTART:20110101T120000Z
|
||||
BEGIN:VALARM
|
||||
TRIGGER;VALUE=DURATION;RELATED=END:-PT2H
|
||||
END:VALARM
|
||||
END:VJOURNAL
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$blob29 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VEVENT
|
||||
DTSTART:20110101T120000Z
|
||||
DURATION:PT1H
|
||||
BEGIN:VALARM
|
||||
TRIGGER;VALUE=DATE-TIME:20110101T090000Z
|
||||
REPEAT:2
|
||||
DURATION:PT1H
|
||||
END:VALARM
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$blob30 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VEVENT
|
||||
DTSTART:20110101T120000Z
|
||||
DURATION:PT1H
|
||||
BEGIN:VALARM
|
||||
TRIGGER;VALUE=DATE-TIME:20110101T090000Z
|
||||
DURATION:PT1H
|
||||
END:VALARM
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$blob31 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VEVENT
|
||||
DTSTART:20080101T120000Z
|
||||
DURATION:PT1H
|
||||
RRULE:FREQ=YEARLY
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$blob32 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VEVENT
|
||||
DTSTART:20080102T120000Z
|
||||
DURATION:PT1H
|
||||
RRULE:FREQ=YEARLY
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
$blob33 = <<<yow
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VEVENT
|
||||
DTSTART;VALUE=DATE:20120628
|
||||
RRULE:FREQ=DAILY
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
yow;
|
||||
|
||||
$filter1 = array(
|
||||
'name' => 'VEVENT',
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => null,
|
||||
);
|
||||
$filter2 = $filter1;
|
||||
$filter2['name'] = 'VTODO';
|
||||
|
||||
$filter3 = $filter1;
|
||||
$filter3['is-not-defined'] = true;
|
||||
|
||||
$filter4 = $filter1;
|
||||
$filter4['name'] = 'VTODO';
|
||||
$filter4['is-not-defined'] = true;
|
||||
|
||||
$filter5 = $filter1;
|
||||
$filter5['comp-filters'] = array(
|
||||
array(
|
||||
'name' => 'VALARM',
|
||||
'is-not-defined' => false,
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(),
|
||||
'time-range' => null,
|
||||
),
|
||||
);
|
||||
$filter6 = $filter1;
|
||||
$filter6['prop-filters'] = array(
|
||||
array(
|
||||
'name' => 'SUMMARY',
|
||||
'is-not-defined' => false,
|
||||
'param-filters' => array(),
|
||||
'time-range' => null,
|
||||
'text-match' => null,
|
||||
),
|
||||
);
|
||||
$filter7 = $filter6;
|
||||
$filter7['prop-filters'][0]['name'] = 'DESCRIPTION';
|
||||
|
||||
$filter8 = $filter6;
|
||||
$filter8['prop-filters'][0]['is-not-defined'] = true;
|
||||
|
||||
$filter9 = $filter7;
|
||||
$filter9['prop-filters'][0]['is-not-defined'] = true;
|
||||
|
||||
$filter10 = $filter5;
|
||||
$filter10['prop-filters'] = $filter6['prop-filters'];
|
||||
|
||||
// Param filters
|
||||
$filter11 = $filter1;
|
||||
$filter11['prop-filters'] = array(
|
||||
array(
|
||||
'name' => 'DTSTART',
|
||||
'is-not-defined' => false,
|
||||
'param-filters' => array(
|
||||
array(
|
||||
'name' => 'VALUE',
|
||||
'is-not-defined' => false,
|
||||
'text-match' => null,
|
||||
),
|
||||
),
|
||||
'time-range' => null,
|
||||
'text-match' => null,
|
||||
),
|
||||
);
|
||||
|
||||
$filter12 = $filter11;
|
||||
$filter12['prop-filters'][0]['param-filters'][0]['name'] = 'TZID';
|
||||
|
||||
$filter13 = $filter11;
|
||||
$filter13['prop-filters'][0]['param-filters'][0]['is-not-defined'] = true;
|
||||
|
||||
$filter14 = $filter12;
|
||||
$filter14['prop-filters'][0]['param-filters'][0]['is-not-defined'] = true;
|
||||
|
||||
// Param text filter
|
||||
$filter15 = $filter11;
|
||||
$filter15['prop-filters'][0]['param-filters'][0]['text-match'] = array(
|
||||
'collation' => 'i;ascii-casemap',
|
||||
'value' => 'dAtE',
|
||||
'negate-condition' => false,
|
||||
);
|
||||
$filter16 = $filter15;
|
||||
$filter16['prop-filters'][0]['param-filters'][0]['text-match']['collation'] = 'i;octet';
|
||||
|
||||
$filter17 = $filter15;
|
||||
$filter17['prop-filters'][0]['param-filters'][0]['text-match']['negate-condition'] = true;
|
||||
|
||||
$filter18 = $filter15;
|
||||
$filter18['prop-filters'][0]['param-filters'][0]['text-match']['negate-condition'] = true;
|
||||
$filter18['prop-filters'][0]['param-filters'][0]['text-match']['collation'] = 'i;octet';
|
||||
|
||||
// prop + text
|
||||
$filter19 = $filter5;
|
||||
$filter19['comp-filters'][0]['prop-filters'] = array(
|
||||
array(
|
||||
'name' => 'action',
|
||||
'is-not-defined' => false,
|
||||
'time-range' => null,
|
||||
'param-filters' => array(),
|
||||
'text-match' => array(
|
||||
'collation' => 'i;ascii-casemap',
|
||||
'value' => 'display',
|
||||
'negate-condition' => false,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
// Time range
|
||||
$filter20 = array(
|
||||
'name' => 'VEVENT',
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => array(
|
||||
'start' => new DateTime('2011-01-01 10:00:00', new DateTimeZone('GMT')),
|
||||
'end' => new DateTime('2011-01-01 13:00:00', new DateTimeZone('GMT')),
|
||||
),
|
||||
);
|
||||
// Time range, no end date
|
||||
$filter21 = $filter20;
|
||||
$filter21['time-range']['end'] = null;
|
||||
|
||||
// Time range, no start date
|
||||
$filter22 = $filter20;
|
||||
$filter22['time-range']['start'] = null;
|
||||
|
||||
// Time range, other dates
|
||||
$filter23 = $filter20;
|
||||
$filter23['time-range'] = array(
|
||||
'start' => new DateTime('2011-02-01 10:00:00', new DateTimeZone('GMT')),
|
||||
'end' => new DateTime('2011-02-01 13:00:00', new DateTimeZone('GMT')),
|
||||
);
|
||||
// Time range
|
||||
$filter24 = array(
|
||||
'name' => 'VTODO',
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => array(
|
||||
'start' => new DateTime('2011-01-01 12:45:00', new DateTimeZone('GMT')),
|
||||
'end' => new DateTime('2011-01-01 13:15:00', new DateTimeZone('GMT')),
|
||||
),
|
||||
);
|
||||
// Time range, other dates (1 month in the future)
|
||||
$filter25 = $filter24;
|
||||
$filter25['time-range'] = array(
|
||||
'start' => new DateTime('2011-02-01 10:00:00', new DateTimeZone('GMT')),
|
||||
'end' => new DateTime('2011-02-01 13:00:00', new DateTimeZone('GMT')),
|
||||
);
|
||||
$filter26 = $filter24;
|
||||
$filter26['time-range'] = array(
|
||||
'start' => new DateTime('2011-01-01 11:45:00', new DateTimeZone('GMT')),
|
||||
'end' => new DateTime('2011-01-01 12:15:00', new DateTimeZone('GMT')),
|
||||
);
|
||||
|
||||
// Time range for VJOURNAL
|
||||
$filter27 = array(
|
||||
'name' => 'VJOURNAL',
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => array(
|
||||
'start' => new DateTime('2011-01-01 12:45:00', new DateTimeZone('GMT')),
|
||||
'end' => new DateTime('2011-01-01 13:15:00', new DateTimeZone('GMT')),
|
||||
),
|
||||
);
|
||||
$filter28 = $filter27;
|
||||
$filter28['time-range'] = array(
|
||||
'start' => new DateTime('2011-01-01 11:45:00', new DateTimeZone('GMT')),
|
||||
'end' => new DateTime('2011-01-01 12:15:00', new DateTimeZone('GMT')),
|
||||
);
|
||||
// Time range for VFREEBUSY
|
||||
$filter29 = array(
|
||||
'name' => 'VFREEBUSY',
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => array(
|
||||
'start' => new DateTime('2011-01-01 12:45:00', new DateTimeZone('GMT')),
|
||||
'end' => new DateTime('2011-01-01 13:15:00', new DateTimeZone('GMT')),
|
||||
),
|
||||
);
|
||||
// Time range filter on property
|
||||
$filter30 = array(
|
||||
'name' => 'VEVENT',
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(
|
||||
array(
|
||||
'name' => 'DTSTART',
|
||||
'is-not-defined' => false,
|
||||
'param-filters' => array(),
|
||||
'time-range' => array(
|
||||
'start' => new DateTime('2011-01-01 10:00:00', new DateTimeZone('GMT')),
|
||||
'end' => new DateTime('2011-01-01 13:00:00', new DateTimeZone('GMT')),
|
||||
),
|
||||
'text-match' => null,
|
||||
),
|
||||
),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => null,
|
||||
);
|
||||
|
||||
// Time range for alarm
|
||||
$filter31 = array(
|
||||
'name' => 'VEVENT',
|
||||
'prop-filters' => array(),
|
||||
'comp-filters' => array(
|
||||
array(
|
||||
'name' => 'VALARM',
|
||||
'is-not-defined' => false,
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(),
|
||||
'time-range' => array(
|
||||
'start' => new DateTime('2011-01-01 10:45:00', new DateTimeZone('GMT')),
|
||||
'end' => new DateTime('2011-01-01 11:15:00', new DateTimeZone('GMT')),
|
||||
),
|
||||
'text-match' => null,
|
||||
),
|
||||
),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => null,
|
||||
);
|
||||
$filter32 = $filter31;
|
||||
$filter32['comp-filters'][0]['time-range'] = array(
|
||||
'start' => new DateTime('2011-01-01 11:45:00', new DateTimeZone('GMT')),
|
||||
'end' => new DateTime('2011-01-01 12:15:00', new DateTimeZone('GMT')),
|
||||
);
|
||||
|
||||
$filter33 = $filter31;
|
||||
$filter33['name'] = 'VTODO';
|
||||
$filter34 = $filter32;
|
||||
$filter34['name'] = 'VTODO';
|
||||
$filter35 = $filter31;
|
||||
$filter35['name'] = 'VJOURNAL';
|
||||
$filter36 = $filter32;
|
||||
$filter36['name'] = 'VJOURNAL';
|
||||
|
||||
// Time range filter on non-datetime property
|
||||
$filter37 = array(
|
||||
'name' => 'VEVENT',
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(
|
||||
array(
|
||||
'name' => 'SUMMARY',
|
||||
'is-not-defined' => false,
|
||||
'param-filters' => array(),
|
||||
'time-range' => array(
|
||||
'start' => new DateTime('2011-01-01 10:00:00', new DateTimeZone('GMT')),
|
||||
'end' => new DateTime('2011-01-01 13:00:00', new DateTimeZone('GMT')),
|
||||
),
|
||||
'text-match' => null,
|
||||
),
|
||||
),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => null,
|
||||
);
|
||||
|
||||
$filter38 = array(
|
||||
'name' => 'VEVENT',
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => array(
|
||||
'start' => new DateTime('2012-07-01 00:00:00', new DateTimeZone('UTC')),
|
||||
'end' => new DateTime('2012-08-01 00:00:00', new DateTimeZone('UTC')),
|
||||
)
|
||||
);
|
||||
|
||||
return array(
|
||||
// Component check
|
||||
|
||||
array($blob1, $filter1, 1),
|
||||
array($blob1, $filter2, 0),
|
||||
array($blob1, $filter3, 0),
|
||||
array($blob1, $filter4, 1),
|
||||
|
||||
// Subcomponent check
|
||||
array($blob1, $filter5, 0),
|
||||
array($blob2, $filter5, 1),
|
||||
|
||||
// Property check
|
||||
array($blob1, $filter6, 1),
|
||||
array($blob1, $filter7, 0),
|
||||
array($blob1, $filter8, 0),
|
||||
array($blob1, $filter9, 1),
|
||||
|
||||
// Subcomponent + property
|
||||
array($blob2, $filter10, 1),
|
||||
|
||||
// Param filter
|
||||
array($blob3, $filter11, 1),
|
||||
array($blob3, $filter12, 0),
|
||||
array($blob3, $filter13, 0),
|
||||
array($blob3, $filter14, 1),
|
||||
|
||||
// Param + text
|
||||
array($blob3, $filter15, 1),
|
||||
array($blob3, $filter16, 0),
|
||||
array($blob3, $filter17, 0),
|
||||
array($blob3, $filter18, 1),
|
||||
|
||||
// Prop + text
|
||||
array($blob2, $filter19, 1),
|
||||
|
||||
// Incorrect object (vcard)
|
||||
array($blob4, $filter1, -1),
|
||||
|
||||
// Time-range for event
|
||||
array($blob5, $filter20, 1),
|
||||
array($blob6, $filter20, 1),
|
||||
array($blob7, $filter20, 1),
|
||||
array($blob8, $filter20, 1),
|
||||
|
||||
array($blob5, $filter21, 1),
|
||||
array($blob5, $filter22, 1),
|
||||
|
||||
array($blob5, $filter23, 0),
|
||||
array($blob6, $filter23, 0),
|
||||
array($blob7, $filter23, 0),
|
||||
array($blob8, $filter23, 0),
|
||||
|
||||
// Time-range for todo
|
||||
array($blob9, $filter24, 1),
|
||||
array($blob9, $filter25, 0),
|
||||
array($blob9, $filter26, 1),
|
||||
array($blob10, $filter24, 1),
|
||||
array($blob10, $filter25, 0),
|
||||
array($blob10, $filter26, 1),
|
||||
|
||||
array($blob11, $filter24, 0),
|
||||
array($blob11, $filter25, 0),
|
||||
array($blob11, $filter26, 1),
|
||||
|
||||
array($blob12, $filter24, 1),
|
||||
array($blob12, $filter25, 0),
|
||||
array($blob12, $filter26, 0),
|
||||
|
||||
array($blob13, $filter24, 1),
|
||||
array($blob13, $filter25, 0),
|
||||
array($blob13, $filter26, 1),
|
||||
|
||||
array($blob14, $filter24, 1),
|
||||
array($blob14, $filter25, 0),
|
||||
array($blob14, $filter26, 0),
|
||||
|
||||
array($blob15, $filter24, 1),
|
||||
array($blob15, $filter25, 1),
|
||||
array($blob15, $filter26, 1),
|
||||
|
||||
array($blob16, $filter24, 1),
|
||||
array($blob16, $filter25, 1),
|
||||
array($blob16, $filter26, 1),
|
||||
|
||||
// Time-range for journals
|
||||
array($blob17, $filter27, 0),
|
||||
array($blob17, $filter28, 0),
|
||||
array($blob18, $filter27, 0),
|
||||
array($blob18, $filter28, 1),
|
||||
array($blob19, $filter27, 1),
|
||||
array($blob19, $filter28, 1),
|
||||
|
||||
// Time-range for free-busy
|
||||
array($blob20, $filter29, -1),
|
||||
|
||||
// Time-range on property
|
||||
array($blob5, $filter30, 1),
|
||||
array($blob3, $filter37, -1),
|
||||
array($blob3, $filter30, 0),
|
||||
|
||||
// Time-range on alarm in vevent
|
||||
array($blob21, $filter31, 1),
|
||||
array($blob21, $filter32, 0),
|
||||
array($blob22, $filter31, 1),
|
||||
array($blob22, $filter32, 0),
|
||||
array($blob23, $filter31, 1),
|
||||
array($blob23, $filter32, 0),
|
||||
array($blob24, $filter31, 1),
|
||||
array($blob24, $filter32, 0),
|
||||
array($blob25, $filter31, 1),
|
||||
array($blob25, $filter32, 0),
|
||||
array($blob26, $filter31, 1),
|
||||
array($blob26, $filter32, 0),
|
||||
|
||||
// Time-range on alarm for vtodo
|
||||
array($blob27, $filter33, 1),
|
||||
array($blob27, $filter34, 0),
|
||||
|
||||
// Time-range on alarm for vjournal
|
||||
array($blob28, $filter35, -1),
|
||||
array($blob28, $filter36, -1),
|
||||
|
||||
// Time-range on alarm with duration
|
||||
array($blob29, $filter31, 1),
|
||||
array($blob29, $filter32, 0),
|
||||
array($blob30, $filter31, 0),
|
||||
array($blob30, $filter32, 0),
|
||||
|
||||
|
||||
// Time-range with RRULE
|
||||
array($blob31, $filter20, 1),
|
||||
array($blob32, $filter20, 0),
|
||||
|
||||
// Bug reported on mailing list, related to all-day events.
|
||||
array($blob33, $filter38, 1),
|
||||
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
253
dav/SabreDAV/tests/Sabre/CalDAV/CalendarTest.php
Normal file
253
dav/SabreDAV/tests/Sabre/CalDAV/CalendarTest.php
Normal file
|
|
@ -0,0 +1,253 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/CalDAV/TestUtil.php';
|
||||
require_once 'Sabre/DAVACL/MockPrincipalBackend.php';
|
||||
|
||||
class Sabre_CalDAV_CalendarTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @var Sabre_CalDAV_Backend_PDO
|
||||
*/
|
||||
protected $backend;
|
||||
protected $principalBackend;
|
||||
/**
|
||||
* @var Sabre_CalDAV_Calendar
|
||||
*/
|
||||
protected $calendar;
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $calendars;
|
||||
|
||||
function setup() {
|
||||
|
||||
if (!SABRE_HASSQLITE) $this->markTestSkipped('SQLite driver is not available');
|
||||
$this->backend = Sabre_CalDAV_TestUtil::getBackend();
|
||||
$this->principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
|
||||
$this->calendars = $this->backend->getCalendarsForUser('principals/user1');
|
||||
$this->assertEquals(2, count($this->calendars));
|
||||
$this->calendar = new Sabre_CalDAV_Calendar($this->principalBackend, $this->backend, $this->calendars[0]);
|
||||
|
||||
|
||||
}
|
||||
|
||||
function teardown() {
|
||||
|
||||
unset($this->backend);
|
||||
|
||||
}
|
||||
|
||||
function testSimple() {
|
||||
|
||||
$this->assertEquals($this->calendars[0]['uri'], $this->calendar->getName());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSimple
|
||||
*/
|
||||
function testUpdateProperties() {
|
||||
|
||||
$result = $this->calendar->updateProperties(array(
|
||||
'{DAV:}displayname' => 'NewName',
|
||||
));
|
||||
|
||||
$this->assertEquals(true, $result);
|
||||
|
||||
$calendars2 = $this->backend->getCalendarsForUser('principals/user1');
|
||||
$this->assertEquals('NewName',$calendars2[0]['{DAV:}displayname']);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSimple
|
||||
*/
|
||||
function testGetProperties() {
|
||||
|
||||
$question = array(
|
||||
'{DAV:}owner',
|
||||
'{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set',
|
||||
'{urn:ietf:params:xml:ns:caldav}supported-calendar-data',
|
||||
'{urn:ietf:params:xml:ns:caldav}supported-collation-set',
|
||||
);
|
||||
|
||||
$result = $this->calendar->getProperties($question);
|
||||
|
||||
foreach($question as $q) $this->assertArrayHasKey($q,$result);
|
||||
|
||||
$this->assertEquals(array('VEVENT','VTODO'), $result['{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set']->getValue());
|
||||
|
||||
$this->assertTrue($result['{urn:ietf:params:xml:ns:caldav}supported-collation-set'] instanceof Sabre_CalDAV_Property_SupportedCollationSet);
|
||||
|
||||
$this->assertTrue($result['{DAV:}owner'] instanceof Sabre_DAVACL_Property_Principal);
|
||||
$this->assertEquals('principals/user1', $result['{DAV:}owner']->getHref());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_NotFound
|
||||
* @depends testSimple
|
||||
*/
|
||||
function testGetChildNotFound() {
|
||||
|
||||
$this->calendar->getChild('randomname');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSimple
|
||||
*/
|
||||
function testGetChildren() {
|
||||
|
||||
$children = $this->calendar->getChildren();
|
||||
$this->assertEquals(1,count($children));
|
||||
|
||||
$this->assertTrue($children[0] instanceof Sabre_CalDAV_CalendarObject);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testGetChildren
|
||||
*/
|
||||
function testChildExists() {
|
||||
|
||||
$this->assertFalse($this->calendar->childExists('foo'));
|
||||
|
||||
$children = $this->calendar->getChildren();
|
||||
$this->assertTrue($this->calendar->childExists($children[0]->getName()));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_MethodNotAllowed
|
||||
*/
|
||||
function testCreateDirectory() {
|
||||
|
||||
$this->calendar->createDirectory('hello');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_MethodNotAllowed
|
||||
*/
|
||||
function testSetName() {
|
||||
|
||||
$this->calendar->setName('hello');
|
||||
|
||||
}
|
||||
|
||||
function testGetLastModified() {
|
||||
|
||||
$this->assertNull($this->calendar->getLastModified());
|
||||
|
||||
}
|
||||
|
||||
function testCreateFile() {
|
||||
|
||||
$file = fopen('php://memory','r+');
|
||||
fwrite($file,Sabre_CalDAV_TestUtil::getTestCalendarData());
|
||||
rewind($file);
|
||||
|
||||
$this->calendar->createFile('hello',$file);
|
||||
|
||||
$file = $this->calendar->getChild('hello');
|
||||
$this->assertTrue($file instanceof Sabre_CalDAV_CalendarObject);
|
||||
|
||||
}
|
||||
|
||||
function testCreateFileNoSupportedComponents() {
|
||||
|
||||
$file = fopen('php://memory','r+');
|
||||
fwrite($file,Sabre_CalDAV_TestUtil::getTestCalendarData());
|
||||
rewind($file);
|
||||
|
||||
$calendar = new Sabre_CalDAV_Calendar($this->principalBackend, $this->backend, $this->calendars[1]);
|
||||
$calendar->createFile('hello',$file);
|
||||
|
||||
$file = $calendar->getChild('hello');
|
||||
$this->assertTrue($file instanceof Sabre_CalDAV_CalendarObject);
|
||||
|
||||
}
|
||||
|
||||
function testDelete() {
|
||||
|
||||
$this->calendar->delete();
|
||||
|
||||
$calendars = $this->backend->getCalendarsForUser('principals/user1');
|
||||
$this->assertEquals(1, count($calendars));
|
||||
}
|
||||
|
||||
function testGetOwner() {
|
||||
|
||||
$this->assertEquals('principals/user1',$this->calendar->getOwner());
|
||||
|
||||
}
|
||||
|
||||
function testGetGroup() {
|
||||
|
||||
$this->assertNull($this->calendar->getGroup());
|
||||
|
||||
}
|
||||
|
||||
function testGetACL() {
|
||||
|
||||
$expected = array(
|
||||
array(
|
||||
'privilege' => '{DAV:}read',
|
||||
'principal' => 'principals/user1',
|
||||
'protected' => true,
|
||||
),
|
||||
array(
|
||||
'privilege' => '{DAV:}write',
|
||||
'principal' => 'principals/user1',
|
||||
'protected' => true,
|
||||
),
|
||||
array(
|
||||
'privilege' => '{DAV:}read',
|
||||
'principal' => 'principals/user1/calendar-proxy-write',
|
||||
'protected' => true,
|
||||
),
|
||||
array(
|
||||
'privilege' => '{DAV:}write',
|
||||
'principal' => 'principals/user1/calendar-proxy-write',
|
||||
'protected' => true,
|
||||
),
|
||||
array(
|
||||
'privilege' => '{DAV:}read',
|
||||
'principal' => 'principals/user1/calendar-proxy-read',
|
||||
'protected' => true,
|
||||
),
|
||||
array(
|
||||
'privilege' => '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}read-free-busy',
|
||||
'principal' => '{DAV:}authenticated',
|
||||
'protected' => true,
|
||||
),
|
||||
);
|
||||
$this->assertEquals($expected, $this->calendar->getACL());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_MethodNotAllowed
|
||||
*/
|
||||
function testSetACL() {
|
||||
|
||||
$this->calendar->setACL(array());
|
||||
|
||||
}
|
||||
|
||||
function testGetSupportedPrivilegesSet() {
|
||||
|
||||
$result = $this->calendar->getSupportedPrivilegeSet();
|
||||
|
||||
$this->assertEquals(
|
||||
'{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}read-free-busy',
|
||||
$result['aggregates'][0]['aggregates'][2]['privilege']
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
<?php
|
||||
|
||||
use Sabre\VObject;
|
||||
|
||||
/**
|
||||
* This unittests is created to find out why recurring events have wrong DTSTART value
|
||||
*
|
||||
*
|
||||
* @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
|
||||
* @author Evert Pot (http://www.rooftopsolutions.nl/)
|
||||
* @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
|
||||
*/
|
||||
class Sabre_CalDAV_ExpandEventsDTSTARTandDTENDTest extends Sabre_DAVServerTest {
|
||||
|
||||
protected $setupCalDAV = true;
|
||||
|
||||
protected $caldavCalendars = array(
|
||||
array(
|
||||
'id' => 1,
|
||||
'name' => 'Calendar',
|
||||
'principaluri' => 'principals/user1',
|
||||
'uri' => 'calendar1',
|
||||
)
|
||||
);
|
||||
|
||||
protected $caldavCalendarObjects = array(
|
||||
1 => array(
|
||||
'event.ics' => array(
|
||||
'calendardata' => 'BEGIN:VCALENDAR
|
||||
VERSION:2.0
|
||||
BEGIN:VEVENT
|
||||
UID:foobar
|
||||
DTEND;TZID=Europe/Berlin:20120207T191500
|
||||
RRULE:FREQ=DAILY;INTERVAL=1;COUNT=3
|
||||
SUMMARY:RecurringEvents 3 times
|
||||
DTSTART;TZID=Europe/Berlin:20120207T181500
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CREATED:20120207T111900Z
|
||||
UID:foobar
|
||||
DTEND;TZID=Europe/Berlin:20120208T191500
|
||||
SUMMARY:RecurringEvents 3 times OVERWRITTEN
|
||||
DTSTART;TZID=Europe/Berlin:20120208T181500
|
||||
RECURRENCE-ID;TZID=Europe/Berlin:20120208T181500
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
function testExpand() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'HTTP_CONTENT_TYPE' => 'application/xml',
|
||||
'REQUEST_URI' => '/calendars/user1/calendar1',
|
||||
'HTTP_DEPTH' => '1',
|
||||
));
|
||||
|
||||
$request->setBody('<?xml version="1.0" encoding="utf-8" ?>
|
||||
<C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||||
<D:prop>
|
||||
<C:calendar-data>
|
||||
<C:expand start="20120205T230000Z" end="20120212T225959Z"/>
|
||||
</C:calendar-data>
|
||||
<D:getetag/>
|
||||
</D:prop>
|
||||
<C:filter>
|
||||
<C:comp-filter name="VCALENDAR">
|
||||
<C:comp-filter name="VEVENT">
|
||||
<C:time-range start="20120205T230000Z" end="20120212T225959Z"/>
|
||||
</C:comp-filter>
|
||||
</C:comp-filter>
|
||||
</C:filter>
|
||||
</C:calendar-query>');
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
// Everts super awesome xml parser.
|
||||
$body = substr(
|
||||
$response->body,
|
||||
$start = strpos($response->body, 'BEGIN:VCALENDAR'),
|
||||
strpos($response->body, 'END:VCALENDAR') - $start + 13
|
||||
);
|
||||
$body = str_replace(' ','',$body);
|
||||
|
||||
$vObject = VObject\Reader::read($body);
|
||||
|
||||
// check if DTSTARTs and DTENDs are correct
|
||||
foreach ($vObject->VEVENT as $vevent) {
|
||||
/** @var $vevent Sabre\VObject\Component_VEvent */
|
||||
foreach ($vevent->children as $child) {
|
||||
/** @var $child Sabre\VObject\Property */
|
||||
|
||||
if ($child->name == 'DTSTART') {
|
||||
// DTSTART has to be one of three valid values
|
||||
$this->assertContains($child->value, array('20120207T171500Z', '20120208T171500Z', '20120209T171500Z'), 'DTSTART is not a valid value: '.$child->value);
|
||||
} elseif ($child->name == 'DTEND') {
|
||||
// DTEND has to be one of three valid values
|
||||
$this->assertContains($child->value, array('20120207T181500Z', '20120208T181500Z', '20120209T181500Z'), 'DTEND is not a valid value: '.$child->value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,102 @@
|
|||
<?php
|
||||
|
||||
use Sabre\VObject;
|
||||
|
||||
/**
|
||||
* This unittests is created to find out why recurring events have wrong DTSTART value
|
||||
*
|
||||
*
|
||||
* @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
|
||||
* @author Evert Pot (http://www.rooftopsolutions.nl/)
|
||||
* @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
|
||||
*/
|
||||
class Sabre_CalDAV_ExpandEventsDTSTARTandDTENDbyDayTest extends Sabre_DAVServerTest {
|
||||
|
||||
protected $setupCalDAV = true;
|
||||
|
||||
protected $caldavCalendars = array(
|
||||
array(
|
||||
'id' => 1,
|
||||
'name' => 'Calendar',
|
||||
'principaluri' => 'principals/user1',
|
||||
'uri' => 'calendar1',
|
||||
)
|
||||
);
|
||||
|
||||
protected $caldavCalendarObjects = array(
|
||||
1 => array(
|
||||
'event.ics' => array(
|
||||
'calendardata' => 'BEGIN:VCALENDAR
|
||||
VERSION:2.0
|
||||
BEGIN:VEVENT
|
||||
UID:foobar
|
||||
DTEND;TZID=Europe/Berlin:20120207T191500
|
||||
RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,TH
|
||||
SUMMARY:RecurringEvents on tuesday and thursday
|
||||
DTSTART;TZID=Europe/Berlin:20120207T181500
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
function testExpandRecurringByDayEvent() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'HTTP_CONTENT_TYPE' => 'application/xml',
|
||||
'REQUEST_URI' => '/calendars/user1/calendar1',
|
||||
'HTTP_DEPTH' => '1',
|
||||
));
|
||||
|
||||
$request->setBody('<?xml version="1.0" encoding="utf-8" ?>
|
||||
<C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||||
<D:prop>
|
||||
<C:calendar-data>
|
||||
<C:expand start="20120210T230000Z" end="20120217T225959Z"/>
|
||||
</C:calendar-data>
|
||||
<D:getetag/>
|
||||
</D:prop>
|
||||
<C:filter>
|
||||
<C:comp-filter name="VCALENDAR">
|
||||
<C:comp-filter name="VEVENT">
|
||||
<C:time-range start="20120210T230000Z" end="20120217T225959Z"/>
|
||||
</C:comp-filter>
|
||||
</C:comp-filter>
|
||||
</C:filter>
|
||||
</C:calendar-query>');
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
// Everts super awesome xml parser.
|
||||
$body = substr(
|
||||
$response->body,
|
||||
$start = strpos($response->body, 'BEGIN:VCALENDAR'),
|
||||
strpos($response->body, 'END:VCALENDAR') - $start + 13
|
||||
);
|
||||
$body = str_replace(' ','',$body);
|
||||
|
||||
$vObject = VObject\Reader::read($body);
|
||||
|
||||
$this->assertEquals(2, count($vObject->VEVENT));
|
||||
|
||||
// check if DTSTARTs and DTENDs are correct
|
||||
foreach ($vObject->VEVENT as $vevent) {
|
||||
/** @var $vevent Sabre\VObject\Component\VEvent */
|
||||
foreach ($vevent->children as $child) {
|
||||
/** @var $child Sabre\VObject\Property */
|
||||
|
||||
if ($child->name == 'DTSTART') {
|
||||
// DTSTART has to be one of two valid values
|
||||
$this->assertContains($child->value, array('20120214T171500Z', '20120216T171500Z'), 'DTSTART is not a valid value: '.$child->value);
|
||||
} elseif ($child->name == 'DTEND') {
|
||||
// DTEND has to be one of two valid values
|
||||
$this->assertContains($child->value, array('20120214T181500Z', '20120216T181500Z'), 'DTEND is not a valid value: '.$child->value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
101
dav/SabreDAV/tests/Sabre/CalDAV/ExpandEventsDoubleEventsTest.php
Normal file
101
dav/SabreDAV/tests/Sabre/CalDAV/ExpandEventsDoubleEventsTest.php
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
<?php
|
||||
|
||||
use Sabre\VObject;
|
||||
|
||||
/**
|
||||
* This unittests is created to find out why certain events show up twice.
|
||||
*
|
||||
* Hopefully, by the time I'm done with this, I've both found the problem, and
|
||||
* fixed it :)
|
||||
*
|
||||
* @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
|
||||
* @author Evert Pot (http://www.rooftopsolutions.nl/)
|
||||
* @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
|
||||
*/
|
||||
class Sabre_CalDAV_ExpandEventsDoubleEventsTest extends Sabre_DAVServerTest {
|
||||
|
||||
protected $setupCalDAV = true;
|
||||
|
||||
protected $caldavCalendars = array(
|
||||
array(
|
||||
'id' => 1,
|
||||
'name' => 'Calendar',
|
||||
'principaluri' => 'principals/user1',
|
||||
'uri' => 'calendar1',
|
||||
)
|
||||
);
|
||||
|
||||
protected $caldavCalendarObjects = array(
|
||||
1 => array(
|
||||
'event.ics' => array(
|
||||
'calendardata' => 'BEGIN:VCALENDAR
|
||||
VERSION:2.0
|
||||
BEGIN:VEVENT
|
||||
UID:foobar
|
||||
DTEND;TZID=Europe/Berlin:20120207T191500
|
||||
RRULE:FREQ=DAILY;INTERVAL=1;COUNT=3
|
||||
SUMMARY:RecurringEvents 3 times
|
||||
DTSTART;TZID=Europe/Berlin:20120207T181500
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CREATED:20120207T111900Z
|
||||
UID:foobar
|
||||
DTEND;TZID=Europe/Berlin:20120208T191500
|
||||
SUMMARY:RecurringEvents 3 times OVERWRITTEN
|
||||
DTSTART;TZID=Europe/Berlin:20120208T181500
|
||||
RECURRENCE-ID;TZID=Europe/Berlin:20120208T181500
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
function testExpand() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'HTTP_CONTENT_TYPE' => 'application/xml',
|
||||
'REQUEST_URI' => '/calendars/user1/calendar1',
|
||||
'HTTP_DEPTH' => '1',
|
||||
));
|
||||
|
||||
$request->setBody('<?xml version="1.0" encoding="utf-8" ?>
|
||||
<C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||||
<D:prop>
|
||||
<C:calendar-data>
|
||||
<C:expand start="20120205T230000Z" end="20120212T225959Z"/>
|
||||
</C:calendar-data>
|
||||
<D:getetag/>
|
||||
</D:prop>
|
||||
<C:filter>
|
||||
<C:comp-filter name="VCALENDAR">
|
||||
<C:comp-filter name="VEVENT">
|
||||
<C:time-range start="20120205T230000Z" end="20120212T225959Z"/>
|
||||
</C:comp-filter>
|
||||
</C:comp-filter>
|
||||
</C:filter>
|
||||
</C:calendar-query>');
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
// Everts super awesome xml parser.
|
||||
$body = substr(
|
||||
$response->body,
|
||||
$start = strpos($response->body, 'BEGIN:VCALENDAR'),
|
||||
strpos($response->body, 'END:VCALENDAR') - $start + 13
|
||||
);
|
||||
$body = str_replace(' ','',$body);
|
||||
|
||||
$vObject = VObject\Reader::read($body);
|
||||
|
||||
// We only expect 3 events
|
||||
$this->assertEquals(3, count($vObject->VEVENT),'We got 6 events instead of 3. Output: ' . $body);
|
||||
|
||||
// TZID should be gone
|
||||
$this->assertFalse(isset($vObject->VEVENT->DTSTART['TZID']));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
155
dav/SabreDAV/tests/Sabre/CalDAV/FreeBusyReportTest.php
Normal file
155
dav/SabreDAV/tests/Sabre/CalDAV/FreeBusyReportTest.php
Normal file
|
|
@ -0,0 +1,155 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/CalDAV/Backend/Mock.php';
|
||||
require_once 'Sabre/DAVACL/MockPrincipalBackend.php';
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
|
||||
class Sabre_CalDAV_FreeBusyReportTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @var Sabre_CalDAV_Plugin
|
||||
*/
|
||||
protected $plugin;
|
||||
/**
|
||||
* @var Sabre_DAV_Server
|
||||
*/
|
||||
protected $server;
|
||||
|
||||
function setUp() {
|
||||
|
||||
$obj1 = <<<ics
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VEVENT
|
||||
DTSTART:20111005T120000Z
|
||||
DURATION:PT1H
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
ics;
|
||||
$obj2 = fopen('php://memory','r+');
|
||||
fwrite($obj2,<<<ics
|
||||
BEGIN:VCALENDAR
|
||||
BEGIN:VEVENT
|
||||
DTSTART:20121005T120000Z
|
||||
DURATION:PT1H
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
ics
|
||||
);
|
||||
rewind($obj2);
|
||||
|
||||
$calendarData = array(
|
||||
1 => array(
|
||||
'obj1' => array(
|
||||
'calendarid' => 1,
|
||||
'uri' => 'event1.ics',
|
||||
'calendardata' => $obj1,
|
||||
),
|
||||
'obj2' => array(
|
||||
'calendarid' => 1,
|
||||
'uri' => 'event2.ics',
|
||||
'calendardata' => $obj2
|
||||
)
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
$caldavBackend = new Sabre_CalDAV_Backend_Mock(array(), $calendarData);
|
||||
$principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
|
||||
$calendar = new Sabre_CalDAV_Calendar($principalBackend,$caldavBackend, array(
|
||||
'id' => 1,
|
||||
'uri' => 'calendar',
|
||||
'principaluri' => 'principals/user1',
|
||||
));
|
||||
|
||||
$this->server = new Sabre_DAV_Server(array($calendar));
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_URI' => '/calendar',
|
||||
));
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->httpResponse = new Sabre_HTTP_ResponseMock();
|
||||
|
||||
$this->plugin = new Sabre_CalDAV_Plugin();
|
||||
$this->server->addPlugin($this->plugin);
|
||||
$this->server->addPlugin(new Sabre_DAVACL_Plugin());
|
||||
|
||||
}
|
||||
|
||||
function testFreeBusyReport() {
|
||||
|
||||
$reportXML = <<<XML
|
||||
<?xml version="1.0"?>
|
||||
<c:free-busy-query xmlns:c="urn:ietf:params:xml:ns:caldav">
|
||||
<c:time-range start="20111001T000000Z" end="20111101T000000Z" />
|
||||
</c:free-busy-query>
|
||||
XML;
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($reportXML);
|
||||
$this->plugin->report('{urn:ietf:params:xml:ns:caldav}free-busy-query', $dom);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK', $this->server->httpResponse->status);
|
||||
$this->assertEquals('text/calendar', $this->server->httpResponse->headers['Content-Type']);
|
||||
$this->assertTrue(strpos($this->server->httpResponse->body,'BEGIN:VFREEBUSY')!==false);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_BadRequest
|
||||
*/
|
||||
function testFreeBusyReportNoTimeRange() {
|
||||
|
||||
$reportXML = <<<XML
|
||||
<?xml version="1.0"?>
|
||||
<c:free-busy-query xmlns:c="urn:ietf:params:xml:ns:caldav">
|
||||
</c:free-busy-query>
|
||||
XML;
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($reportXML);
|
||||
$this->plugin->report('{urn:ietf:params:xml:ns:caldav}free-busy-query', $dom);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_NotImplemented
|
||||
*/
|
||||
function testFreeBusyReportWrongNode() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_URI' => '/',
|
||||
));
|
||||
$this->server->httpRequest = $request;
|
||||
|
||||
$reportXML = <<<XML
|
||||
<?xml version="1.0"?>
|
||||
<c:free-busy-query xmlns:c="urn:ietf:params:xml:ns:caldav">
|
||||
<c:time-range start="20111001T000000Z" end="20111101T000000Z" />
|
||||
</c:free-busy-query>
|
||||
XML;
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($reportXML);
|
||||
$this->plugin->report('{urn:ietf:params:xml:ns:caldav}free-busy-query', $dom);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception
|
||||
*/
|
||||
function testFreeBusyReportNoACLPlugin() {
|
||||
|
||||
$this->server = new Sabre_DAV_Server();
|
||||
$this->plugin = new Sabre_CalDAV_Plugin();
|
||||
$this->server->addPlugin($this->plugin);
|
||||
|
||||
$reportXML = <<<XML
|
||||
<?xml version="1.0"?>
|
||||
<c:free-busy-query xmlns:c="urn:ietf:params:xml:ns:caldav">
|
||||
<c:time-range start="20111001T000000Z" end="20111101T000000Z" />
|
||||
</c:free-busy-query>
|
||||
XML;
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($reportXML);
|
||||
$this->plugin->report('{urn:ietf:params:xml:ns:caldav}free-busy-query', $dom);
|
||||
|
||||
}
|
||||
}
|
||||
95
dav/SabreDAV/tests/Sabre/CalDAV/GetEventsByTimerangeTest.php
Normal file
95
dav/SabreDAV/tests/Sabre/CalDAV/GetEventsByTimerangeTest.php
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
<?php
|
||||
|
||||
use Sabre\VObject;
|
||||
|
||||
/**
|
||||
* This unittest is created to check if queries for time-range include the start timestamp or not
|
||||
*
|
||||
*
|
||||
* @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
|
||||
* @author Evert Pot (http://www.rooftopsolutions.nl/)
|
||||
* @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
|
||||
*/
|
||||
class Sabre_CalDAV_GetEventsByTimerangeTest extends Sabre_DAVServerTest {
|
||||
|
||||
protected $setupCalDAV = true;
|
||||
|
||||
protected $caldavCalendars = array(
|
||||
array(
|
||||
'id' => 1,
|
||||
'name' => 'Calendar',
|
||||
'principaluri' => 'principals/user1',
|
||||
'uri' => 'calendar1',
|
||||
)
|
||||
);
|
||||
|
||||
protected $caldavCalendarObjects = array(
|
||||
1 => array(
|
||||
'event.ics' => array(
|
||||
'calendardata' => 'BEGIN:VCALENDAR
|
||||
VERSION:2.0
|
||||
BEGIN:VEVENT
|
||||
CREATED:20120313T142342Z
|
||||
UID:171EBEFC-C951-499D-B234-7BA7D677B45D
|
||||
DTEND;TZID=Europe/Berlin:20120227T000000
|
||||
TRANSP:OPAQUE
|
||||
SUMMARY:Monday 0h
|
||||
DTSTART;TZID=Europe/Berlin:20120227T000000
|
||||
DTSTAMP:20120313T142416Z
|
||||
SEQUENCE:4
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
function testQueryTimerange() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'HTTP_CONTENT_TYPE' => 'application/xml',
|
||||
'REQUEST_URI' => '/calendars/user1/calendar1',
|
||||
'HTTP_DEPTH' => '1',
|
||||
));
|
||||
|
||||
$request->setBody('<?xml version="1.0" encoding="utf-8" ?>
|
||||
<C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||||
<D:prop>
|
||||
<C:calendar-data>
|
||||
<C:expand start="20120226T230000Z" end="20120228T225959Z"/>
|
||||
</C:calendar-data>
|
||||
<D:getetag/>
|
||||
</D:prop>
|
||||
<C:filter>
|
||||
<C:comp-filter name="VCALENDAR">
|
||||
<C:comp-filter name="VEVENT">
|
||||
<C:time-range start="20120226T230000Z" end="20120228T225959Z"/>
|
||||
</C:comp-filter>
|
||||
</C:comp-filter>
|
||||
</C:filter>
|
||||
</C:calendar-query>');
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
if (strpos($response->body, 'BEGIN:VCALENDAR') === false) {
|
||||
$this->fail('Got no events instead of 1. Output: '.$response->body);
|
||||
}
|
||||
|
||||
// Everts super awesome xml parser.
|
||||
$body = substr(
|
||||
$response->body,
|
||||
$start = strpos($response->body, 'BEGIN:VCALENDAR'),
|
||||
strpos($response->body, 'END:VCALENDAR') - $start + 13
|
||||
);
|
||||
$body = str_replace(' ','',$body);
|
||||
|
||||
$vObject = VObject\Reader::read($body);
|
||||
|
||||
// We expect 1 event
|
||||
$this->assertEquals(1, count($vObject->VEVENT), 'We got 0 events instead of 1. Output: ' . $body);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
226
dav/SabreDAV/tests/Sabre/CalDAV/ICSExportPluginTest.php
Normal file
226
dav/SabreDAV/tests/Sabre/CalDAV/ICSExportPluginTest.php
Normal file
|
|
@ -0,0 +1,226 @@
|
|||
<?php
|
||||
|
||||
use Sabre\VObject;
|
||||
|
||||
require_once 'Sabre/CalDAV/TestUtil.php';
|
||||
require_once 'Sabre/DAV/Auth/MockBackend.php';
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
|
||||
class Sabre_CalDAV_ICSExportPluginTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testInit() {
|
||||
|
||||
$p = new Sabre_CalDAV_ICSExportPlugin();
|
||||
$s = new Sabre_DAV_Server();
|
||||
$s->addPlugin($p);
|
||||
|
||||
}
|
||||
|
||||
function testBeforeMethod() {
|
||||
|
||||
if (!SABRE_HASSQLITE) $this->markTestSkipped('SQLite driver is not available');
|
||||
$cbackend = Sabre_CalDAV_TestUtil::getBackend();
|
||||
$pbackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
|
||||
$props = array(
|
||||
'uri'=>'UUID-123467',
|
||||
'principaluri' => 'admin',
|
||||
'id' => 1,
|
||||
);
|
||||
$tree = array(
|
||||
new Sabre_CalDAV_Calendar($pbackend,$cbackend,$props),
|
||||
);
|
||||
|
||||
$p = new Sabre_CalDAV_ICSExportPlugin();
|
||||
|
||||
$s = new Sabre_DAV_Server($tree);
|
||||
$s->addPlugin($p);
|
||||
$s->addPlugin(new Sabre_CalDAV_Plugin());
|
||||
|
||||
$h = new Sabre_HTTP_Request(array(
|
||||
'QUERY_STRING' => 'export',
|
||||
));
|
||||
|
||||
$s->httpRequest = $h;
|
||||
$s->httpResponse = new Sabre_HTTP_ResponseMock();
|
||||
|
||||
$this->assertFalse($p->beforeMethod('GET','UUID-123467?export'));
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$s->httpResponse->status);
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'text/calendar',
|
||||
), $s->httpResponse->headers);
|
||||
|
||||
$obj = VObject\Reader::read($s->httpResponse->body);
|
||||
|
||||
$this->assertEquals(5,count($obj->children()));
|
||||
$this->assertEquals(1,count($obj->VERSION));
|
||||
$this->assertEquals(1,count($obj->CALSCALE));
|
||||
$this->assertEquals(1,count($obj->PRODID));
|
||||
$this->assertTrue(strpos((string)$obj->PRODID, Sabre_DAV_Version::VERSION)!==false);
|
||||
$this->assertEquals(1,count($obj->VTIMEZONE));
|
||||
$this->assertEquals(1,count($obj->VEVENT));
|
||||
|
||||
}
|
||||
function testBeforeMethodNoVersion() {
|
||||
|
||||
if (!SABRE_HASSQLITE) $this->markTestSkipped('SQLite driver is not available');
|
||||
$cbackend = Sabre_CalDAV_TestUtil::getBackend();
|
||||
$pbackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
|
||||
$props = array(
|
||||
'uri'=>'UUID-123467',
|
||||
'principaluri' => 'admin',
|
||||
'id' => 1,
|
||||
);
|
||||
$tree = array(
|
||||
new Sabre_CalDAV_Calendar($pbackend,$cbackend,$props),
|
||||
);
|
||||
|
||||
$p = new Sabre_CalDAV_ICSExportPlugin();
|
||||
|
||||
$s = new Sabre_DAV_Server($tree);
|
||||
|
||||
$s->addPlugin($p);
|
||||
$s->addPlugin(new Sabre_CalDAV_Plugin());
|
||||
|
||||
$h = new Sabre_HTTP_Request(array(
|
||||
'QUERY_STRING' => 'export',
|
||||
));
|
||||
|
||||
$s->httpRequest = $h;
|
||||
$s->httpResponse = new Sabre_HTTP_ResponseMock();
|
||||
|
||||
Sabre_DAV_Server::$exposeVersion = false;
|
||||
$this->assertFalse($p->beforeMethod('GET','UUID-123467?export'));
|
||||
Sabre_DAV_Server::$exposeVersion = true;
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$s->httpResponse->status);
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'text/calendar',
|
||||
), $s->httpResponse->headers);
|
||||
|
||||
$obj = VObject\Reader::read($s->httpResponse->body);
|
||||
|
||||
$this->assertEquals(5,count($obj->children()));
|
||||
$this->assertEquals(1,count($obj->VERSION));
|
||||
$this->assertEquals(1,count($obj->CALSCALE));
|
||||
$this->assertEquals(1,count($obj->PRODID));
|
||||
$this->assertFalse(strpos((string)$obj->PRODID, Sabre_DAV_Version::VERSION)!==false);
|
||||
$this->assertEquals(1,count($obj->VTIMEZONE));
|
||||
$this->assertEquals(1,count($obj->VEVENT));
|
||||
|
||||
}
|
||||
|
||||
function testBeforeMethodNoGET() {
|
||||
|
||||
$p = new Sabre_CalDAV_ICSExportPlugin();
|
||||
|
||||
$s = new Sabre_DAV_Server();
|
||||
$s->addPlugin($p);
|
||||
|
||||
$this->assertNull($p->beforeMethod('POST','UUID-123467?export'));
|
||||
|
||||
}
|
||||
|
||||
function testBeforeMethodNoExport() {
|
||||
|
||||
$p = new Sabre_CalDAV_ICSExportPlugin();
|
||||
|
||||
$s = new Sabre_DAV_Server();
|
||||
$s->addPlugin($p);
|
||||
|
||||
$this->assertNull($p->beforeMethod('GET','UUID-123467'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAVACL_Exception_NeedPrivileges
|
||||
*/
|
||||
function testACLIntegrationBlocked() {
|
||||
|
||||
if (!SABRE_HASSQLITE) $this->markTestSkipped('SQLite driver is not available');
|
||||
$cbackend = Sabre_CalDAV_TestUtil::getBackend();
|
||||
$pbackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
|
||||
$props = array(
|
||||
'uri'=>'UUID-123467',
|
||||
'principaluri' => 'admin',
|
||||
'id' => 1,
|
||||
);
|
||||
$tree = array(
|
||||
new Sabre_CalDAV_Calendar($pbackend,$cbackend,$props),
|
||||
);
|
||||
|
||||
$p = new Sabre_CalDAV_ICSExportPlugin();
|
||||
|
||||
$s = new Sabre_DAV_Server($tree);
|
||||
$s->addPlugin($p);
|
||||
$s->addPlugin(new Sabre_CalDAV_Plugin());
|
||||
$s->addPlugin(new Sabre_DAVACL_Plugin());
|
||||
|
||||
$h = new Sabre_HTTP_Request(array(
|
||||
'QUERY_STRING' => 'export',
|
||||
));
|
||||
|
||||
$s->httpRequest = $h;
|
||||
$s->httpResponse = new Sabre_HTTP_ResponseMock();
|
||||
|
||||
$p->beforeMethod('GET','UUID-123467?export');
|
||||
|
||||
}
|
||||
|
||||
function testACLIntegrationNotBlocked() {
|
||||
|
||||
if (!SABRE_HASSQLITE) $this->markTestSkipped('SQLite driver is not available');
|
||||
$cbackend = Sabre_CalDAV_TestUtil::getBackend();
|
||||
$pbackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
|
||||
$props = array(
|
||||
'uri'=>'UUID-123467',
|
||||
'principaluri' => 'admin',
|
||||
'id' => 1,
|
||||
);
|
||||
$tree = array(
|
||||
new Sabre_CalDAV_Calendar($pbackend,$cbackend,$props),
|
||||
new Sabre_DAVACL_PrincipalCollection($pbackend),
|
||||
);
|
||||
|
||||
$p = new Sabre_CalDAV_ICSExportPlugin();
|
||||
|
||||
$s = new Sabre_DAV_Server($tree);
|
||||
$s->addPlugin($p);
|
||||
$s->addPlugin(new Sabre_CalDAV_Plugin());
|
||||
$s->addPlugin(new Sabre_DAVACL_Plugin());
|
||||
$s->addPlugin(new Sabre_DAV_Auth_Plugin(new Sabre_DAV_Auth_MockBackend(),'SabreDAV'));
|
||||
|
||||
// Forcing login
|
||||
$s->getPlugin('acl')->adminPrincipals = array('principals/admin');
|
||||
|
||||
$h = new Sabre_HTTP_Request(array(
|
||||
'QUERY_STRING' => 'export',
|
||||
'REQUEST_URI' => '/UUID-123467',
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
));
|
||||
|
||||
$s->httpRequest = $h;
|
||||
$s->httpResponse = new Sabre_HTTP_ResponseMock();
|
||||
|
||||
$s->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$s->httpResponse->status,'Invalid status received. Response body: '. $s->httpResponse->body);
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'text/calendar',
|
||||
), $s->httpResponse->headers);
|
||||
|
||||
$obj = VObject\Reader::read($s->httpResponse->body);
|
||||
|
||||
$this->assertEquals(5,count($obj->children()));
|
||||
$this->assertEquals(1,count($obj->VERSION));
|
||||
$this->assertEquals(1,count($obj->CALSCALE));
|
||||
$this->assertEquals(1,count($obj->PRODID));
|
||||
$this->assertEquals(1,count($obj->VTIMEZONE));
|
||||
$this->assertEquals(1,count($obj->VEVENT));
|
||||
|
||||
}
|
||||
}
|
||||
61
dav/SabreDAV/tests/Sabre/CalDAV/Issue166Test.php
Normal file
61
dav/SabreDAV/tests/Sabre/CalDAV/Issue166Test.php
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
<?php
|
||||
|
||||
use Sabre\VObject;
|
||||
|
||||
class Sabre_CalDAV_Issue166Test extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testFlaw() {
|
||||
|
||||
$input = <<<HI
|
||||
BEGIN:VCALENDAR
|
||||
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:Asia/Pyongyang
|
||||
X-LIC-LOCATION:Asia/Pyongyang
|
||||
BEGIN:STANDARD
|
||||
TZOFFSETFROM:+0900
|
||||
TZOFFSETTO:+0900
|
||||
TZNAME:KST
|
||||
DTSTART:19700101T000000
|
||||
END:STANDARD
|
||||
END:VTIMEZONE
|
||||
BEGIN:VEVENT
|
||||
CREATED:20111118T010857Z
|
||||
LAST-MODIFIED:20111118T010937Z
|
||||
DTSTAMP:20111118T010937Z
|
||||
UID:a03245b3-9947-9a48-a088-863c74e0fdd8
|
||||
SUMMARY:New Event
|
||||
RRULE:FREQ=YEARLY
|
||||
DTSTART;TZID=Asia/Pyongyang:19960102T111500
|
||||
DTEND;TZID=Asia/Pyongyang:19960102T121500
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
HI;
|
||||
|
||||
$validator = new Sabre_CalDAV_CalendarQueryValidator();
|
||||
|
||||
$filters = array(
|
||||
'name' => 'VCALENDAR',
|
||||
'comp-filters' => array(
|
||||
array(
|
||||
'name' => 'VEVENT',
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => array(
|
||||
'start' => new DateTime('2011-12-01'),
|
||||
'end' => new DateTime('2012-02-01'),
|
||||
),
|
||||
),
|
||||
),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => null,
|
||||
);
|
||||
$input = VObject\Reader::read($input);
|
||||
$this->assertTrue($validator->validate($input,$filters));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
133
dav/SabreDAV/tests/Sabre/CalDAV/Issue172Test.php
Normal file
133
dav/SabreDAV/tests/Sabre/CalDAV/Issue172Test.php
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
<?php
|
||||
|
||||
use Sabre\VObject;
|
||||
|
||||
class Sabre_CalDAV_Issue172Test extends PHPUnit_Framework_TestCase {
|
||||
|
||||
// DateTimeZone() native name: America/Los_Angeles (GMT-8 in January)
|
||||
function testBuiltInTimezoneName() {
|
||||
$input = <<<HI
|
||||
BEGIN:VCALENDAR
|
||||
VERSION:2.0
|
||||
BEGIN:VEVENT
|
||||
DTSTART;TZID=America/Los_Angeles:20120118T204500
|
||||
DTEND;TZID=America/Los_Angeles:20120118T214500
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
HI;
|
||||
$validator = new Sabre_CalDAV_CalendarQueryValidator();
|
||||
$filters = array(
|
||||
'name' => 'VCALENDAR',
|
||||
'comp-filters' => array(
|
||||
array(
|
||||
'name' => 'VEVENT',
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => array(
|
||||
'start' => new DateTime('2012-01-18 21:00:00 GMT-08:00'),
|
||||
'end' => new DateTime('2012-01-18 21:00:00 GMT-08:00'),
|
||||
),
|
||||
),
|
||||
),
|
||||
'prop-filters' => array(),
|
||||
);
|
||||
$input = VObject\Reader::read($input);
|
||||
$this->assertTrue($validator->validate($input,$filters));
|
||||
}
|
||||
|
||||
// Pacific Standard Time, translates to America/Los_Angeles (GMT-8 in January)
|
||||
function testOutlookTimezoneName() {
|
||||
$input = <<<HI
|
||||
BEGIN:VCALENDAR
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:Pacific Standard Time
|
||||
BEGIN:STANDARD
|
||||
DTSTART:16010101T030000
|
||||
TZOFFSETFROM:+0200
|
||||
TZOFFSETTO:+0100
|
||||
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
||||
END:STANDARD
|
||||
BEGIN:DAYLIGHT
|
||||
DTSTART:16010101T020000
|
||||
TZOFFSETFROM:+0100
|
||||
TZOFFSETTO:+0200
|
||||
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
|
||||
END:DAYLIGHT
|
||||
END:VTIMEZONE
|
||||
BEGIN:VEVENT
|
||||
DTSTART;TZID=Pacific Standard Time:20120113T100000
|
||||
DTEND;TZID=Pacific Standard Time:20120113T110000
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
HI;
|
||||
$validator = new Sabre_CalDAV_CalendarQueryValidator();
|
||||
$filters = array(
|
||||
'name' => 'VCALENDAR',
|
||||
'comp-filters' => array(
|
||||
array(
|
||||
'name' => 'VEVENT',
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => array(
|
||||
'start' => new DateTime('2012-01-13 10:30:00 GMT-08:00'),
|
||||
'end' => new DateTime('2012-01-13 10:30:00 GMT-08:00'),
|
||||
),
|
||||
),
|
||||
),
|
||||
'prop-filters' => array(),
|
||||
);
|
||||
$input = VObject\Reader::read($input);
|
||||
$this->assertTrue($validator->validate($input,$filters));
|
||||
}
|
||||
|
||||
// X-LIC-LOCATION, translates to America/Los_Angeles (GMT-8 in January)
|
||||
function testLibICalLocationName() {
|
||||
$input = <<<HI
|
||||
BEGIN:VCALENDAR
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:My own timezone name
|
||||
X-LIC-LOCATION:America/Los_Angeles
|
||||
BEGIN:STANDARD
|
||||
DTSTART:16010101T030000
|
||||
TZOFFSETFROM:+0200
|
||||
TZOFFSETTO:+0100
|
||||
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
||||
END:STANDARD
|
||||
BEGIN:DAYLIGHT
|
||||
DTSTART:16010101T020000
|
||||
TZOFFSETFROM:+0100
|
||||
TZOFFSETTO:+0200
|
||||
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
|
||||
END:DAYLIGHT
|
||||
END:VTIMEZONE
|
||||
BEGIN:VEVENT
|
||||
DTSTART;TZID=My own timezone name:20120113T100000
|
||||
DTEND;TZID=My own timezone name:20120113T110000
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
HI;
|
||||
$validator = new Sabre_CalDAV_CalendarQueryValidator();
|
||||
$filters = array(
|
||||
'name' => 'VCALENDAR',
|
||||
'comp-filters' => array(
|
||||
array(
|
||||
'name' => 'VEVENT',
|
||||
'comp-filters' => array(),
|
||||
'prop-filters' => array(),
|
||||
'is-not-defined' => false,
|
||||
'time-range' => array(
|
||||
'start' => new DateTime('2012-01-13 10:30:00 GMT-08:00'),
|
||||
'end' => new DateTime('2012-01-13 10:30:00 GMT-08:00'),
|
||||
),
|
||||
),
|
||||
),
|
||||
'prop-filters' => array(),
|
||||
);
|
||||
$input = VObject\Reader::read($input);
|
||||
$this->assertTrue($validator->validate($input,$filters));
|
||||
}
|
||||
}
|
||||
137
dav/SabreDAV/tests/Sabre/CalDAV/Issue203Test.php
Normal file
137
dav/SabreDAV/tests/Sabre/CalDAV/Issue203Test.php
Normal file
|
|
@ -0,0 +1,137 @@
|
|||
<?php
|
||||
|
||||
use Sabre\VObject;
|
||||
|
||||
/**
|
||||
* This unittest is created to find out why an overwritten DAILY event has wrong DTSTART, DTEND, SUMMARY and RECURRENCEID
|
||||
*
|
||||
*
|
||||
* @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
|
||||
* @author Evert Pot (http://www.rooftopsolutions.nl/)
|
||||
* @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
|
||||
*/
|
||||
class Sabre_CalDAV_Issue203Test extends Sabre_DAVServerTest {
|
||||
|
||||
protected $setupCalDAV = true;
|
||||
|
||||
protected $caldavCalendars = array(
|
||||
array(
|
||||
'id' => 1,
|
||||
'name' => 'Calendar',
|
||||
'principaluri' => 'principals/user1',
|
||||
'uri' => 'calendar1',
|
||||
)
|
||||
);
|
||||
|
||||
protected $caldavCalendarObjects = array(
|
||||
1 => array(
|
||||
'event.ics' => array(
|
||||
'calendardata' => 'BEGIN:VCALENDAR
|
||||
VERSION:2.0
|
||||
BEGIN:VEVENT
|
||||
UID:20120330T155305CEST-6585fBUVgV
|
||||
DTSTAMP:20120330T135305Z
|
||||
DTSTART;TZID=Europe/Berlin:20120326T155200
|
||||
DTEND;TZID=Europe/Berlin:20120326T165200
|
||||
RRULE:FREQ=DAILY;COUNT=2;INTERVAL=1
|
||||
SUMMARY:original summary
|
||||
TRANSP:OPAQUE
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
UID:20120330T155305CEST-6585fBUVgV
|
||||
DTSTAMP:20120330T135352Z
|
||||
DESCRIPTION:
|
||||
DTSTART;TZID=Europe/Berlin:20120328T155200
|
||||
DTEND;TZID=Europe/Berlin:20120328T165200
|
||||
RECURRENCE-ID;TZID=Europe/Berlin:20120327T155200
|
||||
SEQUENCE:1
|
||||
SUMMARY:overwritten summary
|
||||
TRANSP:OPAQUE
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
function testIssue203() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'HTTP_CONTENT_TYPE' => 'application/xml',
|
||||
'REQUEST_URI' => '/calendars/user1/calendar1',
|
||||
'HTTP_DEPTH' => '1',
|
||||
));
|
||||
|
||||
$request->setBody('<?xml version="1.0" encoding="utf-8" ?>
|
||||
<C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||||
<D:prop>
|
||||
<C:calendar-data>
|
||||
<C:expand start="20120325T220000Z" end="20120401T215959Z"/>
|
||||
</C:calendar-data>
|
||||
<D:getetag/>
|
||||
</D:prop>
|
||||
<C:filter>
|
||||
<C:comp-filter name="VCALENDAR">
|
||||
<C:comp-filter name="VEVENT">
|
||||
<C:time-range start="20120325T220000Z" end="20120401T215959Z"/>
|
||||
</C:comp-filter>
|
||||
</C:comp-filter>
|
||||
</C:filter>
|
||||
</C:calendar-query>');
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
// Everts super awesome xml parser.
|
||||
$body = substr(
|
||||
$response->body,
|
||||
$start = strpos($response->body, 'BEGIN:VCALENDAR'),
|
||||
strpos($response->body, 'END:VCALENDAR') - $start + 13
|
||||
);
|
||||
$body = str_replace(' ','',$body);
|
||||
|
||||
$vObject = VObject\Reader::read($body);
|
||||
|
||||
$this->assertEquals(2, count($vObject->VEVENT));
|
||||
|
||||
|
||||
$expectedEvents = array(
|
||||
array(
|
||||
'DTSTART' => '20120326T135200Z',
|
||||
'DTEND' => '20120326T145200Z',
|
||||
'SUMMARY' => 'original summary',
|
||||
),
|
||||
array(
|
||||
'DTSTART' => '20120328T135200Z',
|
||||
'DTEND' => '20120328T145200Z',
|
||||
'SUMMARY' => 'overwritten summary',
|
||||
'RECURRENCE-ID' => '20120327T135200Z',
|
||||
)
|
||||
);
|
||||
|
||||
// try to match agains $expectedEvents array
|
||||
foreach ($expectedEvents as $expectedEvent) {
|
||||
|
||||
$matching = false;
|
||||
|
||||
foreach ($vObject->VEVENT as $vevent) {
|
||||
/** @var $vevent Sabre\VObject\Component\VEvent */
|
||||
|
||||
foreach ($vevent->children as $child) {
|
||||
/** @var $child Sabre\VObject\Property */
|
||||
|
||||
if (isset($expectedEvent[$child->name])) {
|
||||
if ($expectedEvent[$child->name] != $child->value) {
|
||||
continue 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$matching = true;
|
||||
break;
|
||||
}
|
||||
|
||||
$this->assertTrue($matching, 'Did not find the following event in the response: '.var_export($expectedEvent, true));
|
||||
}
|
||||
}
|
||||
}
|
||||
96
dav/SabreDAV/tests/Sabre/CalDAV/Issue205Test.php
Normal file
96
dav/SabreDAV/tests/Sabre/CalDAV/Issue205Test.php
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
<?php
|
||||
|
||||
use Sabre\VObject;
|
||||
|
||||
/**
|
||||
* This unittest is created to check if a VALARM TRIGGER of PT0S is supported
|
||||
*
|
||||
*
|
||||
* @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
|
||||
* @author Evert Pot (http://www.rooftopsolutions.nl/)
|
||||
* @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
|
||||
*/
|
||||
class Sabre_CalDAV_Issue205Test extends Sabre_DAVServerTest {
|
||||
|
||||
protected $setupCalDAV = true;
|
||||
|
||||
protected $caldavCalendars = array(
|
||||
array(
|
||||
'id' => 1,
|
||||
'name' => 'Calendar',
|
||||
'principaluri' => 'principals/user1',
|
||||
'uri' => 'calendar1',
|
||||
)
|
||||
);
|
||||
|
||||
protected $caldavCalendarObjects = array(
|
||||
1 => array(
|
||||
'event.ics' => array(
|
||||
'calendardata' => 'BEGIN:VCALENDAR
|
||||
VERSION:2.0
|
||||
BEGIN:VEVENT
|
||||
UID:20120330T155305CEST-6585fBUVgV
|
||||
DTSTAMP:20120330T135305Z
|
||||
DTSTART;TZID=Europe/Berlin:20120326T155200
|
||||
DTEND;TZID=Europe/Berlin:20120326T165200
|
||||
SUMMARY:original summary
|
||||
TRANSP:OPAQUE
|
||||
BEGIN:VALARM
|
||||
ACTION:AUDIO
|
||||
ATTACH;VALUE=URI:Basso
|
||||
TRIGGER:PT0S
|
||||
END:VALARM
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
function testIssue205() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'HTTP_CONTENT_TYPE' => 'application/xml',
|
||||
'REQUEST_URI' => '/calendars/user1/calendar1',
|
||||
'HTTP_DEPTH' => '1',
|
||||
));
|
||||
|
||||
$request->setBody('<?xml version="1.0" encoding="utf-8" ?>
|
||||
<C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||||
<D:prop>
|
||||
<C:calendar-data>
|
||||
<C:expand start="20120325T220000Z" end="20120401T215959Z"/>
|
||||
</C:calendar-data>
|
||||
<D:getetag/>
|
||||
</D:prop>
|
||||
<C:filter>
|
||||
<C:comp-filter name="VCALENDAR">
|
||||
<C:comp-filter name="VEVENT">
|
||||
<C:comp-filter name="VALARM">
|
||||
<C:time-range start="20120325T220000Z" end="20120401T215959Z"/>
|
||||
</C:comp-filter>
|
||||
</C:comp-filter>
|
||||
</C:comp-filter>
|
||||
</C:filter>
|
||||
</C:calendar-query>');
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
$this->assertFalse(strpos($response->body, '<s:exception>Exception</s:exception>'), 'Exception occurred: ' . $response->body);
|
||||
$this->assertFalse(strpos($response->body, 'Unknown or bad format'), 'DateTime unknown format Exception: ' . $response->body);
|
||||
|
||||
// Everts super awesome xml parser.
|
||||
$body = substr(
|
||||
$response->body,
|
||||
$start = strpos($response->body, 'BEGIN:VCALENDAR'),
|
||||
strpos($response->body, 'END:VCALENDAR') - $start + 13
|
||||
);
|
||||
$body = str_replace(' ','',$body);
|
||||
|
||||
$vObject = VObject\Reader::read($body);
|
||||
|
||||
$this->assertEquals(1, count($vObject->VEVENT));
|
||||
|
||||
}
|
||||
}
|
||||
86
dav/SabreDAV/tests/Sabre/CalDAV/Issue211Test.php
Normal file
86
dav/SabreDAV/tests/Sabre/CalDAV/Issue211Test.php
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* This unittest is created to check for an endless loop in Sabre_CalDAV_CalendarQueryValidator
|
||||
*
|
||||
*
|
||||
* @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
|
||||
* @author Evert Pot (http://www.rooftopsolutions.nl/)
|
||||
* @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
|
||||
*/
|
||||
class Sabre_CalDAV_Issue211Test extends Sabre_DAVServerTest {
|
||||
|
||||
protected $setupCalDAV = true;
|
||||
|
||||
protected $caldavCalendars = array(
|
||||
array(
|
||||
'id' => 1,
|
||||
'name' => 'Calendar',
|
||||
'principaluri' => 'principals/user1',
|
||||
'uri' => 'calendar1',
|
||||
)
|
||||
);
|
||||
|
||||
protected $caldavCalendarObjects = array(
|
||||
1 => array(
|
||||
'event.ics' => array(
|
||||
'calendardata' => 'BEGIN:VCALENDAR
|
||||
VERSION:2.0
|
||||
BEGIN:VEVENT
|
||||
UID:20120418T172519CEST-3510gh1hVw
|
||||
DTSTAMP:20120418T152519Z
|
||||
DTSTART;VALUE=DATE:20120330
|
||||
DTEND;VALUE=DATE:20120531
|
||||
EXDATE;TZID=Europe/Berlin:20120330T000000
|
||||
RRULE:FREQ=YEARLY;INTERVAL=1
|
||||
SEQUENCE:1
|
||||
SUMMARY:Birthday
|
||||
TRANSP:TRANSPARENT
|
||||
BEGIN:VALARM
|
||||
ACTION:EMAIL
|
||||
ATTENDEE:MAILTO:xxx@domain.de
|
||||
DESCRIPTION:Dies ist eine Kalender Erinnerung
|
||||
SUMMARY:Kalender Alarm Erinnerung
|
||||
TRIGGER;VALUE=DATE-TIME:20120329T060000Z
|
||||
END:VALARM
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
function testIssue211() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'HTTP_CONTENT_TYPE' => 'application/xml',
|
||||
'REQUEST_URI' => '/calendars/user1/calendar1',
|
||||
'HTTP_DEPTH' => '1',
|
||||
));
|
||||
|
||||
$request->setBody('<?xml version="1.0" encoding="utf-8" ?>
|
||||
<C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||||
<D:prop>
|
||||
<C:calendar-data/>
|
||||
<D:getetag/>
|
||||
</D:prop>
|
||||
<C:filter>
|
||||
<C:comp-filter name="VCALENDAR">
|
||||
<C:comp-filter name="VEVENT">
|
||||
<C:comp-filter name="VALARM">
|
||||
<C:time-range start="20120426T220000Z" end="20120427T215959Z"/>
|
||||
</C:comp-filter>
|
||||
</C:comp-filter>
|
||||
</C:comp-filter>
|
||||
</C:filter>
|
||||
</C:calendar-query>');
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
// if this assert is reached, the endless loop is gone
|
||||
// There should be no matching events
|
||||
$this->assertFalse(strpos('BEGIN:VEVENT', $response->body));
|
||||
|
||||
}
|
||||
}
|
||||
96
dav/SabreDAV/tests/Sabre/CalDAV/Issue220Test.php
Normal file
96
dav/SabreDAV/tests/Sabre/CalDAV/Issue220Test.php
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* This unittest is created to check for an endless loop in Sabre_CalDAV_CalendarQueryValidator
|
||||
*
|
||||
*
|
||||
* @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
|
||||
* @author Evert Pot (http://www.rooftopsolutions.nl/)
|
||||
* @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
|
||||
*/
|
||||
class Sabre_CalDAV_Issue220Test extends Sabre_DAVServerTest {
|
||||
|
||||
protected $setupCalDAV = true;
|
||||
|
||||
protected $caldavCalendars = array(
|
||||
array(
|
||||
'id' => 1,
|
||||
'name' => 'Calendar',
|
||||
'principaluri' => 'principals/user1',
|
||||
'uri' => 'calendar1',
|
||||
)
|
||||
);
|
||||
|
||||
protected $caldavCalendarObjects = array(
|
||||
1 => array(
|
||||
'event.ics' => array(
|
||||
'calendardata' => 'BEGIN:VCALENDAR
|
||||
VERSION:2.0
|
||||
BEGIN:VEVENT
|
||||
DTSTART;TZID=Europe/Berlin:20120601T180000
|
||||
SUMMARY:Brot backen
|
||||
RRULE:FREQ=DAILY;INTERVAL=1;WKST=MO
|
||||
TRANSP:OPAQUE
|
||||
DURATION:PT20M
|
||||
LAST-MODIFIED:20120601T064634Z
|
||||
CREATED:20120601T064634Z
|
||||
DTSTAMP:20120601T064634Z
|
||||
UID:b64f14c5-dccc-4eda-947f-bdb1f763fbcd
|
||||
BEGIN:VALARM
|
||||
TRIGGER;VALUE=DURATION:-PT5M
|
||||
ACTION:DISPLAY
|
||||
DESCRIPTION:Default Event Notification
|
||||
X-WR-ALARMUID:cd952c1b-b3d6-41fb-b0a6-ec3a1a5bdd58
|
||||
END:VALARM
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
DTSTART;TZID=Europe/Berlin:20120606T180000
|
||||
SUMMARY:Brot backen
|
||||
TRANSP:OPAQUE
|
||||
STATUS:CANCELLED
|
||||
DTEND;TZID=Europe/Berlin:20120606T182000
|
||||
LAST-MODIFIED:20120605T094310Z
|
||||
SEQUENCE:1
|
||||
RECURRENCE-ID:20120606T160000Z
|
||||
UID:b64f14c5-dccc-4eda-947f-bdb1f763fbcd
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
function testIssue220() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'HTTP_CONTENT_TYPE' => 'application/xml',
|
||||
'REQUEST_URI' => '/calendars/user1/calendar1',
|
||||
'HTTP_DEPTH' => '1',
|
||||
));
|
||||
|
||||
$request->setBody('<?xml version="1.0" encoding="utf-8" ?>
|
||||
<C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||||
<D:prop>
|
||||
<C:calendar-data/>
|
||||
<D:getetag/>
|
||||
</D:prop>
|
||||
<C:filter>
|
||||
<C:comp-filter name="VCALENDAR">
|
||||
<C:comp-filter name="VEVENT">
|
||||
<C:comp-filter name="VALARM">
|
||||
<C:time-range start="20120607T161646Z" end="20120612T161646Z"/>
|
||||
</C:comp-filter>
|
||||
</C:comp-filter>
|
||||
</C:comp-filter>
|
||||
</C:filter>
|
||||
</C:calendar-query>');
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
$this->assertFalse(strpos($response->body, '<s:exception>PHPUnit_Framework_Error_Warning</s:exception>'), 'Error Warning occurred: ' . $response->body);
|
||||
$this->assertFalse(strpos($response->body, 'Invalid argument supplied for foreach()'), 'Invalid argument supplied for foreach(): ' . $response->body);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status', $response->status);
|
||||
}
|
||||
}
|
||||
75
dav/SabreDAV/tests/Sabre/CalDAV/Issue228Test.php
Normal file
75
dav/SabreDAV/tests/Sabre/CalDAV/Issue228Test.php
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* This unittest is created to check if the time-range filter is working correctly with all-day-events
|
||||
*
|
||||
* @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
|
||||
* @author Evert Pot (http://www.rooftopsolutions.nl/)
|
||||
* @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
|
||||
*/
|
||||
class Sabre_CalDAV_Issue228Test extends Sabre_DAVServerTest {
|
||||
|
||||
protected $setupCalDAV = true;
|
||||
|
||||
protected $caldavCalendars = array(
|
||||
array(
|
||||
'id' => 1,
|
||||
'name' => 'Calendar',
|
||||
'principaluri' => 'principals/user1',
|
||||
'uri' => 'calendar1',
|
||||
)
|
||||
);
|
||||
|
||||
protected $caldavCalendarObjects = array(
|
||||
1 => array(
|
||||
'event.ics' => array(
|
||||
'calendardata' => 'BEGIN:VCALENDAR
|
||||
VERSION:2.0
|
||||
BEGIN:VEVENT
|
||||
UID:20120730T113415CEST-6804EGphkd@xxxxxx.de
|
||||
DTSTAMP:20120730T093415Z
|
||||
DTSTART;VALUE=DATE:20120729
|
||||
DTEND;VALUE=DATE:20120730
|
||||
SUMMARY:sunday event
|
||||
TRANSP:TRANSPARENT
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
function testIssue228() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'HTTP_CONTENT_TYPE' => 'application/xml',
|
||||
'REQUEST_URI' => '/calendars/user1/calendar1',
|
||||
'HTTP_DEPTH' => '1',
|
||||
));
|
||||
|
||||
$request->setBody('<?xml version="1.0" encoding="utf-8" ?>
|
||||
<C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||||
<D:prop>
|
||||
<C:calendar-data>
|
||||
<C:expand start="20120730T095609Z"
|
||||
end="20120813T095609Z"/>
|
||||
</C:calendar-data>
|
||||
<D:getetag/>
|
||||
</D:prop>
|
||||
<C:filter>
|
||||
<C:comp-filter name="VCALENDAR">
|
||||
<C:comp-filter name="VEVENT">
|
||||
<C:time-range start="20120730T095609Z" end="20120813T095609Z"/>
|
||||
</C:comp-filter>
|
||||
</C:comp-filter>
|
||||
</C:filter>
|
||||
</C:calendar-query>');
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
// We must check if absolutely nothing was returned from this query.
|
||||
$this->assertFalse(strpos($response->body, 'BEGIN:VCALENDAR'));
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
class Sabre_CalDAV_Notifications_CollectionTest extends \PHPUnit_Framework_TestCase {
|
||||
|
||||
function testGetChildren() {
|
||||
|
||||
$principalUri = 'principals/user1';
|
||||
|
||||
$systemStatus = new Sabre_CalDAV_Notifications_Notification_SystemStatus(1);
|
||||
|
||||
$caldavBackend = new Sabre_CalDAV_Backend_Mock(array(),array(), array(
|
||||
'principals/user1' => array(
|
||||
$systemStatus
|
||||
)
|
||||
));
|
||||
|
||||
|
||||
$col = new Sabre_CalDAV_Notifications_Collection($caldavBackend, $principalUri);
|
||||
$this->assertEquals('notifications', $col->getName());
|
||||
|
||||
$this->assertEquals(array(
|
||||
new Sabre_CalDAV_Notifications_Node($caldavBackend, $systemStatus)
|
||||
), $col->getChildren());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
23
dav/SabreDAV/tests/Sabre/CalDAV/Notifications/NodeTest.php
Normal file
23
dav/SabreDAV/tests/Sabre/CalDAV/Notifications/NodeTest.php
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
class Sabre_CalDAV_Notifications_NodeTest extends \PHPUnit_Framework_TestCase {
|
||||
|
||||
function testGetId() {
|
||||
|
||||
$principalUri = 'principals/user1';
|
||||
|
||||
$systemStatus = new Sabre_CalDAV_Notifications_Notification_SystemStatus(1);
|
||||
|
||||
$caldavBackend = new Sabre_CalDAV_Backend_Mock(array(),array(), array(
|
||||
'principals/user1' => array(
|
||||
$systemStatus
|
||||
)
|
||||
));
|
||||
|
||||
|
||||
$node = new Sabre_CalDAV_Notifications_Node($caldavBackend, $systemStatus);
|
||||
$this->assertEquals($systemStatus->getId(), $node->getName());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
|
||||
class Sabre_CalDAV_Notifications_Notification extends \PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @dataProvider dataProvider
|
||||
*/
|
||||
function testSerializers($notification, $expected1, $expected2) {
|
||||
|
||||
$this->assertEquals('foo', $notification->getId());
|
||||
|
||||
|
||||
$dom = new DOMDocument('1.0','UTF-8');
|
||||
$elem = $dom->createElement('cs:root');
|
||||
$elem->setAttribute('xmlns:cs',Sabre_CalDAV_Plugin::NS_CALENDARSERVER);
|
||||
$dom->appendChild($elem);
|
||||
$notification->serialize(new Sabre_DAV_Server(), $elem);
|
||||
$this->assertEquals($expected1, $dom->saveXML());
|
||||
|
||||
$dom = new DOMDocument('1.0','UTF-8');
|
||||
$elem = $dom->createElement('cs:root');
|
||||
$elem->setAttribute('xmlns:cs',Sabre_CalDAV_Plugin::NS_CALENDARSERVER);
|
||||
$dom->appendChild($elem);
|
||||
$notification->serializeBody(new Sabre_DAV_Server(), $elem);
|
||||
$this->assertEquals($expected2, $dom->saveXML());
|
||||
|
||||
|
||||
}
|
||||
|
||||
function dataProvider() {
|
||||
|
||||
return array(
|
||||
|
||||
array(
|
||||
new Sabre_CalDAV_Notifications_Notification_SystemStatus('foo'),
|
||||
'<?xml version="1.0" encoding="UTF-8"?>' . "\n" . '<cs:root xmlns:cs="http://calendarserver.org/ns/"><cs:systemstatus type="high"/></cs:root>' . "\n",
|
||||
'<?xml version="1.0" encoding="UTF-8"?>' . "\n" . '<cs:root xmlns:cs="http://calendarserver.org/ns/"><cs:systemstatus type="high"/></cs:root>' . "\n",
|
||||
),
|
||||
|
||||
array(
|
||||
new Sabre_CalDAV_Notifications_Notification_SystemStatus('foo',Sabre_CalDAV_Notifications_Notification_SystemStatus::TYPE_MEDIUM,'bar'),
|
||||
'<?xml version="1.0" encoding="UTF-8"?>' . "\n" . '<cs:root xmlns:cs="http://calendarserver.org/ns/"><cs:systemstatus type="medium"/></cs:root>' . "\n",
|
||||
'<?xml version="1.0" encoding="UTF-8"?>' . "\n" . '<cs:root xmlns:cs="http://calendarserver.org/ns/"><cs:systemstatus type="medium"><cs:description>bar</cs:description></cs:systemstatus></cs:root>' . "\n",
|
||||
),
|
||||
|
||||
array(
|
||||
new Sabre_CalDAV_Notifications_Notification_SystemStatus('foo',Sabre_CalDAV_Notifications_Notification_SystemStatus::TYPE_LOW,null,'http://example.org/'),
|
||||
'<?xml version="1.0" encoding="UTF-8"?>' . "\n" . '<cs:root xmlns:cs="http://calendarserver.org/ns/"><cs:systemstatus type="low"/></cs:root>' . "\n",
|
||||
'<?xml version="1.0" encoding="UTF-8"?>' . "\n" . '<cs:root xmlns:cs="http://calendarserver.org/ns/"><cs:systemstatus type="low"><d:href>http://example.org/</d:href></cs:systemstatus></cs:root>' . "\n",
|
||||
)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
390
dav/SabreDAV/tests/Sabre/CalDAV/OutboxPostTest.php
Normal file
390
dav/SabreDAV/tests/Sabre/CalDAV/OutboxPostTest.php
Normal file
|
|
@ -0,0 +1,390 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/DAVServerTest.php';
|
||||
require_once 'Sabre/CalDAV/Schedule/IMip/Mock.php';
|
||||
|
||||
class Sabre_CalDAV_OutboxPostTest extends Sabre_DAVServerTest {
|
||||
|
||||
protected $setupCalDAV = true;
|
||||
|
||||
function testPostPassThruNotFound() {
|
||||
|
||||
$req = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'POST',
|
||||
'REQUEST_URI' => '/notfound',
|
||||
));
|
||||
|
||||
$this->assertHTTPStatus(501, $req);
|
||||
|
||||
}
|
||||
|
||||
function testPostPassThruNoOutBox() {
|
||||
|
||||
$req = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'POST',
|
||||
'REQUEST_URI' => '/calendars',
|
||||
));
|
||||
|
||||
$this->assertHTTPStatus(501, $req);
|
||||
|
||||
}
|
||||
|
||||
function testNoOriginator() {
|
||||
|
||||
$req = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'POST',
|
||||
'REQUEST_URI' => '/calendars/admin/outbox',
|
||||
));
|
||||
|
||||
$this->assertHTTPStatus(400, $req);
|
||||
|
||||
}
|
||||
|
||||
function testNoRecipient() {
|
||||
|
||||
$req = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'POST',
|
||||
'REQUEST_URI' => '/calendars/admin/outbox',
|
||||
'HTTP_ORIGINATOR' => 'mailto:orig@example.org',
|
||||
));
|
||||
|
||||
$this->assertHTTPStatus(400, $req);
|
||||
|
||||
}
|
||||
|
||||
function testBadOriginator() {
|
||||
|
||||
$req = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'POST',
|
||||
'REQUEST_URI' => '/calendars/admin/outbox',
|
||||
'HTTP_ORIGINATOR' => 'nomailto:orig@example.org',
|
||||
'HTTP_RECIPIENT' => 'mailto:user1@example.org',
|
||||
));
|
||||
|
||||
$this->assertHTTPStatus(400, $req);
|
||||
|
||||
}
|
||||
|
||||
function testBadRecipient() {
|
||||
|
||||
$req = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'POST',
|
||||
'REQUEST_URI' => '/calendars/admin/outbox',
|
||||
'HTTP_ORIGINATOR' => 'mailto:orig@example.org',
|
||||
'HTTP_RECIPIENT' => 'http://user1@example.org, mailto:user2@example.org',
|
||||
));
|
||||
|
||||
$this->assertHTTPStatus(400, $req);
|
||||
|
||||
}
|
||||
|
||||
function testIncorrectOriginator() {
|
||||
|
||||
$req = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'POST',
|
||||
'REQUEST_URI' => '/calendars/admin/outbox',
|
||||
'HTTP_ORIGINATOR' => 'mailto:orig@example.org',
|
||||
'HTTP_RECIPIENT' => 'mailto:user1@example.org, mailto:user2@example.org',
|
||||
));
|
||||
|
||||
$this->assertHTTPStatus(403, $req);
|
||||
|
||||
}
|
||||
|
||||
function testInvalidIcalBody() {
|
||||
|
||||
$req = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'POST',
|
||||
'REQUEST_URI' => '/calendars/user1/outbox',
|
||||
'HTTP_ORIGINATOR' => 'mailto:user1.sabredav@sabredav.org',
|
||||
'HTTP_RECIPIENT' => 'mailto:user2@example.org',
|
||||
));
|
||||
$req->setBody('foo');
|
||||
|
||||
$this->assertHTTPStatus(400, $req);
|
||||
|
||||
}
|
||||
|
||||
function testNoVEVENT() {
|
||||
|
||||
$req = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'POST',
|
||||
'REQUEST_URI' => '/calendars/user1/outbox',
|
||||
'HTTP_ORIGINATOR' => 'mailto:user1.sabredav@sabredav.org',
|
||||
'HTTP_RECIPIENT' => 'mailto:user2@example.org',
|
||||
));
|
||||
|
||||
$body = array(
|
||||
'BEGIN:VCALENDAR',
|
||||
'BEGIN:VTIMEZONE',
|
||||
'END:VTIMEZONE',
|
||||
'END:VCALENDAR',
|
||||
);
|
||||
|
||||
$req->setBody(implode("\r\n",$body));
|
||||
|
||||
$this->assertHTTPStatus(400, $req);
|
||||
|
||||
}
|
||||
|
||||
function testNoMETHOD() {
|
||||
|
||||
$req = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'POST',
|
||||
'REQUEST_URI' => '/calendars/user1/outbox',
|
||||
'HTTP_ORIGINATOR' => 'mailto:user1.sabredav@sabredav.org',
|
||||
'HTTP_RECIPIENT' => 'mailto:user2@example.org',
|
||||
));
|
||||
|
||||
$body = array(
|
||||
'BEGIN:VCALENDAR',
|
||||
'BEGIN:VEVENT',
|
||||
'END:VEVENT',
|
||||
'END:VCALENDAR',
|
||||
);
|
||||
|
||||
$req->setBody(implode("\r\n",$body));
|
||||
|
||||
$this->assertHTTPStatus(400, $req);
|
||||
|
||||
}
|
||||
|
||||
function testUnsupportedMethod() {
|
||||
|
||||
$req = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'POST',
|
||||
'REQUEST_URI' => '/calendars/user1/outbox',
|
||||
'HTTP_ORIGINATOR' => 'mailto:user1.sabredav@sabredav.org',
|
||||
'HTTP_RECIPIENT' => 'mailto:user2@example.org',
|
||||
));
|
||||
|
||||
$body = array(
|
||||
'BEGIN:VCALENDAR',
|
||||
'METHOD:PUBLISH',
|
||||
'BEGIN:VEVENT',
|
||||
'END:VEVENT',
|
||||
'END:VCALENDAR',
|
||||
);
|
||||
|
||||
$req->setBody(implode("\r\n",$body));
|
||||
|
||||
$this->assertHTTPStatus(501, $req);
|
||||
|
||||
}
|
||||
|
||||
function testNoIMIPHandler() {
|
||||
|
||||
$req = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'POST',
|
||||
'REQUEST_URI' => '/calendars/user1/outbox',
|
||||
'HTTP_ORIGINATOR' => 'mailto:user1.sabredav@sabredav.org',
|
||||
'HTTP_RECIPIENT' => 'mailto:user2@example.org',
|
||||
));
|
||||
|
||||
$body = array(
|
||||
'BEGIN:VCALENDAR',
|
||||
'METHOD:REQUEST',
|
||||
'BEGIN:VEVENT',
|
||||
'END:VEVENT',
|
||||
'END:VCALENDAR',
|
||||
);
|
||||
|
||||
$req->setBody(implode("\r\n",$body));
|
||||
|
||||
|
||||
$response = $this->request($req);
|
||||
$this->assertEquals('HTTP/1.1 200 OK', $response->status);
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml',
|
||||
), $response->headers);
|
||||
|
||||
// Lazily checking the body for a few expected values.
|
||||
$this->assertTrue(strpos($response->body, '5.2;')!==false);
|
||||
$this->assertTrue(strpos($response->body,'user2@example.org')!==false);
|
||||
|
||||
|
||||
}
|
||||
|
||||
function testSuccessRequest() {
|
||||
|
||||
$req = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'POST',
|
||||
'REQUEST_URI' => '/calendars/user1/outbox',
|
||||
'HTTP_ORIGINATOR' => 'mailto:user1.sabredav@sabredav.org',
|
||||
'HTTP_RECIPIENT' => 'mailto:user2@example.org',
|
||||
));
|
||||
|
||||
$body = array(
|
||||
'BEGIN:VCALENDAR',
|
||||
'METHOD:REQUEST',
|
||||
'BEGIN:VEVENT',
|
||||
'SUMMARY:An invitation',
|
||||
'END:VEVENT',
|
||||
'END:VCALENDAR',
|
||||
);
|
||||
|
||||
$req->setBody(implode("\r\n",$body));
|
||||
|
||||
$handler = new Sabre_CalDAV_Schedule_IMip_Mock('server@example.org');
|
||||
|
||||
$this->caldavPlugin->setIMIPhandler($handler);
|
||||
|
||||
$response = $this->request($req);
|
||||
$this->assertEquals('HTTP/1.1 200 OK', $response->status);
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml',
|
||||
), $response->headers);
|
||||
|
||||
// Lazily checking the body for a few expected values.
|
||||
$this->assertTrue(strpos($response->body, '2.0;')!==false);
|
||||
$this->assertTrue(strpos($response->body,'user2@example.org')!==false);
|
||||
|
||||
$this->assertEquals(array(
|
||||
array(
|
||||
'to' => 'user2@example.org',
|
||||
'subject' => 'Invitation for: An invitation',
|
||||
'body' => implode("\r\n", $body) . "\r\n",
|
||||
'headers' => array(
|
||||
'Reply-To: user1.sabredav@sabredav.org',
|
||||
'From: server@example.org',
|
||||
'Content-Type: text/calendar; method=REQUEST; charset=utf-8',
|
||||
'X-Sabre-Version: ' . Sabre_DAV_Version::VERSION . '-' . Sabre_DAV_Version::STABILITY,
|
||||
),
|
||||
)
|
||||
), $handler->getSentEmails());
|
||||
|
||||
}
|
||||
|
||||
function testSuccessRequestUpperCased() {
|
||||
|
||||
$req = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'POST',
|
||||
'REQUEST_URI' => '/calendars/user1/outbox',
|
||||
'HTTP_ORIGINATOR' => 'MAILTO:user1.sabredav@sabredav.org',
|
||||
'HTTP_RECIPIENT' => 'MAILTO:user2@example.org',
|
||||
));
|
||||
|
||||
$body = array(
|
||||
'BEGIN:VCALENDAR',
|
||||
'METHOD:REQUEST',
|
||||
'BEGIN:VEVENT',
|
||||
'SUMMARY:An invitation',
|
||||
'END:VEVENT',
|
||||
'END:VCALENDAR',
|
||||
);
|
||||
|
||||
$req->setBody(implode("\r\n",$body));
|
||||
|
||||
$handler = new Sabre_CalDAV_Schedule_IMip_Mock('server@example.org');
|
||||
|
||||
$this->caldavPlugin->setIMIPhandler($handler);
|
||||
|
||||
$response = $this->request($req);
|
||||
$this->assertEquals('HTTP/1.1 200 OK', $response->status);
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml',
|
||||
), $response->headers);
|
||||
|
||||
// Lazily checking the body for a few expected values.
|
||||
$this->assertTrue(strpos($response->body, '2.0;')!==false);
|
||||
$this->assertTrue(strpos($response->body,'user2@example.org')!==false);
|
||||
|
||||
$this->assertEquals(array(
|
||||
array(
|
||||
'to' => 'user2@example.org',
|
||||
'subject' => 'Invitation for: An invitation',
|
||||
'body' => implode("\r\n", $body) . "\r\n",
|
||||
'headers' => array(
|
||||
'Reply-To: user1.sabredav@sabredav.org',
|
||||
'From: server@example.org',
|
||||
'Content-Type: text/calendar; method=REQUEST; charset=utf-8',
|
||||
'X-Sabre-Version: ' . Sabre_DAV_Version::VERSION . '-' . Sabre_DAV_Version::STABILITY,
|
||||
),
|
||||
)
|
||||
), $handler->getSentEmails());
|
||||
|
||||
}
|
||||
|
||||
function testSuccessReply() {
|
||||
|
||||
$req = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'POST',
|
||||
'REQUEST_URI' => '/calendars/user1/outbox',
|
||||
'HTTP_ORIGINATOR' => 'mailto:user1.sabredav@sabredav.org',
|
||||
'HTTP_RECIPIENT' => 'mailto:user2@example.org',
|
||||
));
|
||||
|
||||
$body = array(
|
||||
'BEGIN:VCALENDAR',
|
||||
'METHOD:REPLY',
|
||||
'BEGIN:VEVENT',
|
||||
'SUMMARY:An invitation',
|
||||
'END:VEVENT',
|
||||
'END:VCALENDAR',
|
||||
);
|
||||
|
||||
$req->setBody(implode("\r\n",$body));
|
||||
|
||||
$handler = new Sabre_CalDAV_Schedule_IMip_Mock('server@example.org');
|
||||
|
||||
$this->caldavPlugin->setIMIPhandler($handler);
|
||||
$this->assertHTTPStatus(200, $req);
|
||||
|
||||
$this->assertEquals(array(
|
||||
array(
|
||||
'to' => 'user2@example.org',
|
||||
'subject' => 'Response for: An invitation',
|
||||
'body' => implode("\r\n", $body) . "\r\n",
|
||||
'headers' => array(
|
||||
'Reply-To: user1.sabredav@sabredav.org',
|
||||
'From: server@example.org',
|
||||
'Content-Type: text/calendar; method=REPLY; charset=utf-8',
|
||||
'X-Sabre-Version: ' . Sabre_DAV_Version::VERSION . '-' . Sabre_DAV_Version::STABILITY,
|
||||
),
|
||||
)
|
||||
), $handler->getSentEmails());
|
||||
|
||||
}
|
||||
|
||||
function testSuccessCancel() {
|
||||
|
||||
$req = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'POST',
|
||||
'REQUEST_URI' => '/calendars/user1/outbox',
|
||||
'HTTP_ORIGINATOR' => 'mailto:user1.sabredav@sabredav.org',
|
||||
'HTTP_RECIPIENT' => 'mailto:user2@example.org',
|
||||
));
|
||||
|
||||
$body = array(
|
||||
'BEGIN:VCALENDAR',
|
||||
'METHOD:CANCEL',
|
||||
'BEGIN:VEVENT',
|
||||
'SUMMARY:An invitation',
|
||||
'END:VEVENT',
|
||||
'END:VCALENDAR',
|
||||
);
|
||||
|
||||
$req->setBody(implode("\r\n",$body));
|
||||
|
||||
$handler = new Sabre_CalDAV_Schedule_IMip_Mock('server@example.org');
|
||||
|
||||
$this->caldavPlugin->setIMIPhandler($handler);
|
||||
$this->assertHTTPStatus(200, $req);
|
||||
|
||||
$this->assertEquals(array(
|
||||
array(
|
||||
'to' => 'user2@example.org',
|
||||
'subject' => 'Cancelled event: An invitation',
|
||||
'body' => implode("\r\n", $body) . "\r\n",
|
||||
'headers' => array(
|
||||
'Reply-To: user1.sabredav@sabredav.org',
|
||||
'From: server@example.org',
|
||||
'Content-Type: text/calendar; method=CANCEL; charset=utf-8',
|
||||
'X-Sabre-Version: ' . Sabre_DAV_Version::VERSION . '-' . Sabre_DAV_Version::STABILITY,
|
||||
),
|
||||
)
|
||||
), $handler->getSentEmails());
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
1084
dav/SabreDAV/tests/Sabre/CalDAV/PluginTest.php
Normal file
1084
dav/SabreDAV/tests/Sabre/CalDAV/PluginTest.php
Normal file
|
|
@ -0,0 +1,1084 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
require_once 'Sabre/DAV/Auth/MockBackend.php';
|
||||
require_once 'Sabre/CalDAV/TestUtil.php';
|
||||
require_once 'Sabre/DAVACL/MockPrincipalBackend.php';
|
||||
|
||||
class Sabre_CalDAV_PluginTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @var Sabre_DAV_Server
|
||||
*/
|
||||
protected $server;
|
||||
/**
|
||||
* @var Sabre_CalDAV_Plugin
|
||||
*/
|
||||
protected $plugin;
|
||||
protected $response;
|
||||
/**
|
||||
* @var Sabre_CalDAV_Backend_PDO
|
||||
*/
|
||||
protected $caldavBackend;
|
||||
|
||||
function setup() {
|
||||
|
||||
$this->caldavBackend = new Sabre_CalDAV_Backend_Mock(array(
|
||||
array(
|
||||
'id' => 1,
|
||||
'uri' => 'UUID-123467',
|
||||
'principaluri' => 'principals/user1',
|
||||
'{DAV:}displayname' => 'user1 calendar',
|
||||
'{urn:ietf:params:xml:ns:caldav}calendar-description' => 'Calendar description',
|
||||
'{http://apple.com/ns/ical/}calendar-order' => '1',
|
||||
'{http://apple.com/ns/ical/}calendar-color' => '#FF0000',
|
||||
'{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => new Sabre_CalDAV_Property_SupportedCalendarComponentSet(array('VEVENT','VTODO')),
|
||||
),
|
||||
array(
|
||||
'id' => 2,
|
||||
'uri' => 'UUID-123468',
|
||||
'principaluri' => 'principals/user1',
|
||||
'{DAV:}displayname' => 'user1 calendar2',
|
||||
'{urn:ietf:params:xml:ns:caldav}calendar-description' => 'Calendar description',
|
||||
'{http://apple.com/ns/ical/}calendar-order' => '1',
|
||||
'{http://apple.com/ns/ical/}calendar-color' => '#FF0000',
|
||||
'{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => new Sabre_CalDAV_Property_SupportedCalendarComponentSet(array('VEVENT','VTODO')),
|
||||
)
|
||||
), array(
|
||||
1 => array(
|
||||
'UUID-2345' => array(
|
||||
'calendardata' => Sabre_CalDAV_TestUtil::getTestCalendarData(),
|
||||
)
|
||||
)
|
||||
));
|
||||
$principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$principalBackend->setGroupMemberSet('principals/admin/calendar-proxy-read',array('principals/user1'));
|
||||
$principalBackend->setGroupMemberSet('principals/admin/calendar-proxy-write',array('principals/user1'));
|
||||
$principalBackend->addPrincipal(array(
|
||||
'uri' => 'principals/admin/calendar-proxy-read',
|
||||
));
|
||||
$principalBackend->addPrincipal(array(
|
||||
'uri' => 'principals/admin/calendar-proxy-write',
|
||||
));
|
||||
|
||||
$calendars = new Sabre_CalDAV_CalendarRootNode($principalBackend,$this->caldavBackend);
|
||||
$principals = new Sabre_CalDAV_Principal_Collection($principalBackend);
|
||||
|
||||
$root = new Sabre_DAV_SimpleCollection('root');
|
||||
$root->addChild($calendars);
|
||||
$root->addChild($principals);
|
||||
|
||||
$objectTree = new Sabre_DAV_ObjectTree($root);
|
||||
$this->server = new Sabre_DAV_Server($objectTree);
|
||||
$this->server->debugExceptions = true;
|
||||
$this->server->setBaseUri('/');
|
||||
$this->plugin = new Sabre_CalDAV_Plugin();
|
||||
$this->server->addPlugin($this->plugin);
|
||||
|
||||
$this->response = new Sabre_HTTP_ResponseMock();
|
||||
$this->server->httpResponse = $this->response;
|
||||
|
||||
}
|
||||
|
||||
function testSimple() {
|
||||
|
||||
$this->assertEquals(array('MKCALENDAR'), $this->plugin->getHTTPMethods('calendars/user1/randomnewcalendar'));
|
||||
$this->assertEquals(array('calendar-access','calendar-proxy'), $this->plugin->getFeatures());
|
||||
$this->assertArrayHasKey('urn:ietf:params:xml:ns:caldav', $this->server->xmlNamespaces);
|
||||
|
||||
}
|
||||
|
||||
function testUnknownMethodPassThrough() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'MKBREAKFAST',
|
||||
'REQUEST_URI' => '/',
|
||||
));
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 501 Not Implemented', $this->response->status,'Incorrect status returned. Full response body:' . $this->response->body);
|
||||
|
||||
}
|
||||
|
||||
function testReportPassThrough() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'HTTP_CONTENT_TYPE' => 'application/xml',
|
||||
'REQUEST_URI' => '/',
|
||||
));
|
||||
$request->setBody('<?xml version="1.0"?><s:somereport xmlns:s="http://www.rooftopsolutions.nl/NS/example" />');
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 501 Not Implemented', $this->response->status);
|
||||
|
||||
}
|
||||
|
||||
function testMkCalendarBadLocation() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'MKCALENDAR',
|
||||
'REQUEST_URI' => '/blabla',
|
||||
));
|
||||
|
||||
$body = '<?xml version="1.0" encoding="utf-8" ?>
|
||||
<C:mkcalendar xmlns:D="DAV:"
|
||||
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||||
<D:set>
|
||||
<D:prop>
|
||||
<D:displayname>Lisa\'s Events</D:displayname>
|
||||
<C:calendar-description xml:lang="en"
|
||||
>Calendar restricted to events.</C:calendar-description>
|
||||
<C:supported-calendar-component-set>
|
||||
<C:comp name="VEVENT"/>
|
||||
</C:supported-calendar-component-set>
|
||||
<C:calendar-timezone><![CDATA[BEGIN:VCALENDAR
|
||||
PRODID:-//Example Corp.//CalDAV Client//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:US-Eastern
|
||||
LAST-MODIFIED:19870101T000000Z
|
||||
BEGIN:STANDARD
|
||||
DTSTART:19671029T020000
|
||||
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
||||
TZOFFSETFROM:-0400
|
||||
TZOFFSETTO:-0500
|
||||
TZNAME:Eastern Standard Time (US & Canada)
|
||||
END:STANDARD
|
||||
BEGIN:DAYLIGHT
|
||||
DTSTART:19870405T020000
|
||||
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
||||
TZOFFSETFROM:-0500
|
||||
TZOFFSETTO:-0400
|
||||
TZNAME:Eastern Daylight Time (US & Canada)
|
||||
END:DAYLIGHT
|
||||
END:VTIMEZONE
|
||||
END:VCALENDAR
|
||||
]]></C:calendar-timezone>
|
||||
</D:prop>
|
||||
</D:set>
|
||||
</C:mkcalendar>';
|
||||
|
||||
$request->setBody($body);
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 403 Forbidden', $this->response->status);
|
||||
|
||||
}
|
||||
|
||||
function testMkCalendarNoParentNode() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'MKCALENDAR',
|
||||
'REQUEST_URI' => '/doesntexist/calendar',
|
||||
));
|
||||
|
||||
$body = '<?xml version="1.0" encoding="utf-8" ?>
|
||||
<C:mkcalendar xmlns:D="DAV:"
|
||||
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||||
<D:set>
|
||||
<D:prop>
|
||||
<D:displayname>Lisa\'s Events</D:displayname>
|
||||
<C:calendar-description xml:lang="en"
|
||||
>Calendar restricted to events.</C:calendar-description>
|
||||
<C:supported-calendar-component-set>
|
||||
<C:comp name="VEVENT"/>
|
||||
</C:supported-calendar-component-set>
|
||||
<C:calendar-timezone><![CDATA[BEGIN:VCALENDAR
|
||||
PRODID:-//Example Corp.//CalDAV Client//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:US-Eastern
|
||||
LAST-MODIFIED:19870101T000000Z
|
||||
BEGIN:STANDARD
|
||||
DTSTART:19671029T020000
|
||||
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
||||
TZOFFSETFROM:-0400
|
||||
TZOFFSETTO:-0500
|
||||
TZNAME:Eastern Standard Time (US & Canada)
|
||||
END:STANDARD
|
||||
BEGIN:DAYLIGHT
|
||||
DTSTART:19870405T020000
|
||||
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
||||
TZOFFSETFROM:-0500
|
||||
TZOFFSETTO:-0400
|
||||
TZNAME:Eastern Daylight Time (US & Canada)
|
||||
END:DAYLIGHT
|
||||
END:VTIMEZONE
|
||||
END:VCALENDAR
|
||||
]]></C:calendar-timezone>
|
||||
</D:prop>
|
||||
</D:set>
|
||||
</C:mkcalendar>';
|
||||
|
||||
$request->setBody($body);
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 409 Conflict', $this->response->status);
|
||||
|
||||
}
|
||||
|
||||
function testMkCalendarExistingCalendar() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'MKCALENDAR',
|
||||
'REQUEST_URI' => '/calendars/user1/UUID-123467',
|
||||
));
|
||||
|
||||
$body = '<?xml version="1.0" encoding="utf-8" ?>
|
||||
<C:mkcalendar xmlns:D="DAV:"
|
||||
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||||
<D:set>
|
||||
<D:prop>
|
||||
<D:displayname>Lisa\'s Events</D:displayname>
|
||||
<C:calendar-description xml:lang="en"
|
||||
>Calendar restricted to events.</C:calendar-description>
|
||||
<C:supported-calendar-component-set>
|
||||
<C:comp name="VEVENT"/>
|
||||
</C:supported-calendar-component-set>
|
||||
<C:calendar-timezone><![CDATA[BEGIN:VCALENDAR
|
||||
PRODID:-//Example Corp.//CalDAV Client//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:US-Eastern
|
||||
LAST-MODIFIED:19870101T000000Z
|
||||
BEGIN:STANDARD
|
||||
DTSTART:19671029T020000
|
||||
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
||||
TZOFFSETFROM:-0400
|
||||
TZOFFSETTO:-0500
|
||||
TZNAME:Eastern Standard Time (US & Canada)
|
||||
END:STANDARD
|
||||
BEGIN:DAYLIGHT
|
||||
DTSTART:19870405T020000
|
||||
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
||||
TZOFFSETFROM:-0500
|
||||
TZOFFSETTO:-0400
|
||||
TZNAME:Eastern Daylight Time (US & Canada)
|
||||
END:DAYLIGHT
|
||||
END:VTIMEZONE
|
||||
END:VCALENDAR
|
||||
]]></C:calendar-timezone>
|
||||
</D:prop>
|
||||
</D:set>
|
||||
</C:mkcalendar>';
|
||||
|
||||
$request->setBody($body);
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 405 Method Not Allowed', $this->response->status);
|
||||
|
||||
}
|
||||
|
||||
function testMkCalendarSucceed() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'MKCALENDAR',
|
||||
'REQUEST_URI' => '/calendars/user1/NEWCALENDAR',
|
||||
));
|
||||
|
||||
$timezone = 'BEGIN:VCALENDAR
|
||||
PRODID:-//Example Corp.//CalDAV Client//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:US-Eastern
|
||||
LAST-MODIFIED:19870101T000000Z
|
||||
BEGIN:STANDARD
|
||||
DTSTART:19671029T020000
|
||||
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
||||
TZOFFSETFROM:-0400
|
||||
TZOFFSETTO:-0500
|
||||
TZNAME:Eastern Standard Time (US & Canada)
|
||||
END:STANDARD
|
||||
BEGIN:DAYLIGHT
|
||||
DTSTART:19870405T020000
|
||||
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
||||
TZOFFSETFROM:-0500
|
||||
TZOFFSETTO:-0400
|
||||
TZNAME:Eastern Daylight Time (US & Canada)
|
||||
END:DAYLIGHT
|
||||
END:VTIMEZONE
|
||||
END:VCALENDAR';
|
||||
|
||||
$body = '<?xml version="1.0" encoding="utf-8" ?>
|
||||
<C:mkcalendar xmlns:D="DAV:"
|
||||
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||||
<D:set>
|
||||
<D:prop>
|
||||
<D:displayname>Lisa\'s Events</D:displayname>
|
||||
<C:calendar-description xml:lang="en"
|
||||
>Calendar restricted to events.</C:calendar-description>
|
||||
<C:supported-calendar-component-set>
|
||||
<C:comp name="VEVENT"/>
|
||||
</C:supported-calendar-component-set>
|
||||
<C:calendar-timezone><![CDATA[' . $timezone . ']]></C:calendar-timezone>
|
||||
</D:prop>
|
||||
</D:set>
|
||||
</C:mkcalendar>';
|
||||
|
||||
$request->setBody($body);
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 201 Created', $this->response->status,'Invalid response code received. Full response body: ' .$this->response->body);
|
||||
|
||||
$calendars = $this->caldavBackend->getCalendarsForUser('principals/user1');
|
||||
$this->assertEquals(3, count($calendars));
|
||||
|
||||
$newCalendar = null;
|
||||
foreach($calendars as $calendar) {
|
||||
if ($calendar['uri'] === 'NEWCALENDAR') {
|
||||
$newCalendar = $calendar;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$this->assertInternalType('array',$newCalendar);
|
||||
|
||||
$keys = array(
|
||||
'uri' => 'NEWCALENDAR',
|
||||
'id' => null,
|
||||
'{urn:ietf:params:xml:ns:caldav}calendar-description' => 'Calendar restricted to events.',
|
||||
'{urn:ietf:params:xml:ns:caldav}calendar-timezone' => $timezone,
|
||||
'{DAV:}displayname' => 'Lisa\'s Events',
|
||||
'{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => null,
|
||||
);
|
||||
|
||||
foreach($keys as $key=>$value) {
|
||||
|
||||
$this->assertArrayHasKey($key, $newCalendar);
|
||||
|
||||
if (is_null($value)) continue;
|
||||
$this->assertEquals($value, $newCalendar[$key]);
|
||||
|
||||
}
|
||||
$sccs = '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set';
|
||||
$this->assertTrue($newCalendar[$sccs] instanceof Sabre_CalDAV_Property_SupportedCalendarComponentSet);
|
||||
$this->assertEquals(array('VEVENT'),$newCalendar[$sccs]->getValue());
|
||||
|
||||
}
|
||||
|
||||
function testMkCalendarEmptyBodySucceed() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'MKCALENDAR',
|
||||
'REQUEST_URI' => '/calendars/user1/NEWCALENDAR',
|
||||
));
|
||||
|
||||
$request->setBody('');
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 201 Created', $this->response->status,'Invalid response code received. Full response body: ' .$this->response->body);
|
||||
|
||||
$calendars = $this->caldavBackend->getCalendarsForUser('principals/user1');
|
||||
$this->assertEquals(3, count($calendars));
|
||||
|
||||
$newCalendar = null;
|
||||
foreach($calendars as $calendar) {
|
||||
if ($calendar['uri'] === 'NEWCALENDAR') {
|
||||
$newCalendar = $calendar;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$this->assertInternalType('array',$newCalendar);
|
||||
|
||||
$keys = array(
|
||||
'uri' => 'NEWCALENDAR',
|
||||
'id' => null,
|
||||
'{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => null,
|
||||
);
|
||||
|
||||
foreach($keys as $key=>$value) {
|
||||
|
||||
$this->assertArrayHasKey($key, $newCalendar);
|
||||
|
||||
if (is_null($value)) continue;
|
||||
$this->assertEquals($value, $newCalendar[$key]);
|
||||
|
||||
}
|
||||
$sccs = '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set';
|
||||
$this->assertTrue($newCalendar[$sccs] instanceof Sabre_CalDAV_Property_SupportedCalendarComponentSet);
|
||||
$this->assertEquals(array('VEVENT','VTODO'),$newCalendar[$sccs]->getValue());
|
||||
|
||||
}
|
||||
|
||||
function testPrincipalProperties() {
|
||||
|
||||
$httpRequest = new Sabre_HTTP_Request(array(
|
||||
'HTTP_HOST' => 'sabredav.org',
|
||||
));
|
||||
$this->server->httpRequest = $httpRequest;
|
||||
|
||||
$props = $this->server->getPropertiesForPath('/principals/user1',array(
|
||||
'{urn:ietf:params:xml:ns:caldav}calendar-home-set',
|
||||
'{urn:ietf:params:xml:ns:caldav}schedule-outbox-URL',
|
||||
'{urn:ietf:params:xml:ns:caldav}calendar-user-address-set',
|
||||
'{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}calendar-proxy-read-for',
|
||||
'{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}calendar-proxy-write-for',
|
||||
'{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}notification-URL',
|
||||
));
|
||||
|
||||
$this->assertArrayHasKey(0,$props);
|
||||
$this->assertArrayHasKey(200,$props[0]);
|
||||
|
||||
|
||||
$this->assertArrayHasKey('{urn:ietf:params:xml:ns:caldav}calendar-home-set',$props[0][200]);
|
||||
$prop = $props[0][200]['{urn:ietf:params:xml:ns:caldav}calendar-home-set'];
|
||||
$this->assertTrue($prop instanceof Sabre_DAV_Property_Href);
|
||||
$this->assertEquals('calendars/user1/',$prop->getHref());
|
||||
|
||||
$this->assertArrayHasKey('{urn:ietf:params:xml:ns:caldav}schedule-outbox-URL',$props[0][200]);
|
||||
$prop = $props[0][200]['{urn:ietf:params:xml:ns:caldav}schedule-outbox-URL'];
|
||||
$this->assertTrue($prop instanceof Sabre_DAV_Property_Href);
|
||||
$this->assertEquals('calendars/user1/outbox',$prop->getHref());
|
||||
|
||||
$this->assertArrayHasKey('{'.Sabre_CalDAV_Plugin::NS_CALENDARSERVER .'}notification-URL',$props[0][200]);
|
||||
$prop = $props[0][200]['{'.Sabre_CalDAV_Plugin::NS_CALENDARSERVER .'}notification-URL'];
|
||||
$this->assertTrue($prop instanceof Sabre_DAV_Property_Href);
|
||||
$this->assertEquals('calendars/user1/notifications/',$prop->getHref());
|
||||
|
||||
|
||||
$this->assertArrayHasKey('{urn:ietf:params:xml:ns:caldav}calendar-user-address-set',$props[0][200]);
|
||||
$prop = $props[0][200]['{urn:ietf:params:xml:ns:caldav}calendar-user-address-set'];
|
||||
$this->assertTrue($prop instanceof Sabre_DAV_Property_HrefList);
|
||||
$this->assertEquals(array('mailto:user1.sabredav@sabredav.org','/principals/user1'),$prop->getHrefs());
|
||||
|
||||
$this->assertArrayHasKey('{http://calendarserver.org/ns/}calendar-proxy-read-for', $props[0][200]);
|
||||
$prop = $props[0][200]['{http://calendarserver.org/ns/}calendar-proxy-read-for'];
|
||||
$this->assertInstanceOf('Sabre_DAV_Property_HrefList', $prop);
|
||||
$this->assertEquals(array('principals/admin'), $prop->getHrefs());
|
||||
|
||||
$this->assertArrayHasKey('{http://calendarserver.org/ns/}calendar-proxy-write-for', $props[0][200]);
|
||||
$prop = $props[0][200]['{http://calendarserver.org/ns/}calendar-proxy-write-for'];
|
||||
$this->assertInstanceOf('Sabre_DAV_Property_HrefList', $prop);
|
||||
$this->assertEquals(array('principals/admin'), $prop->getHrefs());
|
||||
|
||||
|
||||
}
|
||||
|
||||
function testSupportedReportSetPropertyNonCalendar() {
|
||||
|
||||
$props = $this->server->getPropertiesForPath('/calendars/user1',array(
|
||||
'{DAV:}supported-report-set',
|
||||
));
|
||||
|
||||
$this->assertArrayHasKey(0,$props);
|
||||
$this->assertArrayHasKey(200,$props[0]);
|
||||
$this->assertArrayHasKey('{DAV:}supported-report-set',$props[0][200]);
|
||||
|
||||
$prop = $props[0][200]['{DAV:}supported-report-set'];
|
||||
|
||||
$this->assertTrue($prop instanceof Sabre_DAV_Property_SupportedReportSet);
|
||||
$value = array(
|
||||
);
|
||||
$this->assertEquals($value,$prop->getValue());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSupportedReportSetPropertyNonCalendar
|
||||
*/
|
||||
function testSupportedReportSetProperty() {
|
||||
|
||||
$props = $this->server->getPropertiesForPath('/calendars/user1/UUID-123467',array(
|
||||
'{DAV:}supported-report-set',
|
||||
));
|
||||
|
||||
$this->assertArrayHasKey(0,$props);
|
||||
$this->assertArrayHasKey(200,$props[0]);
|
||||
$this->assertArrayHasKey('{DAV:}supported-report-set',$props[0][200]);
|
||||
|
||||
$prop = $props[0][200]['{DAV:}supported-report-set'];
|
||||
|
||||
$this->assertTrue($prop instanceof Sabre_DAV_Property_SupportedReportSet);
|
||||
$value = array(
|
||||
'{urn:ietf:params:xml:ns:caldav}calendar-multiget',
|
||||
'{urn:ietf:params:xml:ns:caldav}calendar-query',
|
||||
'{urn:ietf:params:xml:ns:caldav}free-busy-query',
|
||||
);
|
||||
$this->assertEquals($value,$prop->getValue());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSupportedReportSetProperty
|
||||
*/
|
||||
function testCalendarMultiGetReport() {
|
||||
|
||||
$body =
|
||||
'<?xml version="1.0"?>' .
|
||||
'<c:calendar-multiget xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">' .
|
||||
'<d:prop>' .
|
||||
' <c:calendar-data />' .
|
||||
' <d:getetag />' .
|
||||
'</d:prop>' .
|
||||
'<d:href>/calendars/user1/UUID-123467/UUID-2345</d:href>' .
|
||||
'</c:calendar-multiget>';
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'REQUEST_URI' => '/calendars/user1',
|
||||
'HTTP_DEPTH' => '1',
|
||||
));
|
||||
$request->setBody($body);
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status',$this->response->status,'Invalid HTTP status received. Full response body: ' . $this->response->body);
|
||||
|
||||
$xml = simplexml_load_string($this->response->body);
|
||||
|
||||
$xml->registerXPathNamespace('d','DAV:');
|
||||
$xml->registerXPathNamespace('c','urn:ietf:params:xml:ns:caldav');
|
||||
|
||||
$check = array(
|
||||
'/d:multistatus',
|
||||
'/d:multistatus/d:response',
|
||||
'/d:multistatus/d:response/d:href',
|
||||
'/d:multistatus/d:response/d:propstat',
|
||||
'/d:multistatus/d:response/d:propstat/d:prop',
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/d:getetag',
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/c:calendar-data',
|
||||
'/d:multistatus/d:response/d:propstat/d:status' => 'HTTP/1.1 200 OK',
|
||||
);
|
||||
|
||||
foreach($check as $v1=>$v2) {
|
||||
|
||||
$xpath = is_int($v1)?$v2:$v1;
|
||||
|
||||
$result = $xml->xpath($xpath);
|
||||
$this->assertEquals(1,count($result));
|
||||
|
||||
if (!is_int($v1)) $this->assertEquals($v2,(string)$result[0]);
|
||||
|
||||
}
|
||||
|
||||
// The response object should have a reference to the Asia/Seoul
|
||||
// timezone.
|
||||
$this->assertTrue(strpos($this->response->body,'Asia/Seoul')!==false);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testCalendarMultiGetReport
|
||||
*/
|
||||
function testCalendarMultiGetReportExpand() {
|
||||
|
||||
$body =
|
||||
'<?xml version="1.0"?>' .
|
||||
'<c:calendar-multiget xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">' .
|
||||
'<d:prop>' .
|
||||
' <c:calendar-data>' .
|
||||
' <c:expand start="20110101T000000Z" end="20111231T235959Z" />' .
|
||||
' </c:calendar-data>' .
|
||||
' <d:getetag />' .
|
||||
'</d:prop>' .
|
||||
'<d:href>/calendars/user1/UUID-123467/UUID-2345</d:href>' .
|
||||
'</c:calendar-multiget>';
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'REQUEST_URI' => '/calendars/user1',
|
||||
'HTTP_DEPTH' => '1',
|
||||
));
|
||||
$request->setBody($body);
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status',$this->response->status,'Invalid HTTP status received. Full response body: ' . $this->response->body);
|
||||
|
||||
$xml = simplexml_load_string($this->response->body);
|
||||
|
||||
$xml->registerXPathNamespace('d','DAV:');
|
||||
$xml->registerXPathNamespace('c','urn:ietf:params:xml:ns:caldav');
|
||||
|
||||
$check = array(
|
||||
'/d:multistatus',
|
||||
'/d:multistatus/d:response',
|
||||
'/d:multistatus/d:response/d:href',
|
||||
'/d:multistatus/d:response/d:propstat',
|
||||
'/d:multistatus/d:response/d:propstat/d:prop',
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/d:getetag',
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/c:calendar-data',
|
||||
'/d:multistatus/d:response/d:propstat/d:status' => 'HTTP/1.1 200 OK',
|
||||
);
|
||||
|
||||
foreach($check as $v1=>$v2) {
|
||||
|
||||
$xpath = is_int($v1)?$v2:$v1;
|
||||
|
||||
$result = $xml->xpath($xpath);
|
||||
$this->assertEquals(1,count($result));
|
||||
|
||||
if (!is_int($v1)) $this->assertEquals($v2,(string)$result[0]);
|
||||
|
||||
}
|
||||
// The response object should no longer hold references to timezones.
|
||||
$this->assertTrue(strpos($this->response->body,'Asia/Seoul')===false);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSupportedReportSetProperty
|
||||
* @depends testCalendarMultiGetReport
|
||||
*/
|
||||
function testCalendarQueryReport() {
|
||||
|
||||
$body =
|
||||
'<?xml version="1.0"?>' .
|
||||
'<c:calendar-query xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">' .
|
||||
'<d:prop>' .
|
||||
' <c:calendar-data>' .
|
||||
' <c:expand start="20000101T000000Z" end="20101231T235959Z" />' .
|
||||
' </c:calendar-data>' .
|
||||
' <d:getetag />' .
|
||||
'</d:prop>' .
|
||||
'<c:filter>' .
|
||||
' <c:comp-filter name="VCALENDAR">' .
|
||||
' <c:comp-filter name="VEVENT" />' .
|
||||
' </c:comp-filter>' .
|
||||
'</c:filter>' .
|
||||
'</c:calendar-query>';
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'REQUEST_URI' => '/calendars/user1/UUID-123467',
|
||||
'HTTP_DEPTH' => '1',
|
||||
));
|
||||
$request->setBody($body);
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status',$this->response->status,'Received an unexpected status. Full response body: ' . $this->response->body);
|
||||
|
||||
$xml = simplexml_load_string($this->response->body);
|
||||
|
||||
$xml->registerXPathNamespace('d','DAV:');
|
||||
$xml->registerXPathNamespace('c','urn:ietf:params:xml:ns:caldav');
|
||||
|
||||
$check = array(
|
||||
'/d:multistatus',
|
||||
'/d:multistatus/d:response',
|
||||
'/d:multistatus/d:response/d:href',
|
||||
'/d:multistatus/d:response/d:propstat',
|
||||
'/d:multistatus/d:response/d:propstat/d:prop',
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/d:getetag',
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/c:calendar-data',
|
||||
'/d:multistatus/d:response/d:propstat/d:status' => 'HTTP/1.1 200 OK',
|
||||
);
|
||||
|
||||
foreach($check as $v1=>$v2) {
|
||||
|
||||
$xpath = is_int($v1)?$v2:$v1;
|
||||
|
||||
$result = $xml->xpath($xpath);
|
||||
$this->assertEquals(1,count($result), 'We expected 1 ' . $xpath . ' elements. We\'ve found ' . count($result) . '. Full result: ' . $this->response->body);
|
||||
|
||||
if (!is_int($v1)) $this->assertEquals($v2,(string)$result[0]);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testCalendarQueryReport
|
||||
*/
|
||||
function testCalendarQueryReportNoCalData() {
|
||||
|
||||
$body =
|
||||
'<?xml version="1.0"?>' .
|
||||
'<c:calendar-query xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">' .
|
||||
'<d:prop>' .
|
||||
' <d:getetag />' .
|
||||
'</d:prop>' .
|
||||
'<c:filter>' .
|
||||
' <c:comp-filter name="VCALENDAR">' .
|
||||
' <c:comp-filter name="VEVENT" />' .
|
||||
' </c:comp-filter>' .
|
||||
'</c:filter>' .
|
||||
'</c:calendar-query>';
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'REQUEST_URI' => '/calendars/user1//UUID-123467',
|
||||
'HTTP_DEPTH' => '1',
|
||||
));
|
||||
$request->setBody($body);
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status',$this->response->status,'Received an unexpected status. Full response body: ' . $this->response->body);
|
||||
|
||||
$xml = simplexml_load_string($this->response->body);
|
||||
|
||||
$xml->registerXPathNamespace('d','DAV:');
|
||||
$xml->registerXPathNamespace('c','urn:ietf:params:xml:ns:caldav');
|
||||
|
||||
$check = array(
|
||||
'/d:multistatus',
|
||||
'/d:multistatus/d:response',
|
||||
'/d:multistatus/d:response/d:href',
|
||||
'/d:multistatus/d:response/d:propstat',
|
||||
'/d:multistatus/d:response/d:propstat/d:prop',
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/d:getetag',
|
||||
'/d:multistatus/d:response/d:propstat/d:status' => 'HTTP/1.1 200 OK',
|
||||
);
|
||||
|
||||
foreach($check as $v1=>$v2) {
|
||||
|
||||
$xpath = is_int($v1)?$v2:$v1;
|
||||
|
||||
$result = $xml->xpath($xpath);
|
||||
$this->assertEquals(1,count($result), 'We expected 1 ' . $xpath . ' elements. We\'ve found ' . count($result) . '. Full result: ' . $this->response->body);
|
||||
|
||||
if (!is_int($v1)) $this->assertEquals($v2,(string)$result[0]);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testCalendarQueryReport
|
||||
*/
|
||||
function testCalendarQueryReportNoFilters() {
|
||||
|
||||
$body =
|
||||
'<?xml version="1.0"?>' .
|
||||
'<c:calendar-query xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">' .
|
||||
'<d:prop>' .
|
||||
' <c:calendar-data />' .
|
||||
' <d:getetag />' .
|
||||
'</d:prop>' .
|
||||
'</c:calendar-query>';
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'REQUEST_URI' => '/calendars/user1//UUID-123467',
|
||||
));
|
||||
$request->setBody($body);
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 400 Bad request',$this->response->status,'Received an unexpected status. Full response body: ' . $this->response->body);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSupportedReportSetProperty
|
||||
* @depends testCalendarMultiGetReport
|
||||
*/
|
||||
function testCalendarQueryReport1Object() {
|
||||
|
||||
$body =
|
||||
'<?xml version="1.0"?>' .
|
||||
'<c:calendar-query xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">' .
|
||||
'<d:prop>' .
|
||||
' <c:calendar-data>' .
|
||||
' <c:expand start="20000101T000000Z" end="20101231T235959Z" />' .
|
||||
' </c:calendar-data>' .
|
||||
' <d:getetag />' .
|
||||
'</d:prop>' .
|
||||
'<c:filter>' .
|
||||
' <c:comp-filter name="VCALENDAR">' .
|
||||
' <c:comp-filter name="VEVENT" />' .
|
||||
' </c:comp-filter>' .
|
||||
'</c:filter>' .
|
||||
'</c:calendar-query>';
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'REQUEST_URI' => '/calendars/user1/UUID-123467/UUID-2345',
|
||||
'HTTP_DEPTH' => '0',
|
||||
));
|
||||
$request->setBody($body);
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status',$this->response->status,'Received an unexpected status. Full response body: ' . $this->response->body);
|
||||
|
||||
$xml = simplexml_load_string($this->response->body);
|
||||
|
||||
$xml->registerXPathNamespace('d','DAV:');
|
||||
$xml->registerXPathNamespace('c','urn:ietf:params:xml:ns:caldav');
|
||||
|
||||
$check = array(
|
||||
'/d:multistatus',
|
||||
'/d:multistatus/d:response',
|
||||
'/d:multistatus/d:response/d:href',
|
||||
'/d:multistatus/d:response/d:propstat',
|
||||
'/d:multistatus/d:response/d:propstat/d:prop',
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/d:getetag',
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/c:calendar-data',
|
||||
'/d:multistatus/d:response/d:propstat/d:status' => 'HTTP/1.1 200 OK',
|
||||
);
|
||||
|
||||
foreach($check as $v1=>$v2) {
|
||||
|
||||
$xpath = is_int($v1)?$v2:$v1;
|
||||
|
||||
$result = $xml->xpath($xpath);
|
||||
$this->assertEquals(1,count($result), 'We expected 1 ' . $xpath . ' elements. We\'ve found ' . count($result) . '. Full result: ' . $this->response->body);
|
||||
|
||||
if (!is_int($v1)) $this->assertEquals($v2,(string)$result[0]);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSupportedReportSetProperty
|
||||
* @depends testCalendarMultiGetReport
|
||||
*/
|
||||
function testCalendarQueryReport1ObjectNoCalData() {
|
||||
|
||||
$body =
|
||||
'<?xml version="1.0"?>' .
|
||||
'<c:calendar-query xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">' .
|
||||
'<d:prop>' .
|
||||
' <d:getetag />' .
|
||||
'</d:prop>' .
|
||||
'<c:filter>' .
|
||||
' <c:comp-filter name="VCALENDAR">' .
|
||||
' <c:comp-filter name="VEVENT" />' .
|
||||
' </c:comp-filter>' .
|
||||
'</c:filter>' .
|
||||
'</c:calendar-query>';
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'REQUEST_URI' => '/calendars/user1/UUID-123467/UUID-2345',
|
||||
'HTTP_DEPTH' => '0',
|
||||
));
|
||||
$request->setBody($body);
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status',$this->response->status,'Received an unexpected status. Full response body: ' . $this->response->body);
|
||||
|
||||
$xml = simplexml_load_string($this->response->body);
|
||||
|
||||
$xml->registerXPathNamespace('d','DAV:');
|
||||
$xml->registerXPathNamespace('c','urn:ietf:params:xml:ns:caldav');
|
||||
|
||||
$check = array(
|
||||
'/d:multistatus',
|
||||
'/d:multistatus/d:response',
|
||||
'/d:multistatus/d:response/d:href',
|
||||
'/d:multistatus/d:response/d:propstat',
|
||||
'/d:multistatus/d:response/d:propstat/d:prop',
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/d:getetag',
|
||||
'/d:multistatus/d:response/d:propstat/d:status' => 'HTTP/1.1 200 OK',
|
||||
);
|
||||
|
||||
foreach($check as $v1=>$v2) {
|
||||
|
||||
$xpath = is_int($v1)?$v2:$v1;
|
||||
|
||||
$result = $xml->xpath($xpath);
|
||||
$this->assertEquals(1,count($result), 'We expected 1 ' . $xpath . ' elements. We\'ve found ' . count($result) . '. Full result: ' . $this->response->body);
|
||||
|
||||
if (!is_int($v1)) $this->assertEquals($v2,(string)$result[0]);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function testHTMLActionsPanel() {
|
||||
|
||||
$output = '';
|
||||
$r = $this->server->broadcastEvent('onHTMLActionsPanel', array($this->server->tree->getNodeForPath('calendars/user1'), &$output));
|
||||
$this->assertFalse($r);
|
||||
|
||||
$this->assertTrue(!!strpos($output,'Display name'));
|
||||
|
||||
}
|
||||
|
||||
function testBrowserPostAction() {
|
||||
|
||||
$r = $this->server->broadcastEvent('onBrowserPostAction', array('calendars/user1', 'mkcalendar', array(
|
||||
'name' => 'NEWCALENDAR',
|
||||
'{DAV:}displayname' => 'foo',
|
||||
)));
|
||||
$this->assertFalse($r);
|
||||
|
||||
$calendars = $this->caldavBackend->getCalendarsForUser('principals/user1');
|
||||
$this->assertEquals(3, count($calendars));
|
||||
|
||||
$newCalendar = null;
|
||||
foreach($calendars as $calendar) {
|
||||
if ($calendar['uri'] === 'NEWCALENDAR') {
|
||||
$newCalendar = $calendar;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$newCalendar)
|
||||
$this->fail('Could not find newly created calendar');
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testCalendarMultiGetReport
|
||||
*/
|
||||
function testCalendarMultiGetReportNoEnd() {
|
||||
|
||||
$body =
|
||||
'<?xml version="1.0"?>' .
|
||||
'<c:calendar-multiget xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">' .
|
||||
'<d:prop>' .
|
||||
' <c:calendar-data>' .
|
||||
' <c:expand start="20110101T000000Z" />' .
|
||||
' </c:calendar-data>' .
|
||||
' <d:getetag />' .
|
||||
'</d:prop>' .
|
||||
'<d:href>/calendars/user1/UUID-123467/UUID-2345</d:href>' .
|
||||
'</c:calendar-multiget>';
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'REQUEST_URI' => '/calendars/user1',
|
||||
'HTTP_DEPTH' => '1',
|
||||
));
|
||||
$request->setBody($body);
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 400 Bad request',$this->response->status,'Invalid HTTP status received. Full response body: ' . $this->response->body);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testCalendarMultiGetReport
|
||||
*/
|
||||
function testCalendarMultiGetReportNoStart() {
|
||||
|
||||
$body =
|
||||
'<?xml version="1.0"?>' .
|
||||
'<c:calendar-multiget xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">' .
|
||||
'<d:prop>' .
|
||||
' <c:calendar-data>' .
|
||||
' <c:expand end="20110101T000000Z" />' .
|
||||
' </c:calendar-data>' .
|
||||
' <d:getetag />' .
|
||||
'</d:prop>' .
|
||||
'<d:href>/calendars/user1/UUID-123467/UUID-2345</d:href>' .
|
||||
'</c:calendar-multiget>';
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'REQUEST_URI' => '/calendars/user1',
|
||||
'HTTP_DEPTH' => '1',
|
||||
));
|
||||
$request->setBody($body);
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 400 Bad request',$this->response->status,'Invalid HTTP status received. Full response body: ' . $this->response->body);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testCalendarMultiGetReport
|
||||
*/
|
||||
function testCalendarMultiGetReportEndBeforeStart() {
|
||||
|
||||
$body =
|
||||
'<?xml version="1.0"?>' .
|
||||
'<c:calendar-multiget xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">' .
|
||||
'<d:prop>' .
|
||||
' <c:calendar-data>' .
|
||||
' <c:expand start="20200101T000000Z" end="20110101T000000Z" />' .
|
||||
' </c:calendar-data>' .
|
||||
' <d:getetag />' .
|
||||
'</d:prop>' .
|
||||
'<d:href>/calendars/user1/UUID-123467/UUID-2345</d:href>' .
|
||||
'</c:calendar-multiget>';
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'REQUEST_URI' => '/calendars/user1',
|
||||
'HTTP_DEPTH' => '1',
|
||||
));
|
||||
$request->setBody($body);
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 400 Bad request',$this->response->status,'Invalid HTTP status received. Full response body: ' . $this->response->body);
|
||||
|
||||
}
|
||||
|
||||
function testNotificationProperties() {
|
||||
|
||||
$request = array(
|
||||
'{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}notificationtype',
|
||||
);
|
||||
$result = array();
|
||||
$notification = new Sabre_CalDAV_Notifications_Node(
|
||||
$this->caldavBackend,
|
||||
new Sabre_CalDAV_Notifications_Notification_SystemStatus('foo')
|
||||
);
|
||||
$this->plugin->beforeGetProperties('foo', $notification, $request, $result);
|
||||
|
||||
$this->assertEquals(
|
||||
array(
|
||||
200 => array(
|
||||
'{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}notificationtype' => $notification->getNotificationType()
|
||||
)
|
||||
), $result);
|
||||
|
||||
}
|
||||
|
||||
function testNotificationGet() {
|
||||
|
||||
$notification = new Sabre_CalDAV_Notifications_Node(
|
||||
$this->caldavBackend,
|
||||
new Sabre_CalDAV_Notifications_Notification_SystemStatus('foo')
|
||||
);
|
||||
|
||||
$server = new Sabre_DAV_Server(array($notification));
|
||||
$caldav = new Sabre_CalDAV_Plugin();
|
||||
|
||||
$httpResponse = new Sabre_HTTP_ResponseMock();
|
||||
$server->httpResponse = $httpResponse;
|
||||
|
||||
$server->addPlugin($caldav);
|
||||
|
||||
$caldav->beforeMethod('GET','foo');
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK', $httpResponse->status);
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml',
|
||||
), $httpResponse->headers);
|
||||
|
||||
$expected =
|
||||
'<?xml version="1.0" encoding="UTF-8"?>
|
||||
<cs:notification xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns" xmlns:cal="urn:ietf:params:xml:ns:caldav" xmlns:cs="http://calendarserver.org/ns/">
|
||||
<cs:systemstatus type="high"/>
|
||||
</cs:notification>
|
||||
';
|
||||
|
||||
$this->assertEquals($expected, $httpResponse->body);
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
18
dav/SabreDAV/tests/Sabre/CalDAV/Principal/CollectionTest.php
Normal file
18
dav/SabreDAV/tests/Sabre/CalDAV/Principal/CollectionTest.php
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/DAVACL/MockPrincipalBackend.php';
|
||||
|
||||
class Sabre_CalDAV_Principal_CollectionTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testGetChildForPrincipal() {
|
||||
|
||||
$back = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$col = new Sabre_CalDAV_Principal_Collection($back);
|
||||
$r = $col->getChildForPrincipal(array(
|
||||
'uri' => 'principals/admin',
|
||||
));
|
||||
$this->assertInstanceOf('Sabre_CalDAV_Principal_User', $r);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
98
dav/SabreDAV/tests/Sabre/CalDAV/Principal/ProxyReadTest.php
Normal file
98
dav/SabreDAV/tests/Sabre/CalDAV/Principal/ProxyReadTest.php
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
<?php
|
||||
|
||||
class Sabre_CalDAV_Principal_ProxyReadTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
protected $backend;
|
||||
|
||||
function getInstance() {
|
||||
|
||||
$backend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$principal = new Sabre_CalDAV_Principal_ProxyRead($backend, array(
|
||||
'uri' => 'principal/user',
|
||||
));
|
||||
$this->backend = $backend;
|
||||
return $principal;
|
||||
|
||||
}
|
||||
|
||||
function testGetName() {
|
||||
|
||||
$i = $this->getInstance();
|
||||
$this->assertEquals('calendar-proxy-read', $i->getName());
|
||||
|
||||
}
|
||||
function testGetDisplayName() {
|
||||
|
||||
$i = $this->getInstance();
|
||||
$this->assertEquals('calendar-proxy-read', $i->getDisplayName());
|
||||
|
||||
}
|
||||
|
||||
function testGetLastModified() {
|
||||
|
||||
$i = $this->getInstance();
|
||||
$this->assertNull($i->getLastModified());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_Forbidden
|
||||
*/
|
||||
function testDelete() {
|
||||
|
||||
$i = $this->getInstance();
|
||||
$i->delete();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_Forbidden
|
||||
*/
|
||||
function testSetName() {
|
||||
|
||||
$i = $this->getInstance();
|
||||
$i->setName('foo');
|
||||
|
||||
}
|
||||
|
||||
function testGetAlternateUriSet() {
|
||||
|
||||
$i = $this->getInstance();
|
||||
$this->assertEquals(array(), $i->getAlternateUriSet());
|
||||
|
||||
}
|
||||
|
||||
function testGetPrincipalUri() {
|
||||
|
||||
$i = $this->getInstance();
|
||||
$this->assertEquals('principal/user/calendar-proxy-read', $i->getPrincipalUrl());
|
||||
|
||||
}
|
||||
|
||||
function testGetGroupMemberSet() {
|
||||
|
||||
$i = $this->getInstance();
|
||||
$this->assertEquals(array(), $i->getGroupMemberSet());
|
||||
|
||||
}
|
||||
|
||||
function testGetGroupMembership() {
|
||||
|
||||
$i = $this->getInstance();
|
||||
$this->assertEquals(array(), $i->getGroupMembership());
|
||||
|
||||
}
|
||||
|
||||
function testSetGroupMemberSet() {
|
||||
|
||||
$i = $this->getInstance();
|
||||
$i->setGroupMemberSet(array('principals/foo'));
|
||||
|
||||
$expected = array(
|
||||
$i->getPrincipalUrl() => array('principals/foo')
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $this->backend->groupMembers);
|
||||
|
||||
}
|
||||
}
|
||||
36
dav/SabreDAV/tests/Sabre/CalDAV/Principal/ProxyWriteTest.php
Normal file
36
dav/SabreDAV/tests/Sabre/CalDAV/Principal/ProxyWriteTest.php
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
|
||||
class Sabre_CalDAV_Principal_ProxyWriteTest extends Sabre_CalDAV_Principal_ProxyReadTest {
|
||||
|
||||
function getInstance() {
|
||||
|
||||
$backend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$principal = new Sabre_CalDAV_Principal_ProxyWrite($backend, array(
|
||||
'uri' => 'principal/user',
|
||||
));
|
||||
$this->backend = $backend;
|
||||
return $principal;
|
||||
|
||||
}
|
||||
|
||||
function testGetName() {
|
||||
|
||||
$i = $this->getInstance();
|
||||
$this->assertEquals('calendar-proxy-write', $i->getName());
|
||||
|
||||
}
|
||||
function testGetDisplayName() {
|
||||
|
||||
$i = $this->getInstance();
|
||||
$this->assertEquals('calendar-proxy-write', $i->getDisplayName());
|
||||
|
||||
}
|
||||
|
||||
function testGetPrincipalUri() {
|
||||
|
||||
$i = $this->getInstance();
|
||||
$this->assertEquals('principal/user/calendar-proxy-write', $i->getPrincipalUrl());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
123
dav/SabreDAV/tests/Sabre/CalDAV/Principal/UserTest.php
Normal file
123
dav/SabreDAV/tests/Sabre/CalDAV/Principal/UserTest.php
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
<?php
|
||||
|
||||
class Sabre_CalDAV_Principal_UserTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function getInstance() {
|
||||
|
||||
$backend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$backend->addPrincipal(array(
|
||||
'uri' => 'principals/user/calendar-proxy-read',
|
||||
));
|
||||
$backend->addPrincipal(array(
|
||||
'uri' => 'principals/user/calendar-proxy-write',
|
||||
));
|
||||
$backend->addPrincipal(array(
|
||||
'uri' => 'principals/user/random',
|
||||
));
|
||||
return new Sabre_CalDAV_Principal_User($backend, array(
|
||||
'uri' => 'principals/user',
|
||||
));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_Forbidden
|
||||
*/
|
||||
function testCreateFile() {
|
||||
|
||||
$u = $this->getInstance();
|
||||
$u->createFile('test');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_Forbidden
|
||||
*/
|
||||
function testCreateDirectory() {
|
||||
|
||||
$u = $this->getInstance();
|
||||
$u->createDirectory('test');
|
||||
|
||||
}
|
||||
|
||||
function testGetChildProxyRead() {
|
||||
|
||||
$u = $this->getInstance();
|
||||
$child = $u->getChild('calendar-proxy-read');
|
||||
$this->assertInstanceOf('Sabre_CalDAV_Principal_ProxyRead', $child);
|
||||
|
||||
}
|
||||
|
||||
function testGetChildProxyWrite() {
|
||||
|
||||
$u = $this->getInstance();
|
||||
$child = $u->getChild('calendar-proxy-write');
|
||||
$this->assertInstanceOf('Sabre_CalDAV_Principal_ProxyWrite', $child);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_NotFound
|
||||
*/
|
||||
function testGetChildNotFound() {
|
||||
|
||||
$u = $this->getInstance();
|
||||
$child = $u->getChild('foo');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_NotFound
|
||||
*/
|
||||
function testGetChildNotFound2() {
|
||||
|
||||
$u = $this->getInstance();
|
||||
$child = $u->getChild('random');
|
||||
|
||||
}
|
||||
|
||||
function testGetChildren() {
|
||||
|
||||
$u = $this->getInstance();
|
||||
$children = $u->getChildren();
|
||||
$this->assertEquals(2, count($children));
|
||||
$this->assertInstanceOf('Sabre_CalDAV_Principal_ProxyRead', $children[0]);
|
||||
$this->assertInstanceOf('Sabre_CalDAV_Principal_ProxyWrite', $children[1]);
|
||||
|
||||
}
|
||||
|
||||
function testChildExist() {
|
||||
|
||||
$u = $this->getInstance();
|
||||
$this->assertTrue($u->childExists('calendar-proxy-read'));
|
||||
$this->assertTrue($u->childExists('calendar-proxy-write'));
|
||||
$this->assertFalse($u->childExists('foo'));
|
||||
|
||||
}
|
||||
|
||||
function testGetACL() {
|
||||
|
||||
$expected = array(
|
||||
array(
|
||||
'privilege' => '{DAV:}read',
|
||||
'principal' => 'principals/user',
|
||||
'protected' => true,
|
||||
),
|
||||
array(
|
||||
'privilege' => '{DAV:}read',
|
||||
'principal' => 'principals/user/calendar-proxy-read',
|
||||
'protected' => true,
|
||||
),
|
||||
array(
|
||||
'privilege' => '{DAV:}read',
|
||||
'principal' => 'principals/user/calendar-proxy-write',
|
||||
'protected' => true,
|
||||
),
|
||||
);
|
||||
|
||||
$u = $this->getInstance();
|
||||
$this->assertEquals($expected, $u->getACL());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
<?php
|
||||
|
||||
class Sabre_CalDAV_Property_SupportedCalendarComponentSetTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testSimple() {
|
||||
|
||||
$sccs = new Sabre_CalDAV_Property_SupportedCalendarComponentSet(array('VEVENT'));
|
||||
$this->assertEquals(array('VEVENT'), $sccs->getValue());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSimple
|
||||
*/
|
||||
function testSerialize() {
|
||||
|
||||
$property = new Sabre_CalDAV_Property_SupportedCalendarComponentSet(array('VEVENT','VJOURNAL'));
|
||||
|
||||
$doc = new DOMDocument();
|
||||
$root = $doc->createElement('d:root');
|
||||
$root->setAttribute('xmlns:d','DAV:');
|
||||
$root->setAttribute('xmlns:cal',Sabre_CalDAV_Plugin::NS_CALDAV);
|
||||
|
||||
$doc->appendChild($root);
|
||||
$objectTree = new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('rootdir'));
|
||||
$server = new Sabre_DAV_Server($objectTree);
|
||||
|
||||
$property->serialize($server, $root);
|
||||
|
||||
$xml = $doc->saveXML();
|
||||
|
||||
$this->assertEquals(
|
||||
'<?xml version="1.0"?>
|
||||
<d:root xmlns:d="DAV:" xmlns:cal="' . Sabre_CalDAV_Plugin::NS_CALDAV . '">' .
|
||||
'<cal:comp name="VEVENT"/>' .
|
||||
'<cal:comp name="VJOURNAL"/>' .
|
||||
'</d:root>
|
||||
', $xml);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSimple
|
||||
*/
|
||||
function testUnserializer() {
|
||||
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:root xmlns:d="DAV:" xmlns:cal="' . Sabre_CalDAV_Plugin::NS_CALDAV . '">' .
|
||||
'<cal:comp name="VEVENT"/>' .
|
||||
'<cal:comp name="VJOURNAL"/>' .
|
||||
'</d:root>';
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
|
||||
|
||||
$property = Sabre_CalDAV_Property_SupportedCalendarComponentSet::unserialize($dom->firstChild);
|
||||
|
||||
$this->assertTrue($property instanceof Sabre_CalDAV_Property_SupportedCalendarComponentSet);
|
||||
$this->assertEquals(array(
|
||||
'VEVENT',
|
||||
'VJOURNAL',
|
||||
),
|
||||
$property->getValue());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
class Sabre_CalDAV_Property_SupportedCalendarDataTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testSimple() {
|
||||
|
||||
$sccs = new Sabre_CalDAV_Property_SupportedCalendarData();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSimple
|
||||
*/
|
||||
function testSerialize() {
|
||||
|
||||
$property = new Sabre_CalDAV_Property_SupportedCalendarData();
|
||||
|
||||
$doc = new DOMDocument();
|
||||
$root = $doc->createElement('d:root');
|
||||
$root->setAttribute('xmlns:d','DAV:');
|
||||
$root->setAttribute('xmlns:cal',Sabre_CalDAV_Plugin::NS_CALDAV);
|
||||
|
||||
$doc->appendChild($root);
|
||||
$objectTree = new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('rootdir'));
|
||||
$server = new Sabre_DAV_Server($objectTree);
|
||||
|
||||
$property->serialize($server, $root);
|
||||
|
||||
$xml = $doc->saveXML();
|
||||
|
||||
$this->assertEquals(
|
||||
'<?xml version="1.0"?>
|
||||
<d:root xmlns:d="DAV:" xmlns:cal="' . Sabre_CalDAV_Plugin::NS_CALDAV . '">' .
|
||||
'<cal:calendar-data content-type="text/calendar" version="2.0"/>' .
|
||||
'</d:root>
|
||||
', $xml);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
<?php
|
||||
|
||||
class Sabre_CalDAV_Property_SupportedCollationSetTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testSimple() {
|
||||
|
||||
$scs = new Sabre_CalDAV_Property_SupportedCollationSet();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSimple
|
||||
*/
|
||||
function testSerialize() {
|
||||
|
||||
$property = new Sabre_CalDAV_Property_SupportedCollationSet();
|
||||
|
||||
$doc = new DOMDocument();
|
||||
$root = $doc->createElement('d:root');
|
||||
$root->setAttribute('xmlns:d','DAV:');
|
||||
$root->setAttribute('xmlns:cal',Sabre_CalDAV_Plugin::NS_CALDAV);
|
||||
|
||||
$doc->appendChild($root);
|
||||
$objectTree = new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('rootdir'));
|
||||
$server = new Sabre_DAV_Server($objectTree);
|
||||
|
||||
$property->serialize($server, $root);
|
||||
|
||||
$xml = $doc->saveXML();
|
||||
|
||||
$this->assertEquals(
|
||||
'<?xml version="1.0"?>
|
||||
<d:root xmlns:d="DAV:" xmlns:cal="' . Sabre_CalDAV_Plugin::NS_CALDAV . '">' .
|
||||
'<cal:supported-collation>i;ascii-casemap</cal:supported-collation>' .
|
||||
'<cal:supported-collation>i;octet</cal:supported-collation>' .
|
||||
'<cal:supported-collation>i;unicode-casemap</cal:supported-collation>' .
|
||||
'</d:root>
|
||||
', $xml);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
50
dav/SabreDAV/tests/Sabre/CalDAV/Schedule/IMip/Mock.php
Normal file
50
dav/SabreDAV/tests/Sabre/CalDAV/Schedule/IMip/Mock.php
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* iMIP handler.
|
||||
*
|
||||
* This class is responsible for sending out iMIP messages. iMIP is the
|
||||
* email-based transport for iTIP. iTIP deals with scheduling operations for
|
||||
* iCalendar objects.
|
||||
*
|
||||
* If you want to customize the email that gets sent out, you can do so by
|
||||
* extending this class and overriding the sendMessage method.
|
||||
*
|
||||
* @package Sabre
|
||||
* @subpackage CalDAV
|
||||
* @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
|
||||
* @author Evert Pot (http://www.rooftopsolutions.nl/)
|
||||
* @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
|
||||
*/
|
||||
class Sabre_CalDAV_Schedule_IMip_Mock extends Sabre_CalDAV_Schedule_IMip {
|
||||
|
||||
protected $emails = array();
|
||||
|
||||
/**
|
||||
* This function is reponsible for sending the actual email.
|
||||
*
|
||||
* @param string $to Recipient email address
|
||||
* @param string $subject Subject of the email
|
||||
* @param string $body iCalendar body
|
||||
* @param array $headers List of headers
|
||||
* @return void
|
||||
*/
|
||||
protected function mail($to, $subject, $body, array $headers) {
|
||||
|
||||
$this->emails[] = array(
|
||||
'to' => $to,
|
||||
'subject' => $subject,
|
||||
'body' => $body,
|
||||
'headers' => $headers,
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
public function getSentEmails() {
|
||||
|
||||
return $this->emails;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
58
dav/SabreDAV/tests/Sabre/CalDAV/Schedule/OutboxTest.php
Normal file
58
dav/SabreDAV/tests/Sabre/CalDAV/Schedule/OutboxTest.php
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
<?php
|
||||
|
||||
class Sabre_CalDAV_Schedule_OutboxTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testSetup() {
|
||||
|
||||
$outbox = new Sabre_CalDAV_Schedule_Outbox('principals/user1');
|
||||
$this->assertEquals('outbox', $outbox->getName());
|
||||
$this->assertEquals(array(), $outbox->getChildren());
|
||||
$this->assertEquals('principals/user1', $outbox->getOwner());
|
||||
$this->assertEquals(null, $outbox->getGroup());
|
||||
|
||||
$this->assertEquals(array(
|
||||
array(
|
||||
'privilege' => '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}schedule-query-freebusy',
|
||||
'principal' => 'principals/user1',
|
||||
'protected' => true,
|
||||
),
|
||||
array(
|
||||
'privilege' => '{DAV:}read',
|
||||
'principal' => 'principals/user1',
|
||||
'protected' => true,
|
||||
),
|
||||
), $outbox->getACL());
|
||||
|
||||
$ok = false;
|
||||
try {
|
||||
$outbox->setACL(array());
|
||||
} catch (Sabre_DAV_Exception_MethodNotAllowed $e) {
|
||||
$ok = true;
|
||||
}
|
||||
if (!$ok) {
|
||||
$this->fail('Exception was not emitted');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function testGetSupportedPrivilegeSet() {
|
||||
|
||||
$outbox = new Sabre_CalDAV_Schedule_Outbox('principals/user1');
|
||||
$r = $outbox->getSupportedPrivilegeSet();
|
||||
|
||||
$ok = false;
|
||||
foreach($r['aggregates'] as $priv) {
|
||||
|
||||
if ($priv['privilege'] == '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}schedule-query-freebusy') {
|
||||
$ok = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$ok) {
|
||||
$this->fail('{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}schedule-query-freebusy was not found as a supported privilege');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
31
dav/SabreDAV/tests/Sabre/CalDAV/ServerTest.php
Normal file
31
dav/SabreDAV/tests/Sabre/CalDAV/ServerTest.php
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/CalDAV/TestUtil.php';
|
||||
|
||||
class Sabre_CalDAV_ServerTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* The CalDAV server is a simple script that just composes a
|
||||
* Sabre_DAV_Server. All we really have to do is check if the setup
|
||||
* is done correctly.
|
||||
*/
|
||||
function testSetup() {
|
||||
|
||||
if (!SABRE_HASSQLITE) $this->markTestSkipped('SQLite driver is not available');
|
||||
$pdo = Sabre_CalDAV_TestUtil::getSQLiteDB();
|
||||
$server = new Sabre_CalDAV_Server($pdo);
|
||||
|
||||
$authPlugin = $server->getPlugin('auth');
|
||||
$this->assertTrue($authPlugin instanceof Sabre_DAV_Auth_Plugin);
|
||||
|
||||
$caldavPlugin = $server->getPlugin('caldav');
|
||||
$this->assertTrue($caldavPlugin instanceof Sabre_CalDAV_Plugin);
|
||||
|
||||
$node = $server->tree->getNodeForPath('');
|
||||
$this->assertTrue($node instanceof Sabre_DAV_SimpleCollection);
|
||||
|
||||
$this->assertEquals('root', $node->getName());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
206
dav/SabreDAV/tests/Sabre/CalDAV/TestUtil.php
Normal file
206
dav/SabreDAV/tests/Sabre/CalDAV/TestUtil.php
Normal file
|
|
@ -0,0 +1,206 @@
|
|||
<?php
|
||||
|
||||
class Sabre_CalDAV_TestUtil {
|
||||
|
||||
static function getBackend() {
|
||||
|
||||
$backend = new Sabre_CalDAV_Backend_PDO(self::getSQLiteDB());
|
||||
return $backend;
|
||||
|
||||
}
|
||||
|
||||
static function getSQLiteDB() {
|
||||
|
||||
if (file_exists(SABRE_TEMPDIR . '/testdb.sqlite'))
|
||||
unlink(SABRE_TEMPDIR . '/testdb.sqlite');
|
||||
|
||||
$pdo = new PDO('sqlite:' . SABRE_TEMPDIR . '/testdb.sqlite');
|
||||
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
|
||||
|
||||
// Yup this is definitely not 'fool proof', but good enough for now.
|
||||
$queries = explode(';', file_get_contents(__DIR__ . '/../../../examples/sql/sqlite.calendars.sql'));
|
||||
foreach($queries as $query) {
|
||||
$pdo->exec($query);
|
||||
}
|
||||
// Inserting events through a backend class.
|
||||
$backend = new Sabre_CalDAV_Backend_PDO($pdo);
|
||||
$calendarId = $backend->createCalendar(
|
||||
'principals/user1',
|
||||
'UUID-123467',
|
||||
array(
|
||||
'{DAV:}displayname' => 'user1 calendar',
|
||||
'{urn:ietf:params:xml:ns:caldav}calendar-description' => 'Calendar description',
|
||||
'{http://apple.com/ns/ical/}calendar-order' => '1',
|
||||
'{http://apple.com/ns/ical/}calendar-color' => '#FF0000',
|
||||
)
|
||||
);
|
||||
$backend->createCalendar(
|
||||
'principals/user1',
|
||||
'UUID-123468',
|
||||
array(
|
||||
'{DAV:}displayname' => 'user1 calendar2',
|
||||
'{urn:ietf:params:xml:ns:caldav}calendar-description' => 'Calendar description',
|
||||
'{http://apple.com/ns/ical/}calendar-order' => '1',
|
||||
'{http://apple.com/ns/ical/}calendar-color' => '#FF0000',
|
||||
)
|
||||
);
|
||||
$backend->createCalendarObject($calendarId, 'UUID-2345', self::getTestCalendarData());
|
||||
return $pdo;
|
||||
|
||||
}
|
||||
|
||||
static function getTestCalendarData($type = 1) {
|
||||
|
||||
$calendarData = 'BEGIN:VCALENDAR
|
||||
VERSION:2.0
|
||||
PRODID:-//Apple Inc.//iCal 4.0.1//EN
|
||||
CALSCALE:GREGORIAN
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:Asia/Seoul
|
||||
BEGIN:DAYLIGHT
|
||||
TZOFFSETFROM:+0900
|
||||
RRULE:FREQ=YEARLY;UNTIL=19880507T150000Z;BYMONTH=5;BYDAY=2SU
|
||||
DTSTART:19870510T000000
|
||||
TZNAME:GMT+09:00
|
||||
TZOFFSETTO:+1000
|
||||
END:DAYLIGHT
|
||||
BEGIN:STANDARD
|
||||
TZOFFSETFROM:+1000
|
||||
DTSTART:19881009T000000
|
||||
TZNAME:GMT+09:00
|
||||
TZOFFSETTO:+0900
|
||||
END:STANDARD
|
||||
END:VTIMEZONE
|
||||
BEGIN:VEVENT
|
||||
CREATED:20100225T154229Z
|
||||
UID:39A6B5ED-DD51-4AFE-A683-C35EE3749627
|
||||
TRANSP:TRANSPARENT
|
||||
SUMMARY:Something here
|
||||
DTSTAMP:20100228T130202Z';
|
||||
|
||||
switch($type) {
|
||||
case 1 :
|
||||
$calendarData.="\nDTSTART;TZID=Asia/Seoul:20100223T060000\nDTEND;TZID=Asia/Seoul:20100223T070000\n";
|
||||
break;
|
||||
case 2 :
|
||||
$calendarData.="\nDTSTART:20100223T060000\nDTEND:20100223T070000\n";
|
||||
break;
|
||||
case 3 :
|
||||
$calendarData.="\nDTSTART;VALUE=DATE:20100223\nDTEND;VALUE=DATE:20100223\n";
|
||||
break;
|
||||
case 4 :
|
||||
$calendarData.="\nDTSTART;TZID=Asia/Seoul:20100223T060000\nDURATION:PT1H\n";
|
||||
break;
|
||||
case 5 :
|
||||
$calendarData.="\nDTSTART;TZID=Asia/Seoul:20100223T060000\nDURATION:-P5D\n";
|
||||
break;
|
||||
case 6 :
|
||||
$calendarData.="\nDTSTART;VALUE=DATE:20100223\n";
|
||||
break;
|
||||
case 7 :
|
||||
$calendarData.="\nDTSTART;VALUE=DATETIME:20100223T060000\n";
|
||||
break;
|
||||
|
||||
// No DTSTART, so intentionally broken
|
||||
case 'X' :
|
||||
$calendarData.="\n";
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
$calendarData.='ATTENDEE;PARTSTAT=NEEDS-ACTION:mailto:lisa@example.com
|
||||
SEQUENCE:2
|
||||
END:VEVENT
|
||||
END:VCALENDAR';
|
||||
|
||||
return $calendarData;
|
||||
|
||||
}
|
||||
|
||||
static function getTestTODO($type = 'due') {
|
||||
|
||||
switch($type) {
|
||||
|
||||
case 'due' :
|
||||
$extra = "DUE:20100104T000000Z";
|
||||
break;
|
||||
case 'due2' :
|
||||
$extra = "DUE:20060104T000000Z";
|
||||
break;
|
||||
case 'due_date' :
|
||||
$extra = "DUE;VALUE=DATE:20060104";
|
||||
break;
|
||||
case 'due_tz' :
|
||||
$extra = "DUE;TZID=Asia/Seoul:20060104T000000Z";
|
||||
break;
|
||||
case 'due_dtstart' :
|
||||
$extra = "DTSTART:20050223T060000Z\nDUE:20060104T000000Z";
|
||||
break;
|
||||
case 'due_dtstart2' :
|
||||
$extra = "DTSTART:20090223T060000Z\nDUE:20100104T000000Z";
|
||||
break;
|
||||
case 'dtstart' :
|
||||
$extra = 'DTSTART:20100223T060000Z';
|
||||
break;
|
||||
case 'dtstart2' :
|
||||
$extra = 'DTSTART:20060223T060000Z';
|
||||
break;
|
||||
case 'dtstart_date' :
|
||||
$extra = 'DTSTART;VALUE=DATE:20100223';
|
||||
break;
|
||||
case 'dtstart_tz' :
|
||||
$extra = 'DTSTART;TZID=Asia/Seoul:20100223T060000Z';
|
||||
break;
|
||||
case 'dtstart_duration' :
|
||||
$extra = "DTSTART:20061023T060000Z\nDURATION:PT1H";
|
||||
break;
|
||||
case 'dtstart_duration2' :
|
||||
$extra = "DTSTART:20101023T060000Z\nDURATION:PT1H";
|
||||
break;
|
||||
case 'completed' :
|
||||
$extra = 'COMPLETED:20060601T000000Z';
|
||||
break;
|
||||
case 'completed2' :
|
||||
$extra = 'COMPLETED:20090601T000000Z';
|
||||
break;
|
||||
case 'created' :
|
||||
$extra = 'CREATED:20060601T000000Z';
|
||||
break;
|
||||
case 'created2' :
|
||||
$extra = 'CREATED:20090601T000000Z';
|
||||
break;
|
||||
case 'completedcreated' :
|
||||
$extra = "CREATED:20060601T000000Z\nCOMPLETED:20070101T000000Z";
|
||||
break;
|
||||
case 'completedcreated2' :
|
||||
$extra = "CREATED:20090601T000000Z\nCOMPLETED:20100101T000000Z";
|
||||
break;
|
||||
case 'notime' :
|
||||
$extra = 'X-FILLER:oh hello';
|
||||
break;
|
||||
default :
|
||||
throw new Exception('Unknown type: ' . $type);
|
||||
|
||||
}
|
||||
|
||||
$todo = 'BEGIN:VCALENDAR
|
||||
VERSION:2.0
|
||||
PRODID:-//Example Corp.//CalDAV Client//EN
|
||||
BEGIN:VTODO
|
||||
DTSTAMP:20060205T235335Z
|
||||
' . $extra . '
|
||||
STATUS:NEEDS-ACTION
|
||||
SUMMARY:Task #1
|
||||
UID:DDDEEB7915FA61233B861457@example.com
|
||||
BEGIN:VALARM
|
||||
ACTION:AUDIO
|
||||
TRIGGER;RELATED=START:-PT10M
|
||||
END:VALARM
|
||||
END:VTODO
|
||||
END:VCALENDAR';
|
||||
|
||||
return $todo;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
185
dav/SabreDAV/tests/Sabre/CalDAV/UserCalendarsTest.php
Normal file
185
dav/SabreDAV/tests/Sabre/CalDAV/UserCalendarsTest.php
Normal file
|
|
@ -0,0 +1,185 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/CalDAV/TestUtil.php';
|
||||
require_once 'Sabre/DAVACL/MockPrincipalBackend.php';
|
||||
|
||||
/**
|
||||
* @covers Sabre_CalDAV_UserCalendars
|
||||
*/
|
||||
class Sabre_CalDAV_UserCalendarsTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @var Sabre_CalDAV_UserCalendars
|
||||
*/
|
||||
protected $usercalendars;
|
||||
/**
|
||||
* @var Sabre_CalDAV_Backend_PDO
|
||||
*/
|
||||
protected $backend;
|
||||
protected $principalBackend;
|
||||
|
||||
function setup() {
|
||||
|
||||
if (!SABRE_HASSQLITE) $this->markTestSkipped('SQLite driver is not available');
|
||||
$this->backend = Sabre_CalDAV_TestUtil::getBackend();
|
||||
$this->principalBackend = new Sabre_DAVACL_MockPrincipalBackend('realm');
|
||||
$this->usercalendars = new Sabre_CalDAV_UserCalendars($this->principalBackend, $this->backend, 'principals/user1');
|
||||
|
||||
}
|
||||
|
||||
function testSimple() {
|
||||
|
||||
$this->assertEquals('user1',$this->usercalendars->getName());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_NotFound
|
||||
* @depends testSimple
|
||||
*/
|
||||
function testGetChildNotFound() {
|
||||
|
||||
$this->usercalendars->getChild('randomname');
|
||||
|
||||
}
|
||||
|
||||
function testChildExists() {
|
||||
|
||||
$this->assertFalse($this->usercalendars->childExists('foo'));
|
||||
$this->assertTrue($this->usercalendars->childExists('UUID-123467'));
|
||||
|
||||
}
|
||||
|
||||
function testGetOwner() {
|
||||
|
||||
$this->assertEquals('principals/user1', $this->usercalendars->getOwner());
|
||||
|
||||
}
|
||||
|
||||
function testGetGroup() {
|
||||
|
||||
$this->assertNull($this->usercalendars->getGroup());
|
||||
|
||||
}
|
||||
|
||||
function testGetACL() {
|
||||
|
||||
$expected = array(
|
||||
array(
|
||||
'privilege' => '{DAV:}read',
|
||||
'principal' => 'principals/user1',
|
||||
'protected' => true,
|
||||
),
|
||||
array(
|
||||
'privilege' => '{DAV:}write',
|
||||
'principal' => 'principals/user1',
|
||||
'protected' => true,
|
||||
),
|
||||
array(
|
||||
'privilege' => '{DAV:}read',
|
||||
'principal' => 'principals/user1/calendar-proxy-write',
|
||||
'protected' => true,
|
||||
),
|
||||
array(
|
||||
'privilege' => '{DAV:}write',
|
||||
'principal' => 'principals/user1/calendar-proxy-write',
|
||||
'protected' => true,
|
||||
),
|
||||
array(
|
||||
'privilege' => '{DAV:}read',
|
||||
'principal' => 'principals/user1/calendar-proxy-read',
|
||||
'protected' => true,
|
||||
),
|
||||
);
|
||||
$this->assertEquals($expected, $this->usercalendars->getACL());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_MethodNotAllowed
|
||||
*/
|
||||
function testSetACL() {
|
||||
|
||||
$this->usercalendars->setACL(array());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_Forbidden
|
||||
* @depends testSimple
|
||||
*/
|
||||
function testSetName() {
|
||||
|
||||
$this->usercalendars->setName('bla');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_Forbidden
|
||||
* @depends testSimple
|
||||
*/
|
||||
function testDelete() {
|
||||
|
||||
$this->usercalendars->delete();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSimple
|
||||
*/
|
||||
function testGetLastModified() {
|
||||
|
||||
$this->assertNull($this->usercalendars->getLastModified());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_MethodNotAllowed
|
||||
* @depends testSimple
|
||||
*/
|
||||
function testCreateFile() {
|
||||
|
||||
$this->usercalendars->createFile('bla');
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_MethodNotAllowed
|
||||
* @depends testSimple
|
||||
*/
|
||||
function testCreateDirectory() {
|
||||
|
||||
$this->usercalendars->createDirectory('bla');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSimple
|
||||
*/
|
||||
function testCreateExtendedCollection() {
|
||||
|
||||
$result = $this->usercalendars->createExtendedCollection('newcalendar', array('{DAV:}collection', '{urn:ietf:params:xml:ns:caldav}calendar'), array());
|
||||
$this->assertNull($result);
|
||||
$cals = $this->backend->getCalendarsForUser('principals/user1');
|
||||
$this->assertEquals(3,count($cals));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_InvalidResourceType
|
||||
* @depends testSimple
|
||||
*/
|
||||
function testCreateExtendedCollectionBadResourceType() {
|
||||
|
||||
$this->usercalendars->createExtendedCollection('newcalendar', array('{DAV:}collection','{DAV:}blabla'), array());
|
||||
|
||||
}
|
||||
|
||||
function testGetSupportedPrivilegesSet() {
|
||||
|
||||
$this->assertNull($this->usercalendars->getSupportedPrivilegeSet());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
246
dav/SabreDAV/tests/Sabre/CalDAV/ValidateICalTest.php
Normal file
246
dav/SabreDAV/tests/Sabre/CalDAV/ValidateICalTest.php
Normal file
|
|
@ -0,0 +1,246 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/CalDAV/Backend/Mock.php';
|
||||
require_once 'Sabre/DAVACL/MockPrincipalBackend.php';
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
|
||||
class Sabre_CalDAV_ValidateICalTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @var Sabre_DAV_Server
|
||||
*/
|
||||
protected $server;
|
||||
/**
|
||||
* @var Sabre_CalDAV_Backend_Mock
|
||||
*/
|
||||
protected $calBackend;
|
||||
|
||||
function setUp() {
|
||||
|
||||
$calendars = array(
|
||||
array(
|
||||
'id' => 'calendar1',
|
||||
'principaluri' => 'principals/admin',
|
||||
'uri' => 'calendar1',
|
||||
'{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => new Sabre_CalDAV_Property_SupportedCalendarComponentSet( array('VEVENT','VTODO','VJOURNAL') ),
|
||||
),
|
||||
array(
|
||||
'id' => 'calendar2',
|
||||
'principaluri' => 'principals/admin',
|
||||
'uri' => 'calendar2',
|
||||
'{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => new Sabre_CalDAV_Property_SupportedCalendarComponentSet( array('VTODO','VJOURNAL') ),
|
||||
)
|
||||
);
|
||||
|
||||
$this->calBackend = new Sabre_CalDAV_Backend_Mock($calendars,array());
|
||||
$principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
|
||||
$tree = array(
|
||||
new Sabre_CalDAV_CalendarRootNode($principalBackend, $this->calBackend),
|
||||
);
|
||||
|
||||
$this->server = new Sabre_DAV_Server($tree);
|
||||
$this->server->debugExceptions = true;
|
||||
|
||||
$plugin = new Sabre_CalDAV_Plugin();
|
||||
$this->server->addPlugin($plugin);
|
||||
|
||||
$response = new Sabre_HTTP_ResponseMock();
|
||||
$this->server->httpResponse = $response;
|
||||
|
||||
}
|
||||
|
||||
function request(Sabre_HTTP_Request $request) {
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
return $this->server->httpResponse;
|
||||
|
||||
}
|
||||
|
||||
function testCreateFile() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics',
|
||||
));
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 415 Unsupported Media Type', $response->status);
|
||||
|
||||
}
|
||||
|
||||
function testCreateFileValid() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics',
|
||||
));
|
||||
$request->setBody("BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nUID:foo\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n");
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 201 Created', $response->status, 'Incorrect status returned! Full response body: ' . $response->body);
|
||||
$expected = array(
|
||||
'uri' => 'blabla.ics',
|
||||
'calendardata' => "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nUID:foo\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n",
|
||||
'calendarid' => 'calendar1',
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $this->calBackend->getCalendarObject('calendar1','blabla.ics'));
|
||||
|
||||
}
|
||||
|
||||
function testCreateFileNoComponents() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics',
|
||||
));
|
||||
$request->setBody("BEGIN:VCALENDAR\r\nEND:VCALENDAR\r\n");
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 400 Bad request', $response->status, 'Incorrect status returned! Full response body: ' . $response->body);
|
||||
|
||||
}
|
||||
|
||||
function testCreateFileNoUID() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics',
|
||||
));
|
||||
$request->setBody("BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n");
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 400 Bad request', $response->status, 'Incorrect status returned! Full response body: ' . $response->body);
|
||||
|
||||
}
|
||||
|
||||
function testCreateFileVCard() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics',
|
||||
));
|
||||
$request->setBody("BEGIN:VCARD\r\nEND:VCARD\r\n");
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 415 Unsupported Media Type', $response->status, 'Incorrect status returned! Full response body: ' . $response->body);
|
||||
|
||||
}
|
||||
|
||||
function testCreateFile2Components() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics',
|
||||
));
|
||||
$request->setBody("BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nUID:foo\r\nEND:VEVENT\r\nBEGIN:VJOURNAL\r\nUID:foo\r\nEND:VJOURNAL\r\nEND:VCALENDAR\r\n");
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 400 Bad request', $response->status, 'Incorrect status returned! Full response body: ' . $response->body);
|
||||
|
||||
}
|
||||
|
||||
function testCreateFile2UIDS() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics',
|
||||
));
|
||||
$request->setBody("BEGIN:VCALENDAR\r\nBEGIN:VTIMEZONE\r\nEND:VTIMEZONE\r\nBEGIN:VEVENT\r\nUID:foo\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nUID:bar\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n");
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 400 Bad request', $response->status, 'Incorrect status returned! Full response body: ' . $response->body);
|
||||
|
||||
}
|
||||
|
||||
function testCreateFileWrongComponent() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics',
|
||||
));
|
||||
$request->setBody("BEGIN:VCALENDAR\r\nBEGIN:VTIMEZONE\r\nEND:VTIMEZONE\r\nBEGIN:VFREEBUSY\r\nUID:foo\r\nEND:VFREEBUSY\r\nEND:VCALENDAR\r\n");
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 400 Bad request', $response->status, 'Incorrect status returned! Full response body: ' . $response->body);
|
||||
|
||||
}
|
||||
|
||||
function testUpdateFile() {
|
||||
|
||||
$this->calBackend->createCalendarObject('calendar1','blabla.ics','foo');
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics',
|
||||
));
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 415 Unsupported Media Type', $response->status);
|
||||
|
||||
}
|
||||
|
||||
function testUpdateFileParsableBody() {
|
||||
|
||||
$this->calBackend->createCalendarObject('calendar1','blabla.ics','foo');
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics',
|
||||
));
|
||||
$body = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nUID:foo\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n";
|
||||
$request->setBody($body);
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 204 No Content', $response->status);
|
||||
|
||||
$expected = array(
|
||||
'uri' => 'blabla.ics',
|
||||
'calendardata' => $body,
|
||||
'calendarid' => 'calendar1',
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $this->calBackend->getCalendarObject('calendar1','blabla.ics'));
|
||||
|
||||
}
|
||||
|
||||
function testCreateFileInvalidComponent() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'REQUEST_URI' => '/calendars/admin/calendar2/blabla.ics',
|
||||
));
|
||||
$request->setBody("BEGIN:VCALENDAR\r\nBEGIN:VTIMEZONE\r\nEND:VTIMEZONE\r\nBEGIN:VEVENT\r\nUID:foo\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n");
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 403 Forbidden', $response->status, 'Incorrect status returned! Full response body: ' . $response->body);
|
||||
|
||||
}
|
||||
|
||||
function testUpdateFileInvalidComponent() {
|
||||
|
||||
$this->calBackend->createCalendarObject('calendar2','blabla.ics','foo');
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'REQUEST_URI' => '/calendars/admin/calendar2/blabla.ics',
|
||||
));
|
||||
$request->setBody("BEGIN:VCALENDAR\r\nBEGIN:VTIMEZONE\r\nEND:VTIMEZONE\r\nBEGIN:VEVENT\r\nUID:foo\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n");
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 403 Forbidden', $response->status, 'Incorrect status returned! Full response body: ' . $response->body);
|
||||
|
||||
}
|
||||
}
|
||||
15
dav/SabreDAV/tests/Sabre/CalDAV/VersionTest.php
Normal file
15
dav/SabreDAV/tests/Sabre/CalDAV/VersionTest.php
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
|
||||
class Sabre_CalDAV_VersionTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testString() {
|
||||
|
||||
$v = Sabre_CalDAV_Version::VERSION;
|
||||
$this->assertEquals(-1, version_compare('1.0.0',$v));
|
||||
|
||||
$s = Sabre_CalDAV_Version::STABILITY;
|
||||
$this->assertTrue($s == 'alpha' || $s == 'beta' || $s =='stable');
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
39
dav/SabreDAV/tests/Sabre/CardDAV/AbstractPluginTest.php
Normal file
39
dav/SabreDAV/tests/Sabre/CardDAV/AbstractPluginTest.php
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/CardDAV/Backend/Mock.php';
|
||||
require_once 'Sabre/DAVACL/MockPrincipalBackend.php';
|
||||
|
||||
abstract class Sabre_CardDAV_AbstractPluginTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @var Sabre_CardDAV_Plugin
|
||||
*/
|
||||
protected $plugin;
|
||||
/**
|
||||
* @var Sabre_DAV_Server
|
||||
*/
|
||||
protected $server;
|
||||
/**
|
||||
* @var Sabre_CardDAV_MockBackend
|
||||
*/
|
||||
protected $backend;
|
||||
|
||||
function setUp() {
|
||||
|
||||
$this->backend = new Sabre_CardDAV_Backend_Mock();
|
||||
$principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
|
||||
$tree = array(
|
||||
new Sabre_CardDAV_AddressBookRoot($principalBackend, $this->backend),
|
||||
new Sabre_DAVACL_PrincipalCollection($principalBackend)
|
||||
);
|
||||
|
||||
$this->plugin = new Sabre_CardDAV_Plugin();
|
||||
$this->plugin->directories = array('directory');
|
||||
$this->server = new Sabre_DAV_Server($tree);
|
||||
$this->server->addPlugin($this->plugin);
|
||||
$this->server->debugExceptions = true;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
325
dav/SabreDAV/tests/Sabre/CardDAV/AddressBookQueryParserTest.php
Normal file
325
dav/SabreDAV/tests/Sabre/CardDAV/AddressBookQueryParserTest.php
Normal file
|
|
@ -0,0 +1,325 @@
|
|||
<?php
|
||||
|
||||
class Sabre_CardDAV_AddressBookQueryParserTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function parse($xml) {
|
||||
|
||||
$xml = implode("\n", $xml);
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
|
||||
|
||||
$q = new Sabre_CardDAV_AddressBookQueryParser($dom);
|
||||
$q->parse();
|
||||
return $q;
|
||||
|
||||
}
|
||||
|
||||
function testFilterBasic() {
|
||||
|
||||
$xml = array(
|
||||
'<?xml version="1.0"?>',
|
||||
'<c:addressbook-query xmlns:c="urn:ietf:params:xml:ns:carddav" xmlns:d="DAV:">',
|
||||
' <d:prop>',
|
||||
' <d:foo />',
|
||||
' </d:prop>',
|
||||
' <c:filter>',
|
||||
' <c:prop-filter name="NICKNAME" />',
|
||||
' </c:filter>',
|
||||
'</c:addressbook-query>'
|
||||
);
|
||||
|
||||
$q = $this->parse($xml);
|
||||
|
||||
$this->assertEquals(
|
||||
array('{DAV:}foo'),
|
||||
$q->requestedProperties
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
array(
|
||||
array(
|
||||
'name' => 'NICKNAME',
|
||||
'test' => 'anyof',
|
||||
'is-not-defined' => false,
|
||||
'param-filters' => array(),
|
||||
'text-matches' => array(),
|
||||
),
|
||||
),
|
||||
$q->filters
|
||||
);
|
||||
|
||||
$this->assertNull($q->limit);
|
||||
$this->assertEquals('anyof', $q->test);
|
||||
|
||||
}
|
||||
|
||||
function testNoFilter() {
|
||||
|
||||
// This is non-standard, but helps working around a KDE bug
|
||||
$xml = array(
|
||||
'<?xml version="1.0"?>',
|
||||
'<c:addressbook-query xmlns:c="urn:ietf:params:xml:ns:carddav" xmlns:d="DAV:">',
|
||||
' <d:prop>',
|
||||
' <d:foo />',
|
||||
' </d:prop>',
|
||||
'</c:addressbook-query>'
|
||||
);
|
||||
|
||||
$q = $this->parse($xml);
|
||||
|
||||
$this->assertEquals(
|
||||
array('{DAV:}foo'),
|
||||
$q->requestedProperties
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
array(),
|
||||
$q->filters
|
||||
);
|
||||
|
||||
$this->assertNull($q->limit);
|
||||
$this->assertEquals('anyof', $q->test);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_BadRequest
|
||||
*/
|
||||
function testFilterDoubleFilter() {
|
||||
|
||||
$xml = array(
|
||||
'<?xml version="1.0"?>',
|
||||
'<c:addressbook-query xmlns:c="urn:ietf:params:xml:ns:carddav" xmlns:d="DAV:">',
|
||||
' <d:prop>',
|
||||
' <d:foo />',
|
||||
' </d:prop>',
|
||||
' <c:filter>',
|
||||
' <c:prop-filter name="NICKNAME" />',
|
||||
' </c:filter>',
|
||||
' <c:filter>',
|
||||
' <c:prop-filter name="NICKNAME" />',
|
||||
' </c:filter>',
|
||||
'</c:addressbook-query>'
|
||||
);
|
||||
|
||||
$q = $this->parse($xml);
|
||||
|
||||
}
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_BadRequest
|
||||
*/
|
||||
function testFilterCorruptTest() {
|
||||
|
||||
$xml = array(
|
||||
'<?xml version="1.0"?>',
|
||||
'<c:addressbook-query xmlns:c="urn:ietf:params:xml:ns:carddav" xmlns:d="DAV:">',
|
||||
' <d:prop>',
|
||||
' <d:foo />',
|
||||
' </d:prop>',
|
||||
' <c:filter test="foo">',
|
||||
' <c:prop-filter name="NICKNAME" />',
|
||||
' </c:filter>',
|
||||
'</c:addressbook-query>'
|
||||
);
|
||||
|
||||
$q = $this->parse($xml);
|
||||
|
||||
}
|
||||
|
||||
function testPropFilter() {
|
||||
|
||||
$xml = array(
|
||||
'<?xml version="1.0"?>',
|
||||
'<c:addressbook-query xmlns:c="urn:ietf:params:xml:ns:carddav" xmlns:d="DAV:">',
|
||||
' <d:prop>',
|
||||
' <d:foo />',
|
||||
' </d:prop>',
|
||||
' <c:filter test="allof">',
|
||||
' <c:prop-filter name="NICKNAME" />',
|
||||
' <c:prop-filter name="EMAIL" test="allof" />',
|
||||
' <c:prop-filter name="FN">',
|
||||
' <c:is-not-defined />',
|
||||
' </c:prop-filter>',
|
||||
' </c:filter>',
|
||||
' <c:limit><c:nresults>4</c:nresults></c:limit>',
|
||||
'</c:addressbook-query>'
|
||||
);
|
||||
|
||||
$q = $this->parse($xml);
|
||||
|
||||
$this->assertEquals(
|
||||
array(
|
||||
array(
|
||||
'name' => 'NICKNAME',
|
||||
'test' => 'anyof',
|
||||
'is-not-defined' => false,
|
||||
'param-filters' => array(),
|
||||
'text-matches' => array(),
|
||||
),
|
||||
array(
|
||||
'name' => 'EMAIL',
|
||||
'test' => 'allof',
|
||||
'is-not-defined' => false,
|
||||
'param-filters' => array(),
|
||||
'text-matches' => array(),
|
||||
),
|
||||
array(
|
||||
'name' => 'FN',
|
||||
'test' => 'anyof',
|
||||
'is-not-defined' => true,
|
||||
'param-filters' => array(),
|
||||
'text-matches' => array(),
|
||||
),
|
||||
),
|
||||
$q->filters
|
||||
);
|
||||
|
||||
$this->assertEquals(4,$q->limit);
|
||||
$this->assertEquals('allof', $q->test);
|
||||
|
||||
}
|
||||
|
||||
function testParamFilter() {
|
||||
|
||||
$xml = array(
|
||||
'<?xml version="1.0"?>',
|
||||
'<c:addressbook-query xmlns:c="urn:ietf:params:xml:ns:carddav" xmlns:d="DAV:">',
|
||||
' <d:prop>',
|
||||
' <d:foo />',
|
||||
' </d:prop>',
|
||||
' <c:filter>',
|
||||
' <c:prop-filter name="NICKNAME">',
|
||||
' <c:param-filter name="BLA" />',
|
||||
' <c:param-filter name="BLA2">',
|
||||
' <c:is-not-defined />',
|
||||
' </c:param-filter>',
|
||||
' </c:prop-filter>',
|
||||
' </c:filter>',
|
||||
'</c:addressbook-query>'
|
||||
);
|
||||
|
||||
$q = $this->parse($xml);
|
||||
|
||||
$this->assertEquals(
|
||||
array(
|
||||
array(
|
||||
'name' => 'NICKNAME',
|
||||
'test' => 'anyof',
|
||||
'is-not-defined' => false,
|
||||
'param-filters' => array(
|
||||
array(
|
||||
'name' => 'BLA',
|
||||
'is-not-defined' => false,
|
||||
'text-match' => null
|
||||
),
|
||||
array(
|
||||
'name' => 'BLA2',
|
||||
'is-not-defined' => true,
|
||||
'text-match' => null
|
||||
),
|
||||
),
|
||||
'text-matches' => array(),
|
||||
),
|
||||
),
|
||||
$q->filters
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function testTextMatch() {
|
||||
|
||||
$xml = array(
|
||||
'<?xml version="1.0"?>',
|
||||
'<c:addressbook-query xmlns:c="urn:ietf:params:xml:ns:carddav" xmlns:d="DAV:">',
|
||||
' <d:prop>',
|
||||
' <d:foo />',
|
||||
' </d:prop>',
|
||||
' <c:filter>',
|
||||
' <c:prop-filter name="NICKNAME">',
|
||||
' <c:text-match>evert</c:text-match>',
|
||||
' <c:text-match collation="i;octet">evert</c:text-match>',
|
||||
' <c:text-match negate-condition="yes">rene</c:text-match>',
|
||||
' <c:text-match match-type="starts-with">e</c:text-match>',
|
||||
' <c:param-filter name="BLA">',
|
||||
' <c:text-match>foo</c:text-match>',
|
||||
' </c:param-filter>',
|
||||
' </c:prop-filter>',
|
||||
' </c:filter>',
|
||||
'</c:addressbook-query>'
|
||||
);
|
||||
|
||||
$q = $this->parse($xml);
|
||||
|
||||
$this->assertEquals(
|
||||
array(
|
||||
array(
|
||||
'name' => 'NICKNAME',
|
||||
'test' => 'anyof',
|
||||
'is-not-defined' => false,
|
||||
'param-filters' => array(
|
||||
array(
|
||||
'name' => 'BLA',
|
||||
'is-not-defined' => false,
|
||||
'text-match' => array(
|
||||
'negate-condition' => false,
|
||||
'collation' => 'i;unicode-casemap',
|
||||
'match-type' => 'contains',
|
||||
'value' => 'foo',
|
||||
),
|
||||
),
|
||||
),
|
||||
'text-matches' => array(
|
||||
array(
|
||||
'negate-condition' => false,
|
||||
'collation' => 'i;unicode-casemap',
|
||||
'match-type' => 'contains',
|
||||
'value' => 'evert',
|
||||
),
|
||||
array(
|
||||
'negate-condition' => false,
|
||||
'collation' => 'i;octet',
|
||||
'match-type' => 'contains',
|
||||
'value' => 'evert',
|
||||
),
|
||||
array(
|
||||
'negate-condition' => true,
|
||||
'collation' => 'i;unicode-casemap',
|
||||
'match-type' => 'contains',
|
||||
'value' => 'rene',
|
||||
),
|
||||
array(
|
||||
'negate-condition' => false,
|
||||
'collation' => 'i;unicode-casemap',
|
||||
'match-type' => 'starts-with',
|
||||
'value' => 'e',
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
$q->filters
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_BadRequest
|
||||
*/
|
||||
function testBadTextMatch() {
|
||||
|
||||
$xml = array(
|
||||
'<?xml version="1.0"?>',
|
||||
'<c:addressbook-query xmlns:c="urn:ietf:params:xml:ns:carddav" xmlns:d="DAV:">',
|
||||
' <d:prop>',
|
||||
' <d:foo />',
|
||||
' </d:prop>',
|
||||
' <c:filter>',
|
||||
' <c:prop-filter name="NICKNAME">',
|
||||
' <c:text-match match-type="foo">evert</c:text-match>',
|
||||
' </c:prop-filter>',
|
||||
' </c:filter>',
|
||||
'</c:addressbook-query>'
|
||||
);
|
||||
|
||||
$q = $this->parse($xml);
|
||||
|
||||
}
|
||||
}
|
||||
187
dav/SabreDAV/tests/Sabre/CardDAV/AddressBookQueryTest.php
Normal file
187
dav/SabreDAV/tests/Sabre/CardDAV/AddressBookQueryTest.php
Normal file
|
|
@ -0,0 +1,187 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/CardDAV/AbstractPluginTest.php';
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
|
||||
class Sabre_CardDAV_AddressBookQueryTest extends Sabre_CardDAV_AbstractPluginTest {
|
||||
|
||||
function testQuery() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'REQUEST_URI' => '/addressbooks/user1/book1',
|
||||
'HTTP_DEPTH' => '1',
|
||||
));
|
||||
|
||||
$request->setBody(
|
||||
'<?xml version="1.0"?>
|
||||
<c:addressbook-query xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:carddav">
|
||||
<d:prop>
|
||||
<d:getetag />
|
||||
</d:prop>
|
||||
<c:filter>
|
||||
<c:prop-filter name="uid" />
|
||||
</c:filter>
|
||||
</c:addressbook-query>'
|
||||
);
|
||||
|
||||
$response = new Sabre_HTTP_ResponseMock();
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->httpResponse = $response;
|
||||
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status', $response->status, 'Incorrect status code. Full response body:' . $response->body);
|
||||
|
||||
// using the client for parsing
|
||||
$client = new Sabre_DAV_Client(array('baseUri'=>'/'));
|
||||
|
||||
$result = $client->parseMultiStatus($response->body);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'/addressbooks/user1/book1/card1' => array(
|
||||
200 => array(
|
||||
'{DAV:}getetag' => '"' . md5("BEGIN:VCARD\nVERSION:3.0\nUID:12345\nEND:VCARD") . '"',
|
||||
),
|
||||
),
|
||||
'/addressbooks/user1/book1/card2' => array(
|
||||
200 => array(
|
||||
'{DAV:}getetag' => '"' . md5("BEGIN:VCARD\nVERSION:3.0\nUID:45678\nEND:VCARD") . '"',
|
||||
),
|
||||
)
|
||||
), $result);
|
||||
|
||||
|
||||
}
|
||||
|
||||
function testQueryDepth0() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'REQUEST_URI' => '/addressbooks/user1/book1/card1',
|
||||
'HTTP_DEPTH' => '0',
|
||||
));
|
||||
|
||||
$request->setBody(
|
||||
'<?xml version="1.0"?>
|
||||
<c:addressbook-query xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:carddav">
|
||||
<d:prop>
|
||||
<d:getetag />
|
||||
</d:prop>
|
||||
<c:filter>
|
||||
<c:prop-filter name="uid" />
|
||||
</c:filter>
|
||||
</c:addressbook-query>'
|
||||
);
|
||||
|
||||
$response = new Sabre_HTTP_ResponseMock();
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->httpResponse = $response;
|
||||
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status', $response->status, 'Incorrect status code. Full response body:' . $response->body);
|
||||
|
||||
// using the client for parsing
|
||||
$client = new Sabre_DAV_Client(array('baseUri'=>'/'));
|
||||
|
||||
$result = $client->parseMultiStatus($response->body);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'/addressbooks/user1/book1/card1' => array(
|
||||
200 => array(
|
||||
'{DAV:}getetag' => '"' . md5("BEGIN:VCARD\nVERSION:3.0\nUID:12345\nEND:VCARD") . '"',
|
||||
),
|
||||
),
|
||||
), $result);
|
||||
|
||||
|
||||
}
|
||||
|
||||
function testQueryNoMatch() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'REQUEST_URI' => '/addressbooks/user1/book1',
|
||||
'HTTP_DEPTH' => '1',
|
||||
));
|
||||
|
||||
$request->setBody(
|
||||
'<?xml version="1.0"?>
|
||||
<c:addressbook-query xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:carddav">
|
||||
<d:prop>
|
||||
<d:getetag />
|
||||
</d:prop>
|
||||
<c:filter>
|
||||
<c:prop-filter name="email" />
|
||||
</c:filter>
|
||||
</c:addressbook-query>'
|
||||
);
|
||||
|
||||
$response = new Sabre_HTTP_ResponseMock();
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->httpResponse = $response;
|
||||
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status', $response->status, 'Incorrect status code. Full response body:' . $response->body);
|
||||
|
||||
// using the client for parsing
|
||||
$client = new Sabre_DAV_Client(array('baseUri'=>'/'));
|
||||
|
||||
$result = $client->parseMultiStatus($response->body);
|
||||
|
||||
$this->assertEquals(array(), $result);
|
||||
|
||||
}
|
||||
|
||||
function testQueryLimit() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'REQUEST_URI' => '/addressbooks/user1/book1',
|
||||
'HTTP_DEPTH' => '1',
|
||||
));
|
||||
|
||||
$request->setBody(
|
||||
'<?xml version="1.0"?>
|
||||
<c:addressbook-query xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:carddav">
|
||||
<d:prop>
|
||||
<d:getetag />
|
||||
</d:prop>
|
||||
<c:filter>
|
||||
<c:prop-filter name="uid" />
|
||||
</c:filter>
|
||||
<c:limit><c:nresults>1</c:nresults></c:limit>
|
||||
</c:addressbook-query>'
|
||||
);
|
||||
|
||||
$response = new Sabre_HTTP_ResponseMock();
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->httpResponse = $response;
|
||||
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status', $response->status, 'Incorrect status code. Full response body:' . $response->body);
|
||||
|
||||
// using the client for parsing
|
||||
$client = new Sabre_DAV_Client(array('baseUri'=>'/'));
|
||||
|
||||
$result = $client->parseMultiStatus($response->body);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'/addressbooks/user1/book1/card1' => array(
|
||||
200 => array(
|
||||
'{DAV:}getetag' => '"' . md5("BEGIN:VCARD\nVERSION:3.0\nUID:12345\nEND:VCARD"). '"',
|
||||
),
|
||||
),
|
||||
), $result);
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
27
dav/SabreDAV/tests/Sabre/CardDAV/AddressBookRootTest.php
Normal file
27
dav/SabreDAV/tests/Sabre/CardDAV/AddressBookRootTest.php
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
class Sabre_CardDAV_AddressBookRootTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testGetName() {
|
||||
|
||||
$pBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$cBackend = new Sabre_CardDAV_Backend_Mock();
|
||||
$root = new Sabre_CardDAV_AddressBookRoot($pBackend, $cBackend);
|
||||
$this->assertEquals('addressbooks', $root->getName());
|
||||
|
||||
}
|
||||
|
||||
function testGetChildForPrincipal() {
|
||||
|
||||
$pBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$cBackend = new Sabre_CardDAV_Backend_Mock();
|
||||
$root = new Sabre_CardDAV_AddressBookRoot($pBackend, $cBackend);
|
||||
|
||||
$children = $root->getChildren();
|
||||
$this->assertEquals(3, count($children));
|
||||
|
||||
$this->assertInstanceOf('Sabre_CardDAV_UserAddressBooks', $children[0]);
|
||||
$this->assertEquals('user1', $children[0]->getName());
|
||||
|
||||
}
|
||||
}
|
||||
159
dav/SabreDAV/tests/Sabre/CardDAV/AddressBookTest.php
Normal file
159
dav/SabreDAV/tests/Sabre/CardDAV/AddressBookTest.php
Normal file
|
|
@ -0,0 +1,159 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/CardDAV/Backend/Mock.php';
|
||||
|
||||
class Sabre_CardDAV_AddressBookTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @var Sabre_CardDAV_AddressBook
|
||||
*/
|
||||
protected $ab;
|
||||
protected $backend;
|
||||
|
||||
function setUp() {
|
||||
|
||||
$this->backend = new Sabre_CardDAV_Backend_Mock();
|
||||
$this->ab = new Sabre_CardDAV_AddressBook(
|
||||
$this->backend,
|
||||
array(
|
||||
'uri' => 'book1',
|
||||
'id' => 'foo',
|
||||
'{DAV:}displayname' => 'd-name',
|
||||
'principaluri' => 'principals/user1',
|
||||
)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function testGetName() {
|
||||
|
||||
$this->assertEquals('book1', $this->ab->getName());
|
||||
|
||||
}
|
||||
|
||||
function testGetChild() {
|
||||
|
||||
$card = $this->ab->getChild('card1');
|
||||
$this->assertInstanceOf('Sabre_CardDAV_Card', $card);
|
||||
$this->assertEquals('card1', $card->getName());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_NotFound
|
||||
*/
|
||||
function testGetChildNotFound() {
|
||||
|
||||
$card = $this->ab->getChild('card3');
|
||||
|
||||
}
|
||||
|
||||
function testGetChildren() {
|
||||
|
||||
$cards = $this->ab->getChildren();
|
||||
$this->assertEquals(2, count($cards));
|
||||
|
||||
$this->assertEquals('card1', $cards[0]->getName());
|
||||
$this->assertEquals('card2', $cards[1]->getName());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_MethodNotAllowed
|
||||
*/
|
||||
function testCreateDirectory() {
|
||||
|
||||
$this->ab->createDirectory('name');
|
||||
|
||||
}
|
||||
|
||||
function testCreateFile() {
|
||||
|
||||
$file = fopen('php://memory','r+');
|
||||
fwrite($file,'foo');
|
||||
rewind($file);
|
||||
$this->ab->createFile('card2',$file);
|
||||
|
||||
$this->assertEquals('foo', $this->backend->cards['foo']['card2']);
|
||||
|
||||
}
|
||||
|
||||
function testDelete() {
|
||||
|
||||
$this->ab->delete();
|
||||
$this->assertEquals(array(), $this->backend->addressBooks);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_MethodNotAllowed
|
||||
*/
|
||||
function testSetName() {
|
||||
|
||||
$this->ab->setName('foo');
|
||||
|
||||
}
|
||||
|
||||
function testGetLastModified() {
|
||||
|
||||
$this->assertNull($this->ab->getLastModified());
|
||||
|
||||
}
|
||||
|
||||
function testUpdateProperties() {
|
||||
|
||||
$this->assertTrue(
|
||||
$this->ab->updateProperties(array('{DAV:}displayname' => 'barrr'))
|
||||
);
|
||||
|
||||
$this->assertEquals('barrr', $this->backend->addressBooks[0]['{DAV:}displayname']);
|
||||
|
||||
}
|
||||
|
||||
function testGetProperties() {
|
||||
|
||||
$props = $this->ab->getProperties(array('{DAV:}displayname'));
|
||||
$this->assertEquals(array(
|
||||
'{DAV:}displayname' => 'd-name',
|
||||
), $props);
|
||||
|
||||
}
|
||||
|
||||
function testACLMethods() {
|
||||
|
||||
$this->assertEquals('principals/user1', $this->ab->getOwner());
|
||||
$this->assertNull($this->ab->getGroup());
|
||||
$this->assertEquals(array(
|
||||
array(
|
||||
'privilege' => '{DAV:}read',
|
||||
'principal' => 'principals/user1',
|
||||
'protected' => true,
|
||||
),
|
||||
array(
|
||||
'privilege' => '{DAV:}write',
|
||||
'principal' => 'principals/user1',
|
||||
'protected' => true,
|
||||
),
|
||||
), $this->ab->getACL());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_MethodNotAllowed
|
||||
*/
|
||||
function testSetACL() {
|
||||
|
||||
$this->ab->setACL(array());
|
||||
|
||||
}
|
||||
|
||||
function testGetSupportedPrivilegeSet() {
|
||||
|
||||
$this->assertNull(
|
||||
$this->ab->getSupportedPrivilegeSet()
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
245
dav/SabreDAV/tests/Sabre/CardDAV/Backend/AbstractPDOTest.php
Normal file
245
dav/SabreDAV/tests/Sabre/CardDAV/Backend/AbstractPDOTest.php
Normal file
|
|
@ -0,0 +1,245 @@
|
|||
<?php
|
||||
|
||||
abstract class Sabre_CardDAV_Backend_AbstractPDOTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @var Sabre_CardDAV_Backend_PDO
|
||||
*/
|
||||
protected $backend;
|
||||
|
||||
/**
|
||||
* @abstract
|
||||
* @return PDO
|
||||
*/
|
||||
abstract function getPDO();
|
||||
|
||||
public function setUp() {
|
||||
|
||||
$this->backend = new Sabre_CardDAV_Backend_PDO($this->getPDO());
|
||||
|
||||
}
|
||||
|
||||
public function testGetAddressBooksForUser() {
|
||||
|
||||
$result = $this->backend->getAddressBooksForUser('principals/user1');
|
||||
|
||||
$expected = array(
|
||||
array(
|
||||
'id' => 1,
|
||||
'uri' => 'book1',
|
||||
'principaluri' => 'principals/user1',
|
||||
'{DAV:}displayname' => 'book1',
|
||||
'{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}addressbook-description' => 'addressbook 1',
|
||||
'{http://calendarserver.org/ns/}getctag' => 1,
|
||||
'{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}supported-address-data' => new Sabre_CardDAV_Property_SupportedAddressData(),
|
||||
)
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
}
|
||||
|
||||
public function testUpdateAddressBookInvalidProp() {
|
||||
|
||||
$result = $this->backend->updateAddressBook(1, array(
|
||||
'{DAV:}displayname' => 'updated',
|
||||
'{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}addressbook-description' => 'updated',
|
||||
'{DAV:}foo' => 'bar',
|
||||
));
|
||||
|
||||
$this->assertFalse($result);
|
||||
|
||||
$result = $this->backend->getAddressBooksForUser('principals/user1');
|
||||
|
||||
$expected = array(
|
||||
array(
|
||||
'id' => 1,
|
||||
'uri' => 'book1',
|
||||
'principaluri' => 'principals/user1',
|
||||
'{DAV:}displayname' => 'book1',
|
||||
'{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}addressbook-description' => 'addressbook 1',
|
||||
'{http://calendarserver.org/ns/}getctag' => 1,
|
||||
'{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}supported-address-data' => new Sabre_CardDAV_Property_SupportedAddressData(),
|
||||
)
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
}
|
||||
|
||||
public function testUpdateAddressBookNoProps() {
|
||||
|
||||
$result = $this->backend->updateAddressBook(1, array());
|
||||
|
||||
$this->assertFalse($result);
|
||||
|
||||
$result = $this->backend->getAddressBooksForUser('principals/user1');
|
||||
|
||||
$expected = array(
|
||||
array(
|
||||
'id' => 1,
|
||||
'uri' => 'book1',
|
||||
'principaluri' => 'principals/user1',
|
||||
'{DAV:}displayname' => 'book1',
|
||||
'{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}addressbook-description' => 'addressbook 1',
|
||||
'{http://calendarserver.org/ns/}getctag' => 1,
|
||||
'{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}supported-address-data' => new Sabre_CardDAV_Property_SupportedAddressData(),
|
||||
)
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
|
||||
}
|
||||
|
||||
public function testUpdateAddressBookSuccess() {
|
||||
|
||||
$result = $this->backend->updateAddressBook(1, array(
|
||||
'{DAV:}displayname' => 'updated',
|
||||
'{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}addressbook-description' => 'updated',
|
||||
));
|
||||
|
||||
$this->assertTrue($result);
|
||||
|
||||
$result = $this->backend->getAddressBooksForUser('principals/user1');
|
||||
|
||||
$expected = array(
|
||||
array(
|
||||
'id' => 1,
|
||||
'uri' => 'book1',
|
||||
'principaluri' => 'principals/user1',
|
||||
'{DAV:}displayname' => 'updated',
|
||||
'{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}addressbook-description' => 'updated',
|
||||
'{http://calendarserver.org/ns/}getctag' => 2,
|
||||
'{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}supported-address-data' => new Sabre_CardDAV_Property_SupportedAddressData(),
|
||||
)
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
|
||||
}
|
||||
|
||||
public function testDeleteAddressBook() {
|
||||
|
||||
$this->backend->deleteAddressBook(1);
|
||||
|
||||
$this->assertEquals(array(), $this->backend->getAddressBooksForUser('principals/user1'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_BadRequest
|
||||
*/
|
||||
public function testCreateAddressBookUnsupportedProp() {
|
||||
|
||||
$this->backend->createAddressBook('principals/user1','book2', array(
|
||||
'{DAV:}foo' => 'bar',
|
||||
));
|
||||
|
||||
}
|
||||
|
||||
public function testCreateAddressBookSuccess() {
|
||||
|
||||
$this->backend->createAddressBook('principals/user1','book2', array(
|
||||
'{DAV:}displayname' => 'book2',
|
||||
'{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}addressbook-description' => 'addressbook 2',
|
||||
));
|
||||
|
||||
$expected = array(
|
||||
array(
|
||||
'id' => 1,
|
||||
'uri' => 'book1',
|
||||
'principaluri' => 'principals/user1',
|
||||
'{DAV:}displayname' => 'book1',
|
||||
'{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}addressbook-description' => 'addressbook 1',
|
||||
'{http://calendarserver.org/ns/}getctag' => 1,
|
||||
'{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}supported-address-data' => new Sabre_CardDAV_Property_SupportedAddressData(),
|
||||
),
|
||||
array(
|
||||
'id' => 2,
|
||||
'uri' => 'book2',
|
||||
'principaluri' => 'principals/user1',
|
||||
'{DAV:}displayname' => 'book2',
|
||||
'{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}addressbook-description' => 'addressbook 2',
|
||||
'{http://calendarserver.org/ns/}getctag' => 1,
|
||||
'{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}supported-address-data' => new Sabre_CardDAV_Property_SupportedAddressData(),
|
||||
)
|
||||
);
|
||||
$result = $this->backend->getAddressBooksForUser('principals/user1');
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
}
|
||||
|
||||
public function testGetCards() {
|
||||
|
||||
$result = $this->backend->getCards(1);
|
||||
|
||||
$expected = array(
|
||||
array(
|
||||
'id' => 1,
|
||||
'uri' => 'card1',
|
||||
'carddata' => 'card1',
|
||||
'lastmodified' => 0,
|
||||
)
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
}
|
||||
|
||||
public function testGetCard() {
|
||||
|
||||
$result = $this->backend->getCard(1,'card1');
|
||||
|
||||
$expected = array(
|
||||
'id' => 1,
|
||||
'uri' => 'card1',
|
||||
'carddata' => 'card1',
|
||||
'lastmodified' => 0,
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testGetCard
|
||||
*/
|
||||
public function testCreateCard() {
|
||||
|
||||
$result = $this->backend->createCard(1, 'card2', 'data2');
|
||||
$this->assertEquals('"' . md5('data2') . '"', $result);
|
||||
$result = $this->backend->getCard(1,'card2');
|
||||
$this->assertEquals(2, $result['id']);
|
||||
$this->assertEquals('card2', $result['uri']);
|
||||
$this->assertEquals('data2', $result['carddata']);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testGetCard
|
||||
*/
|
||||
public function testUpdateCard() {
|
||||
|
||||
$result = $this->backend->updateCard(1, 'card1', 'newdata');
|
||||
$this->assertEquals('"' . md5('newdata') . '"', $result);
|
||||
|
||||
$result = $this->backend->getCard(1,'card1');
|
||||
$this->assertEquals(1, $result['id']);
|
||||
$this->assertEquals('newdata', $result['carddata']);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testGetCard
|
||||
*/
|
||||
public function testDeleteCard() {
|
||||
|
||||
$this->backend->deleteCard(1, 'card1');
|
||||
$result = $this->backend->getCard(1,'card1');
|
||||
$this->assertFalse($result);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
125
dav/SabreDAV/tests/Sabre/CardDAV/Backend/Mock.php
Normal file
125
dav/SabreDAV/tests/Sabre/CardDAV/Backend/Mock.php
Normal file
|
|
@ -0,0 +1,125 @@
|
|||
<?php
|
||||
|
||||
class Sabre_CardDAV_Backend_Mock extends Sabre_CardDAV_Backend_Abstract {
|
||||
|
||||
public $addressBooks;
|
||||
public $cards;
|
||||
|
||||
function __construct($addressBooks = null, $cards = null) {
|
||||
|
||||
$this->addressBooks = $addressBooks;
|
||||
$this->cards = $cards;
|
||||
|
||||
if (is_null($this->addressBooks)) {
|
||||
$this->addressBooks = array(
|
||||
array(
|
||||
'id' => 'foo',
|
||||
'uri' => 'book1',
|
||||
'principaluri' => 'principals/user1',
|
||||
'{DAV:}displayname' => 'd-name',
|
||||
),
|
||||
);
|
||||
|
||||
$this->cards = array(
|
||||
'foo' => array(
|
||||
'card1' => "BEGIN:VCARD\nVERSION:3.0\nUID:12345\nEND:VCARD",
|
||||
'card2' => "BEGIN:VCARD\nVERSION:3.0\nUID:45678\nEND:VCARD",
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
function getAddressBooksForUser($principalUri) {
|
||||
|
||||
$books = array();
|
||||
foreach($this->addressBooks as $book) {
|
||||
if ($book['principaluri'] === $principalUri) {
|
||||
$books[] = $book;
|
||||
}
|
||||
}
|
||||
return $books;
|
||||
|
||||
}
|
||||
|
||||
function updateAddressBook($addressBookId, array $mutations) {
|
||||
|
||||
foreach($this->addressBooks as &$book) {
|
||||
if ($book['id'] !== $addressBookId)
|
||||
continue;
|
||||
|
||||
foreach($mutations as $key=>$value) {
|
||||
$book[$key] = $value;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
function createAddressBook($principalUri, $url, array $properties) {
|
||||
|
||||
$this->addressBooks[] = array_merge($properties, array(
|
||||
'id' => $url,
|
||||
'uri' => $url,
|
||||
'principaluri' => $principalUri,
|
||||
));
|
||||
|
||||
}
|
||||
|
||||
function deleteAddressBook($addressBookId) {
|
||||
|
||||
foreach($this->addressBooks as $key=>$value) {
|
||||
if ($value['id'] === $addressBookId)
|
||||
unset($this->addressBooks[$key]);
|
||||
}
|
||||
unset($this->cards[$addressBookId]);
|
||||
|
||||
}
|
||||
|
||||
function getCards($addressBookId) {
|
||||
|
||||
$cards = array();
|
||||
foreach($this->cards[$addressBookId] as $uri=>$data) {
|
||||
$cards[] = array(
|
||||
'uri' => $uri,
|
||||
'carddata' => $data,
|
||||
);
|
||||
}
|
||||
return $cards;
|
||||
|
||||
}
|
||||
|
||||
function getCard($addressBookId, $cardUri) {
|
||||
|
||||
if (!isset($this->cards[$addressBookId][$cardUri])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return array(
|
||||
'uri' => $cardUri,
|
||||
'carddata' => $this->cards[$addressBookId][$cardUri],
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function createCard($addressBookId, $cardUri, $cardData) {
|
||||
|
||||
$this->cards[$addressBookId][$cardUri] = $cardData;
|
||||
|
||||
}
|
||||
|
||||
function updateCard($addressBookId, $cardUri, $cardData) {
|
||||
|
||||
$this->cards[$addressBookId][$cardUri] = $cardData;
|
||||
|
||||
}
|
||||
|
||||
function deleteCard($addressBookId, $cardUri) {
|
||||
|
||||
unset($this->cards[$addressBookId][$cardUri]);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
58
dav/SabreDAV/tests/Sabre/CardDAV/Backend/PDOMySQLTest.php
Normal file
58
dav/SabreDAV/tests/Sabre/CardDAV/Backend/PDOMySQLTest.php
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/TestUtil.php';
|
||||
|
||||
class Sabre_CardDAV_Backend_PDOMySQLTest extends Sabre_CardDAV_Backend_AbstractPDOTest {
|
||||
|
||||
/**
|
||||
* @return PDO
|
||||
*/
|
||||
public function getPDO() {
|
||||
|
||||
if (!SABRE_HASMYSQL) $this->markTestSkipped('MySQL driver is not available, or not properly configured');
|
||||
|
||||
$pdo = Sabre_TestUtil::getMySQLDB();
|
||||
if (!$pdo) $this->markTestSkipped('Could not connect to MySQL database');
|
||||
|
||||
$pdo->query("DROP TABLE IF EXISTS addressbooks");
|
||||
$pdo->query("DROP TABLE IF EXISTS cards");
|
||||
$pdo->query("
|
||||
CREATE TABLE addressbooks (
|
||||
id INT(11) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
||||
principaluri VARCHAR(255),
|
||||
displayname VARCHAR(255),
|
||||
uri VARCHAR(100),
|
||||
description TEXT,
|
||||
ctag INT(11) UNSIGNED NOT NULL DEFAULT '1'
|
||||
);
|
||||
");
|
||||
|
||||
$pdo->query("
|
||||
INSERT INTO addressbooks
|
||||
(principaluri, displayname, uri, description, ctag)
|
||||
VALUES
|
||||
('principals/user1', 'book1', 'book1', 'addressbook 1', 1);
|
||||
");
|
||||
|
||||
$pdo->query("
|
||||
CREATE TABLE cards (
|
||||
id INT(11) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
||||
addressbookid INT(11) UNSIGNED NOT NULL,
|
||||
carddata TEXT,
|
||||
uri VARCHAR(100),
|
||||
lastmodified INT(11) UNSIGNED
|
||||
);
|
||||
");
|
||||
|
||||
$pdo->query("
|
||||
INSERT INTO cards
|
||||
(addressbookid, carddata, uri, lastmodified)
|
||||
VALUES
|
||||
(1, 'card1', 'card1', 0);
|
||||
");
|
||||
return $pdo;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
67
dav/SabreDAV/tests/Sabre/CardDAV/Backend/PDOSqliteTest.php
Normal file
67
dav/SabreDAV/tests/Sabre/CardDAV/Backend/PDOSqliteTest.php
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/TestUtil.php';
|
||||
|
||||
class Sabre_CardDAV_Backend_PDOSqliteTest extends Sabre_CardDAV_Backend_AbstractPDOTest {
|
||||
|
||||
function tearDown() {
|
||||
|
||||
if (file_exists(SABRE_TEMPDIR . '/pdobackend')) unlink(SABRE_TEMPDIR . '/pdobackend');
|
||||
if (file_exists(SABRE_TEMPDIR . '/pdobackend2')) unlink(SABRE_TEMPDIR . '/pdobackend2');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @return PDO
|
||||
*/
|
||||
function getPDO() {
|
||||
|
||||
if (!SABRE_HASSQLITE) $this->markTestSkipped('SQLite driver is not available');
|
||||
$pdo = new PDO('sqlite:'.SABRE_TEMPDIR.'/pdobackend');
|
||||
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
|
||||
|
||||
$pdo->query("DROP TABLE IF EXISTS addressbooks");
|
||||
$pdo->query("DROP TABLE IF EXISTS cards");
|
||||
$pdo->query("
|
||||
CREATE TABLE addressbooks (
|
||||
id integer primary key asc,
|
||||
principaluri text,
|
||||
displayname text,
|
||||
uri text,
|
||||
description text,
|
||||
ctag integer
|
||||
);
|
||||
|
||||
");
|
||||
|
||||
$pdo->query("
|
||||
INSERT INTO addressbooks
|
||||
(principaluri, displayname, uri, description, ctag)
|
||||
VALUES
|
||||
('principals/user1', 'book1', 'book1', 'addressbook 1', 1);
|
||||
");
|
||||
|
||||
$pdo->query("
|
||||
|
||||
CREATE TABLE cards (
|
||||
id integer primary key asc,
|
||||
addressbookid integer,
|
||||
carddata text,
|
||||
uri text,
|
||||
lastmodified integer
|
||||
);
|
||||
|
||||
");
|
||||
$pdo->query("
|
||||
INSERT INTO cards
|
||||
(addressbookid, carddata, uri, lastmodified)
|
||||
VALUES
|
||||
(1, 'card1', 'card1', 0);
|
||||
");
|
||||
|
||||
return $pdo;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
182
dav/SabreDAV/tests/Sabre/CardDAV/CardTest.php
Normal file
182
dav/SabreDAV/tests/Sabre/CardDAV/CardTest.php
Normal file
|
|
@ -0,0 +1,182 @@
|
|||
<?php
|
||||
|
||||
class Sabre_CardDAV_CardTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @var Sabre_CardDAV_Card
|
||||
*/
|
||||
protected $card;
|
||||
/**
|
||||
* @var Sabre_CardDAV_MockBackend
|
||||
*/
|
||||
protected $backend;
|
||||
|
||||
function setUp() {
|
||||
|
||||
$this->backend = new Sabre_CardDAV_Backend_Mock();
|
||||
$this->card = new Sabre_CardDAV_Card(
|
||||
$this->backend,
|
||||
array(
|
||||
'uri' => 'book1',
|
||||
'id' => 'foo',
|
||||
'principaluri' => 'principals/user1',
|
||||
),
|
||||
array(
|
||||
'uri' => 'card1',
|
||||
'addressbookid' => 'foo',
|
||||
'carddata' => 'card',
|
||||
)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function testGet() {
|
||||
|
||||
$result = $this->card->get();
|
||||
$this->assertEquals('card', $result);
|
||||
|
||||
}
|
||||
function testGet2() {
|
||||
|
||||
$this->card = new Sabre_CardDAV_Card(
|
||||
$this->backend,
|
||||
array(
|
||||
'uri' => 'book1',
|
||||
'id' => 'foo',
|
||||
'principaluri' => 'principals/user1',
|
||||
),
|
||||
array(
|
||||
'uri' => 'card1',
|
||||
'addressbookid' => 'foo',
|
||||
)
|
||||
);
|
||||
$result = $this->card->get();
|
||||
$this->assertEquals("BEGIN:VCARD\nVERSION:3.0\nUID:12345\nEND:VCARD", $result);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @depends testGet
|
||||
*/
|
||||
function testPut() {
|
||||
|
||||
$file = fopen('php://memory','r+');
|
||||
fwrite($file, 'newdata');
|
||||
rewind($file);
|
||||
$this->card->put($file);
|
||||
$result = $this->card->get();
|
||||
$this->assertEquals('newdata', $result);
|
||||
|
||||
}
|
||||
|
||||
|
||||
function testDelete() {
|
||||
|
||||
$this->card->delete();
|
||||
$this->assertEquals(1, count($this->backend->cards['foo']));
|
||||
|
||||
}
|
||||
|
||||
function testGetContentType() {
|
||||
|
||||
$this->assertEquals('text/x-vcard; charset=utf-8', $this->card->getContentType());
|
||||
|
||||
}
|
||||
|
||||
function testGetETag() {
|
||||
|
||||
$this->assertEquals('"' . md5('card') . '"' , $this->card->getETag());
|
||||
|
||||
}
|
||||
|
||||
function testGetETag2() {
|
||||
|
||||
$card = new Sabre_CardDAV_Card(
|
||||
$this->backend,
|
||||
array(
|
||||
'uri' => 'book1',
|
||||
'id' => 'foo',
|
||||
'principaluri' => 'principals/user1',
|
||||
),
|
||||
array(
|
||||
'uri' => 'card1',
|
||||
'addressbookid' => 'foo',
|
||||
'carddata' => 'card',
|
||||
'etag' => '"blabla"',
|
||||
)
|
||||
);
|
||||
$this->assertEquals('"blabla"' , $card->getETag());
|
||||
|
||||
}
|
||||
|
||||
function testGetLastModified() {
|
||||
|
||||
$this->assertEquals(null, $this->card->getLastModified());
|
||||
|
||||
}
|
||||
|
||||
function testGetSize() {
|
||||
|
||||
$this->assertEquals(4, $this->card->getSize());
|
||||
$this->assertEquals(4, $this->card->getSize());
|
||||
|
||||
}
|
||||
|
||||
function testGetSize2() {
|
||||
|
||||
$card = new Sabre_CardDAV_Card(
|
||||
$this->backend,
|
||||
array(
|
||||
'uri' => 'book1',
|
||||
'id' => 'foo',
|
||||
'principaluri' => 'principals/user1',
|
||||
),
|
||||
array(
|
||||
'uri' => 'card1',
|
||||
'addressbookid' => 'foo',
|
||||
'etag' => '"blabla"',
|
||||
'size' => 4,
|
||||
)
|
||||
);
|
||||
$this->assertEquals(4, $card->getSize());
|
||||
|
||||
}
|
||||
|
||||
function testACLMethods() {
|
||||
|
||||
$this->assertEquals('principals/user1', $this->card->getOwner());
|
||||
$this->assertNull($this->card->getGroup());
|
||||
$this->assertEquals(array(
|
||||
array(
|
||||
'privilege' => '{DAV:}read',
|
||||
'principal' => 'principals/user1',
|
||||
'protected' => true,
|
||||
),
|
||||
array(
|
||||
'privilege' => '{DAV:}write',
|
||||
'principal' => 'principals/user1',
|
||||
'protected' => true,
|
||||
),
|
||||
), $this->card->getACL());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_MethodNotAllowed
|
||||
*/
|
||||
function testSetACL() {
|
||||
|
||||
$this->card->setACL(array());
|
||||
|
||||
}
|
||||
|
||||
function testGetSupportedPrivilegeSet() {
|
||||
|
||||
$this->assertNull(
|
||||
$this->card->getSupportedPrivilegeSet()
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
25
dav/SabreDAV/tests/Sabre/CardDAV/IDirectoryTest.php
Normal file
25
dav/SabreDAV/tests/Sabre/CardDAV/IDirectoryTest.php
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
<?php
|
||||
|
||||
class Sabre_CardDAV_IDirectoryTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testResourceType() {
|
||||
|
||||
$tree = array(
|
||||
new Sabre_CardDAV_DirectoryMock('directory')
|
||||
);
|
||||
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$plugin = new Sabre_CardDAV_Plugin();
|
||||
$server->addPlugin($plugin);
|
||||
|
||||
$props = $server->getProperties('directory', array('{DAV:}resourcetype'));
|
||||
$this->assertTrue($props['{DAV:}resourcetype']->is('{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}directory'));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class Sabre_CardDAV_DirectoryMock extends Sabre_DAV_SimpleCollection implements Sabre_CardDAV_IDirectory {
|
||||
|
||||
|
||||
}
|
||||
50
dav/SabreDAV/tests/Sabre/CardDAV/MultiGetTest.php
Normal file
50
dav/SabreDAV/tests/Sabre/CardDAV/MultiGetTest.php
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
|
||||
class Sabre_CardDAV_MultiGetTest extends Sabre_CardDAV_AbstractPluginTest {
|
||||
|
||||
function testMultiGet() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'REQUEST_URI' => '/addressbooks/user1/book1',
|
||||
));
|
||||
|
||||
$request->setBody(
|
||||
'<?xml version="1.0"?>
|
||||
<c:addressbook-multiget xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:carddav">
|
||||
<d:prop>
|
||||
<d:getetag />
|
||||
<c:address-data />
|
||||
</d:prop>
|
||||
<d:href>/addressbooks/user1/book1/card1</d:href>
|
||||
</c:addressbook-multiget>'
|
||||
);
|
||||
|
||||
$response = new Sabre_HTTP_ResponseMock();
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->httpResponse = $response;
|
||||
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status', $response->status, 'Incorrect status code. Full response body:' . $response->body);
|
||||
|
||||
// using the client for parsing
|
||||
$client = new Sabre_DAV_Client(array('baseUri'=>'/'));
|
||||
|
||||
$result = $client->parseMultiStatus($response->body);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'/addressbooks/user1/book1/card1' => array(
|
||||
200 => array(
|
||||
'{DAV:}getetag' => '"' . md5("BEGIN:VCARD\nVERSION:3.0\nUID:12345\nEND:VCARD") . '"',
|
||||
'{urn:ietf:params:xml:ns:carddav}address-data' => "BEGIN:VCARD\nVERSION:3.0\nUID:12345\nEND:VCARD",
|
||||
)
|
||||
)
|
||||
), $result);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
146
dav/SabreDAV/tests/Sabre/CardDAV/PluginTest.php
Normal file
146
dav/SabreDAV/tests/Sabre/CardDAV/PluginTest.php
Normal file
|
|
@ -0,0 +1,146 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/DAVACL/MockPrincipalBackend.php';
|
||||
require_once 'Sabre/CardDAV/AbstractPluginTest.php';
|
||||
|
||||
class Sabre_CardDAV_PluginTest extends Sabre_CardDAV_AbstractPluginTest {
|
||||
|
||||
function testConstruct() {
|
||||
|
||||
$this->assertEquals('card', $this->server->xmlNamespaces[Sabre_CardDAV_Plugin::NS_CARDDAV]);
|
||||
$this->assertEquals('{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}addressbook', $this->server->resourceTypeMapping['Sabre_CardDAV_IAddressBook']);
|
||||
|
||||
$this->assertTrue(in_array('addressbook', $this->plugin->getFeatures()));
|
||||
|
||||
}
|
||||
|
||||
function testSupportedReportSet() {
|
||||
|
||||
$this->assertEquals(array(
|
||||
'{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}addressbook-multiget',
|
||||
'{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}addressbook-query',
|
||||
), $this->plugin->getSupportedReportSet('addressbooks/user1/book1'));
|
||||
|
||||
}
|
||||
|
||||
function testSupportedReportSetEmpty() {
|
||||
|
||||
$this->assertEquals(array(
|
||||
), $this->plugin->getSupportedReportSet(''));
|
||||
|
||||
}
|
||||
|
||||
function testAddressBookHomeSet() {
|
||||
|
||||
$result = $this->server->getProperties('principals/user1', array('{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}addressbook-home-set'));
|
||||
|
||||
$this->assertEquals(1, count($result));
|
||||
$this->assertTrue(isset($result['{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}addressbook-home-set']));
|
||||
$this->assertEquals('addressbooks/user1/', $result['{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}addressbook-home-set']->getHref());
|
||||
|
||||
}
|
||||
|
||||
function testMeCardTest() {
|
||||
|
||||
$result = $this->server->getProperties(
|
||||
'addressbooks/user1',
|
||||
array(
|
||||
'{http://calendarserver.org/ns/}me-card',
|
||||
)
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
array(
|
||||
'{http://calendarserver.org/ns/}me-card' =>
|
||||
new Sabre_DAV_Property_Href('addressbooks/user1/book1/vcard1.vcf')
|
||||
),
|
||||
$result
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function testDirectoryGateway() {
|
||||
|
||||
$result = $this->server->getProperties('principals/user1', array('{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}directory-gateway'));
|
||||
|
||||
$this->assertEquals(1, count($result));
|
||||
$this->assertTrue(isset($result['{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}directory-gateway']));
|
||||
$this->assertEquals(array('directory'), $result['{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}directory-gateway']->getHrefs());
|
||||
|
||||
}
|
||||
|
||||
function testReportPassThrough() {
|
||||
|
||||
$this->assertNull($this->plugin->report('{DAV:}foo', new DomDocument()));
|
||||
|
||||
}
|
||||
|
||||
function testHTMLActionsPanel() {
|
||||
|
||||
$output = '';
|
||||
$r = $this->server->broadcastEvent('onHTMLActionsPanel', array($this->server->tree->getNodeForPath('addressbooks/user1'), &$output));
|
||||
$this->assertFalse($r);
|
||||
|
||||
$this->assertTrue(!!strpos($output,'Display name'));
|
||||
|
||||
}
|
||||
|
||||
function testBrowserPostAction() {
|
||||
|
||||
$r = $this->server->broadcastEvent('onBrowserPostAction', array('addressbooks/user1', 'mkaddressbook', array(
|
||||
'name' => 'NEWADDRESSBOOK',
|
||||
'{DAV:}displayname' => 'foo',
|
||||
)));
|
||||
$this->assertFalse($r);
|
||||
|
||||
$addressbooks = $this->backend->getAddressBooksforUser('principals/user1');
|
||||
$this->assertEquals(2, count($addressbooks));
|
||||
|
||||
$newAddressBook = null;
|
||||
foreach($addressbooks as $addressbook) {
|
||||
if ($addressbook['uri'] === 'NEWADDRESSBOOK') {
|
||||
$newAddressBook = $addressbook;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$newAddressBook)
|
||||
$this->fail('Could not find newly created addressbook');
|
||||
|
||||
}
|
||||
|
||||
function testUpdatePropertiesMeCard() {
|
||||
|
||||
$result = $this->server->updateProperties('addressbooks/user1', array(
|
||||
'{http://calendarserver.org/ns/}me-card' => new Sabre_DAV_Property_Href('/addressbooks/user1/book1/vcard2',true),
|
||||
));
|
||||
|
||||
$this->assertEquals(
|
||||
array(
|
||||
'href' => 'addressbooks/user1',
|
||||
200 => array(
|
||||
'{http://calendarserver.org/ns/}me-card' => null,
|
||||
),
|
||||
),
|
||||
$result
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function testUpdatePropertiesMeCardBadValue() {
|
||||
|
||||
$result = $this->server->updateProperties('addressbooks/user1', array(
|
||||
'{http://calendarserver.org/ns/}me-card' => new Sabre_DAV_Property_HrefList(array()),
|
||||
));
|
||||
|
||||
$this->assertEquals(
|
||||
array(
|
||||
'href' => 'addressbooks/user1',
|
||||
400 => array(
|
||||
'{http://calendarserver.org/ns/}me-card' => null,
|
||||
),
|
||||
),
|
||||
$result
|
||||
);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
<?php
|
||||
|
||||
class Sabre_CardDAV_Property_SupportedAddressDataDataTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testSimple() {
|
||||
|
||||
$property = new Sabre_CardDAV_Property_SupportedAddressData();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSimple
|
||||
*/
|
||||
function testSerialize() {
|
||||
|
||||
$property = new Sabre_CardDAV_Property_SupportedAddressData();
|
||||
|
||||
$doc = new DOMDocument();
|
||||
$root = $doc->createElementNS(Sabre_CardDAV_Plugin::NS_CARDDAV, 'card:root');
|
||||
$root->setAttribute('xmlns:d','DAV:');
|
||||
|
||||
$doc->appendChild($root);
|
||||
$server = new Sabre_DAV_Server();
|
||||
|
||||
$property->serialize($server, $root);
|
||||
|
||||
$xml = $doc->saveXML();
|
||||
|
||||
$this->assertEquals(
|
||||
'<?xml version="1.0"?>
|
||||
<card:root xmlns:card="' . Sabre_CardDAV_Plugin::NS_CARDDAV . '" xmlns:d="DAV:">' .
|
||||
'<card:address-data-type content-type="text/vcard" version="3.0"/>' .
|
||||
'<card:address-data-type content-type="text/vcard" version="4.0"/>' .
|
||||
'</card:root>
|
||||
', $xml);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
<?php
|
||||
|
||||
class Sabre_CardDAV_SogoStripContentType extends Sabre_DAVServerTest {
|
||||
|
||||
protected $setupCardDAV = true;
|
||||
protected $carddavAddressBooks = array(
|
||||
array(
|
||||
'id' => 1,
|
||||
'uri' => 'book1',
|
||||
'principaluri' => 'principals/user1',
|
||||
),
|
||||
);
|
||||
protected $carddavCards = array(
|
||||
1 => array(
|
||||
'card1.vcf' => "BEGIN:VCARD\nVERSION:3.0\nUID:12345\nEND:VCARD",
|
||||
),
|
||||
);
|
||||
|
||||
function testDontStrip() {
|
||||
|
||||
$result = $this->server->getProperties('addressbooks/user1/book1/card1.vcf',array('{DAV:}getcontenttype'));
|
||||
$this->assertEquals(array(
|
||||
'{DAV:}getcontenttype' => 'text/x-vcard; charset=utf-8'
|
||||
), $result);
|
||||
|
||||
}
|
||||
function testStrip() {
|
||||
|
||||
$this->server->httpRequest = new Sabre_HTTP_Request(array(
|
||||
'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:10.0.2) Gecko/20120216 Thunderbird/10.0.2 Lightning/1.2.1',
|
||||
));
|
||||
$result = $this->server->getProperties('addressbooks/user1/book1/card1.vcf',array('{DAV:}getcontenttype'));
|
||||
$this->assertEquals(array(
|
||||
'{DAV:}getcontenttype' => 'text/x-vcard'
|
||||
), $result);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
160
dav/SabreDAV/tests/Sabre/CardDAV/UserAddressBooksTest.php
Normal file
160
dav/SabreDAV/tests/Sabre/CardDAV/UserAddressBooksTest.php
Normal file
|
|
@ -0,0 +1,160 @@
|
|||
<?php
|
||||
|
||||
class Sabre_CardDAV_UserAddressBooksTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @var Sabre_CardDAV_UserAddressBooks
|
||||
*/
|
||||
protected $s;
|
||||
protected $backend;
|
||||
|
||||
function setUp() {
|
||||
|
||||
$this->backend = new Sabre_CardDAV_Backend_Mock();
|
||||
$this->s = new Sabre_CardDAV_UserAddressBooks(
|
||||
$this->backend,
|
||||
'principals/user1'
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function testGetName() {
|
||||
|
||||
$this->assertEquals('user1', $this->s->getName());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_MethodNotAllowed
|
||||
*/
|
||||
function testSetName() {
|
||||
|
||||
$this->s->setName('user2');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_MethodNotAllowed
|
||||
*/
|
||||
function testDelete() {
|
||||
|
||||
$this->s->delete();
|
||||
|
||||
}
|
||||
|
||||
function testGetLastModified() {
|
||||
|
||||
$this->assertNull($this->s->getLastModified());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_MethodNotAllowed
|
||||
*/
|
||||
function testCreateFile() {
|
||||
|
||||
$this->s->createFile('bla');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_MethodNotAllowed
|
||||
*/
|
||||
function testCreateDirectory() {
|
||||
|
||||
$this->s->createDirectory('bla');
|
||||
|
||||
}
|
||||
|
||||
function testGetChild() {
|
||||
|
||||
$child = $this->s->getChild('book1');
|
||||
$this->assertInstanceOf('Sabre_CardDAV_AddressBook', $child);
|
||||
$this->assertEquals('book1', $child->getName());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_NotFound
|
||||
*/
|
||||
function testGetChild404() {
|
||||
|
||||
$this->s->getChild('book2');
|
||||
|
||||
}
|
||||
|
||||
function testGetChildren() {
|
||||
|
||||
$children = $this->s->getChildren();
|
||||
$this->assertEquals(1, count($children));
|
||||
$this->assertInstanceOf('Sabre_CardDAV_AddressBook', $children[0]);
|
||||
$this->assertEquals('book1', $children[0]->getName());
|
||||
|
||||
}
|
||||
|
||||
function testCreateExtendedCollection() {
|
||||
|
||||
$resourceType = array(
|
||||
'{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}addressbook',
|
||||
'{DAV:}collection',
|
||||
);
|
||||
$this->s->createExtendedCollection('book2', $resourceType, array('{DAV:}displayname' => 'a-book 2'));
|
||||
|
||||
$this->assertEquals(array(
|
||||
'id' => 'book2',
|
||||
'uri' => 'book2',
|
||||
'{DAV:}displayname' => 'a-book 2',
|
||||
'principaluri' => 'principals/user1',
|
||||
), $this->backend->addressBooks[1]);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_InvalidResourceType
|
||||
*/
|
||||
function testCreateExtendedCollectionInvalid() {
|
||||
|
||||
$resourceType = array(
|
||||
'{DAV:}collection',
|
||||
);
|
||||
$this->s->createExtendedCollection('book2', $resourceType, array('{DAV:}displayname' => 'a-book 2'));
|
||||
|
||||
}
|
||||
|
||||
|
||||
function testACLMethods() {
|
||||
|
||||
$this->assertEquals('principals/user1', $this->s->getOwner());
|
||||
$this->assertNull($this->s->getGroup());
|
||||
$this->assertEquals(array(
|
||||
array(
|
||||
'privilege' => '{DAV:}read',
|
||||
'principal' => 'principals/user1',
|
||||
'protected' => true,
|
||||
),
|
||||
array(
|
||||
'privilege' => '{DAV:}write',
|
||||
'principal' => 'principals/user1',
|
||||
'protected' => true,
|
||||
),
|
||||
), $this->s->getACL());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_MethodNotAllowed
|
||||
*/
|
||||
function testSetACL() {
|
||||
|
||||
$this->s->setACL(array());
|
||||
|
||||
}
|
||||
|
||||
function testGetSupportedPrivilegeSet() {
|
||||
|
||||
$this->assertNull(
|
||||
$this->s->getSupportedPrivilegeSet()
|
||||
);
|
||||
|
||||
}
|
||||
}
|
||||
202
dav/SabreDAV/tests/Sabre/CardDAV/ValidateFilterTest.php
Normal file
202
dav/SabreDAV/tests/Sabre/CardDAV/ValidateFilterTest.php
Normal file
|
|
@ -0,0 +1,202 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/CardDAV/AbstractPluginTest.php';
|
||||
|
||||
class Sabre_CardDAV_ValidateFilterTest extends Sabre_CardDAV_AbstractPluginTest {
|
||||
|
||||
/**
|
||||
* @dataProvider data
|
||||
*/
|
||||
function testFilter($input, $filters, $test, $result, $message = null) {
|
||||
|
||||
if ($result) {
|
||||
$this->assertTrue($this->plugin->validateFilters($input, $filters, $test), $message);
|
||||
} else {
|
||||
$this->assertFalse($this->plugin->validateFilters($input, $filters, $test), $message);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function data() {
|
||||
|
||||
$body1 = <<<HELLO
|
||||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
ORG:Company;
|
||||
TITLE:Title
|
||||
TEL;TYPE=IPHONE;TYPE=pref:(222) 22 22 22
|
||||
TEL;TYPE=HOME:(33) 333 66 66
|
||||
TEL;TYPE=WORK:(444) 44 44 44
|
||||
TEL;TYPE=MAIN:(55) 555 55 55
|
||||
ITEM4.TEL:(111) 11 11 11
|
||||
ITEM5.TEL:(6) 66 66 66 66
|
||||
ITEM6.TEL:(77) 777 77 77
|
||||
UID:3151DE6A-BC35-4612-B340-B53A034A2B27
|
||||
ITEM1.EMAIL:1111@111.com
|
||||
ITEM2.EMAIL:bbbbb@bbbb.com
|
||||
ITEM3.EMAIL:ccccc@ccccc.com
|
||||
FN:First Last
|
||||
N:Last;First;Middle;Dr
|
||||
BDAY:1985-07-20
|
||||
ADR;TYPE=HOME:;;Street;City;;3556;Montenegro
|
||||
ADR;TYPE=WORK:;;Street\\nStreet2;Harkema;;35444;Australia
|
||||
URL:http://google.com
|
||||
END:VCARD
|
||||
HELLO;
|
||||
|
||||
// Check if TITLE is defined
|
||||
$filter1 =
|
||||
array('name' => 'title', 'is-not-defined' => false, 'param-filters' => array(), 'text-matches' => array());
|
||||
|
||||
// Check if FOO is defined
|
||||
$filter2 =
|
||||
array('name' => 'foo', 'is-not-defined' => false, 'param-filters' => array(), 'text-matches' => array());
|
||||
|
||||
// Check if TITLE is not defined
|
||||
$filter3 =
|
||||
array('name' => 'title', 'is-not-defined' => true, 'param-filters' => array(), 'text-matches' => array());
|
||||
|
||||
// Check if FOO is not defined
|
||||
$filter4 =
|
||||
array('name' => 'foo', 'is-not-defined' => true, 'param-filters' => array(), 'text-matches' => array());
|
||||
|
||||
// Check if TEL[TYPE] is defined
|
||||
$filter5 =
|
||||
array(
|
||||
'name' => 'tel',
|
||||
'is-not-defined' => false,
|
||||
'test' => 'anyof',
|
||||
'param-filters' => array(
|
||||
array(
|
||||
'name' => 'type',
|
||||
'is-not-defined' => false,
|
||||
'text-match' => null
|
||||
),
|
||||
),
|
||||
'text-matches' => array(),
|
||||
);
|
||||
|
||||
// Check if TEL[FOO] is defined
|
||||
$filter6 = $filter5;
|
||||
$filter6['param-filters'][0]['name'] = 'FOO';
|
||||
|
||||
// Check if TEL[TYPE] is not defined
|
||||
$filter7 = $filter5;
|
||||
$filter7['param-filters'][0]['is-not-defined'] = true;
|
||||
|
||||
// Check if TEL[FOO] is not defined
|
||||
$filter8 = $filter5;
|
||||
$filter8['param-filters'][0]['name'] = 'FOO';
|
||||
$filter8['param-filters'][0]['is-not-defined'] = true;
|
||||
|
||||
// Combining property filters
|
||||
$filter9 = $filter5;
|
||||
$filter9['param-filters'][] = $filter6['param-filters'][0];
|
||||
|
||||
$filter10 = $filter5;
|
||||
$filter10['param-filters'][] = $filter6['param-filters'][0];
|
||||
$filter10['test'] = 'allof';
|
||||
|
||||
// Check if URL contains 'google'
|
||||
$filter11 =
|
||||
array(
|
||||
'name' => 'url',
|
||||
'is-not-defined' => false,
|
||||
'test' => 'anyof',
|
||||
'param-filters' => array(),
|
||||
'text-matches' => array(
|
||||
array(
|
||||
'match-type' => 'contains',
|
||||
'value' => 'google',
|
||||
'negate-condition' => false,
|
||||
'collation' => 'i;octet',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
// Check if URL contains 'bing'
|
||||
$filter12 = $filter11;
|
||||
$filter12['text-matches'][0]['value'] = 'bing';
|
||||
|
||||
// Check if URL does not contain 'google'
|
||||
$filter13 = $filter11;
|
||||
$filter13['text-matches'][0]['negate-condition'] = true;
|
||||
|
||||
// Check if URL does not contain 'bing'
|
||||
$filter14 = $filter11;
|
||||
$filter14['text-matches'][0]['value'] = 'bing';
|
||||
$filter14['text-matches'][0]['negate-condition'] = true;
|
||||
|
||||
// Param filter with text
|
||||
$filter15 = $filter5;
|
||||
$filter15['param-filters'][0]['text-match'] = array(
|
||||
'match-type' => 'contains',
|
||||
'value' => 'WORK',
|
||||
'collation' => 'i;octet',
|
||||
'negate-condition' => false,
|
||||
);
|
||||
$filter16 = $filter15;
|
||||
$filter16['param-filters'][0]['text-match']['negate-condition'] = true;
|
||||
|
||||
|
||||
// Param filter + text filter
|
||||
$filter17 = $filter5;
|
||||
$filter17['test'] = 'anyof';
|
||||
$filter17['text-matches'][] = array(
|
||||
'match-type' => 'contains',
|
||||
'value' => '444',
|
||||
'collation' => 'i;octet',
|
||||
'negate-condition' => false,
|
||||
);
|
||||
|
||||
$filter18 = $filter17;
|
||||
$filter18['text-matches'][0]['negate-condition'] = true;
|
||||
|
||||
$filter18['test'] = 'allof';
|
||||
|
||||
return array(
|
||||
|
||||
// Basic filters
|
||||
array($body1, array($filter1), 'anyof',true),
|
||||
array($body1, array($filter2), 'anyof',false),
|
||||
array($body1, array($filter3), 'anyof',false),
|
||||
array($body1, array($filter4), 'anyof',true),
|
||||
|
||||
// Combinations
|
||||
array($body1, array($filter1, $filter2), 'anyof',true),
|
||||
array($body1, array($filter1, $filter2), 'allof',false),
|
||||
array($body1, array($filter1, $filter4), 'anyof',true),
|
||||
array($body1, array($filter1, $filter4), 'allof',true),
|
||||
array($body1, array($filter2, $filter3), 'anyof',false),
|
||||
array($body1, array($filter2, $filter3), 'allof',false),
|
||||
|
||||
// Basic parameters
|
||||
array($body1, array($filter5), 'anyof', true, 'TEL;TYPE is defined, so this should return true'),
|
||||
array($body1, array($filter6), 'anyof', false, 'TEL;FOO is not defined, so this should return false'),
|
||||
|
||||
array($body1, array($filter7), 'anyof', false, 'TEL;TYPE is defined, so this should return false'),
|
||||
array($body1, array($filter8), 'anyof', true, 'TEL;TYPE is not defined, so this should return true'),
|
||||
|
||||
// Combined parameters
|
||||
array($body1, array($filter9), 'anyof', true),
|
||||
array($body1, array($filter10), 'anyof', false),
|
||||
|
||||
// Text-filters
|
||||
array($body1, array($filter11), 'anyof', true),
|
||||
array($body1, array($filter12), 'anyof', false),
|
||||
array($body1, array($filter13), 'anyof', false),
|
||||
array($body1, array($filter14), 'anyof', true),
|
||||
|
||||
// Param filter with text-match
|
||||
array($body1, array($filter15), 'anyof', true),
|
||||
array($body1, array($filter16), 'anyof', false),
|
||||
|
||||
// Param filter + text filter
|
||||
array($body1, array($filter17), 'anyof', true),
|
||||
array($body1, array($filter18), 'anyof', false),
|
||||
array($body1, array($filter18), 'anyof', false),
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
149
dav/SabreDAV/tests/Sabre/CardDAV/ValidateVCardTest.php
Normal file
149
dav/SabreDAV/tests/Sabre/CardDAV/ValidateVCardTest.php
Normal file
|
|
@ -0,0 +1,149 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/CardDAV/Backend/Mock.php';
|
||||
require_once 'Sabre/DAVACL/MockPrincipalBackend.php';
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
|
||||
class Sabre_CardDAV_ValidateVCardTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
protected $server;
|
||||
protected $cardBackend;
|
||||
|
||||
function setUp() {
|
||||
|
||||
$addressbooks = array(
|
||||
array(
|
||||
'id' => 'addressbook1',
|
||||
'principaluri' => 'principals/admin',
|
||||
'uri' => 'addressbook1',
|
||||
)
|
||||
);
|
||||
|
||||
$this->cardBackend = new Sabre_CardDAV_Backend_Mock($addressbooks,array());
|
||||
$principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
|
||||
$tree = array(
|
||||
new Sabre_CardDAV_AddressBookRoot($principalBackend, $this->cardBackend),
|
||||
);
|
||||
|
||||
$this->server = new Sabre_DAV_Server($tree);
|
||||
$this->server->debugExceptions = true;
|
||||
|
||||
$plugin = new Sabre_CardDAV_Plugin();
|
||||
$this->server->addPlugin($plugin);
|
||||
|
||||
$response = new Sabre_HTTP_ResponseMock();
|
||||
$this->server->httpResponse = $response;
|
||||
|
||||
}
|
||||
|
||||
function request(Sabre_HTTP_Request $request) {
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
return $this->server->httpResponse;
|
||||
|
||||
}
|
||||
|
||||
function testCreateFile() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'REQUEST_URI' => '/addressbooks/admin/addressbook1/blabla.vcf',
|
||||
));
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 415 Unsupported Media Type', $response->status);
|
||||
|
||||
}
|
||||
|
||||
function testCreateFileValid() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'REQUEST_URI' => '/addressbooks/admin/addressbook1/blabla.vcf',
|
||||
));
|
||||
$request->setBody("BEGIN:VCARD\r\nUID:foo\r\nEND:VCARD\r\n");
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 201 Created', $response->status, 'Incorrect status returned! Full response body: ' . $response->body);
|
||||
$expected = array(
|
||||
'uri' => 'blabla.vcf',
|
||||
'carddata' => "BEGIN:VCARD\r\nUID:foo\r\nEND:VCARD\r\n",
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $this->cardBackend->getCard('addressbook1','blabla.vcf'));
|
||||
|
||||
}
|
||||
|
||||
function testCreateFileNoUID() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'REQUEST_URI' => '/addressbooks/admin/addressbook1/blabla.vcf',
|
||||
));
|
||||
$request->setBody("BEGIN:VCARD\r\nEND:VCARD\r\n");
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 400 Bad request', $response->status, 'Incorrect status returned! Full response body: ' . $response->body);
|
||||
|
||||
}
|
||||
|
||||
|
||||
function testCreateFileVCalendar() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'REQUEST_URI' => '/addressbooks/admin/addressbook1/blabla.vcf',
|
||||
));
|
||||
$request->setBody("BEGIN:VCALENDAR\r\nEND:VCALENDAR\r\n");
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 415 Unsupported Media Type', $response->status, 'Incorrect status returned! Full response body: ' . $response->body);
|
||||
|
||||
}
|
||||
|
||||
function testUpdateFile() {
|
||||
|
||||
$this->cardBackend->createCard('addressbook1','blabla.vcf','foo');
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'REQUEST_URI' => '/addressbooks/admin/addressbook1/blabla.vcf',
|
||||
));
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 415 Unsupported Media Type', $response->status);
|
||||
|
||||
}
|
||||
|
||||
function testUpdateFileParsableBody() {
|
||||
|
||||
$this->cardBackend->createCard('addressbook1','blabla.vcf','foo');
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'REQUEST_URI' => '/addressbooks/admin/addressbook1/blabla.vcf',
|
||||
));
|
||||
$body = "BEGIN:VCARD\r\nUID:foo\r\nEND:VCARD\r\n";
|
||||
$request->setBody($body);
|
||||
|
||||
$response = $this->request($request);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 204 No Content', $response->status);
|
||||
|
||||
$expected = array(
|
||||
'uri' => 'blabla.vcf',
|
||||
'carddata' => $body,
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $this->cardBackend->getCard('addressbook1','blabla.vcf'));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
15
dav/SabreDAV/tests/Sabre/CardDAV/VersionTest.php
Normal file
15
dav/SabreDAV/tests/Sabre/CardDAV/VersionTest.php
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
|
||||
class Sabre_CardDAV_VersionTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testString() {
|
||||
|
||||
$v = Sabre_CardDAV_Version::VERSION;
|
||||
$this->assertEquals(-1, version_compare('0.1',$v));
|
||||
|
||||
$s = Sabre_CardDAV_Version::STABILITY;
|
||||
$this->assertTrue($s == 'alpha' || $s == 'beta' || $s =='stable');
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
60
dav/SabreDAV/tests/Sabre/DAV/AbstractServer.php
Normal file
60
dav/SabreDAV/tests/Sabre/DAV/AbstractServer.php
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
|
||||
abstract class Sabre_DAV_AbstractServer extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @var Sabre_HTTP_ResponseMock
|
||||
*/
|
||||
protected $response;
|
||||
protected $request;
|
||||
/**
|
||||
* @var Sabre_DAV_Server
|
||||
*/
|
||||
protected $server;
|
||||
protected $tempDir = SABRE_TEMPDIR;
|
||||
|
||||
function setUp() {
|
||||
|
||||
$this->response = new Sabre_HTTP_ResponseMock();
|
||||
$this->server = new Sabre_DAV_Server($this->getRootNode());
|
||||
$this->server->httpResponse = $this->response;
|
||||
$this->server->debugExceptions = true;
|
||||
file_put_contents(SABRE_TEMPDIR . '/test.txt', 'Test contents');
|
||||
mkdir(SABRE_TEMPDIR . '/dir');
|
||||
file_put_contents(SABRE_TEMPDIR . '/dir/child.txt', 'Child contents');
|
||||
|
||||
|
||||
}
|
||||
|
||||
function tearDown() {
|
||||
|
||||
$this->deleteTree(SABRE_TEMPDIR,false);
|
||||
|
||||
}
|
||||
|
||||
protected function getRootNode() {
|
||||
|
||||
return new Sabre_DAV_FS_Directory(SABRE_TEMPDIR);
|
||||
|
||||
}
|
||||
|
||||
private function deleteTree($path,$deleteRoot = true) {
|
||||
|
||||
foreach(scandir($path) as $node) {
|
||||
|
||||
if ($node=='.' || $node=='.svn' || $node=='..') continue;
|
||||
$myPath = $path.'/'. $node;
|
||||
if (is_file($myPath)) {
|
||||
unlink($myPath);
|
||||
} else {
|
||||
$this->deleteTree($myPath);
|
||||
}
|
||||
|
||||
}
|
||||
if ($deleteRoot) rmdir($path);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,87 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
|
||||
class Sabre_DAV_Auth_Backend_AbstractBasicTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_NotAuthenticated
|
||||
*/
|
||||
public function testAuthenticateNoHeaders() {
|
||||
|
||||
$response = new Sabre_HTTP_ResponseMock();
|
||||
$tree = new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('bla'));
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->httpResponse = $response;
|
||||
|
||||
$backend = new Sabre_DAV_Auth_Backend_AbstractBasicMock();
|
||||
$backend->authenticate($server,'myRealm');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_NotAuthenticated
|
||||
*/
|
||||
public function testAuthenticateUnknownUser() {
|
||||
|
||||
$response = new Sabre_HTTP_ResponseMock();
|
||||
$tree = new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('bla'));
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->httpResponse = $response;
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'PHP_AUTH_USER' => 'username',
|
||||
'PHP_AUTH_PW' => 'wrongpassword',
|
||||
));
|
||||
$server->httpRequest = $request;
|
||||
|
||||
$backend = new Sabre_DAV_Auth_Backend_AbstractBasicMock();
|
||||
$backend->authenticate($server,'myRealm');
|
||||
|
||||
}
|
||||
|
||||
public function testAuthenticate() {
|
||||
|
||||
$response = new Sabre_HTTP_ResponseMock();
|
||||
$tree = new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('bla'));
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->httpResponse = $response;
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'PHP_AUTH_USER' => 'username',
|
||||
'PHP_AUTH_PW' => 'password',
|
||||
));
|
||||
$server->httpRequest = $request;
|
||||
|
||||
$backend = new Sabre_DAV_Auth_Backend_AbstractBasicMock();
|
||||
$this->assertTrue($backend->authenticate($server,'myRealm'));
|
||||
|
||||
$result = $backend->getCurrentUser();
|
||||
|
||||
$this->assertEquals('username', $result);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
class Sabre_DAV_Auth_Backend_AbstractBasicMock extends Sabre_DAV_Auth_Backend_AbstractBasic {
|
||||
|
||||
/**
|
||||
* Validates a username and password
|
||||
*
|
||||
* This method should return true or false depending on if login
|
||||
* succeeded.
|
||||
*
|
||||
* @param string $username
|
||||
* @param string $password
|
||||
* @return bool
|
||||
*/
|
||||
function validateUserPass($username, $password) {
|
||||
|
||||
return ($username == 'username' && $password == 'password');
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
150
dav/SabreDAV/tests/Sabre/DAV/Auth/Backend/AbstractDigestTest.php
Normal file
150
dav/SabreDAV/tests/Sabre/DAV/Auth/Backend/AbstractDigestTest.php
Normal file
|
|
@ -0,0 +1,150 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
|
||||
class Sabre_DAV_Auth_Backend_AbstractDigestTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_NotAuthenticated
|
||||
*/
|
||||
public function testAuthenticateNoHeaders() {
|
||||
|
||||
$response = new Sabre_HTTP_ResponseMock();
|
||||
$tree = new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('bla'));
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->httpResponse = $response;
|
||||
|
||||
$backend = new Sabre_DAV_Auth_Backend_AbstractDigestMock();
|
||||
$backend->authenticate($server,'myRealm');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception
|
||||
*/
|
||||
public function testAuthenticateBadGetUserInfoResponse() {
|
||||
|
||||
$response = new Sabre_HTTP_ResponseMock();
|
||||
$tree = new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('bla'));
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->httpResponse = $response;
|
||||
|
||||
$header = 'username=null, realm=myRealm, nonce=12345, uri=/, response=HASH, opaque=1, qop=auth, nc=1, cnonce=1';
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'PHP_AUTH_DIGEST' => $header,
|
||||
));
|
||||
$server->httpRequest = $request;
|
||||
|
||||
$backend = new Sabre_DAV_Auth_Backend_AbstractDigestMock();
|
||||
$backend->authenticate($server,'myRealm');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception
|
||||
*/
|
||||
public function testAuthenticateBadGetUserInfoResponse2() {
|
||||
|
||||
$response = new Sabre_HTTP_ResponseMock();
|
||||
$tree = new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('bla'));
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->httpResponse = $response;
|
||||
|
||||
$header = 'username=array, realm=myRealm, nonce=12345, uri=/, response=HASH, opaque=1, qop=auth, nc=1, cnonce=1';
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'PHP_AUTH_DIGEST' => $header,
|
||||
));
|
||||
$server->httpRequest = $request;
|
||||
|
||||
$backend = new Sabre_DAV_Auth_Backend_AbstractDigestMock();
|
||||
$backend->authenticate($server,'myRealm');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_NotAuthenticated
|
||||
*/
|
||||
public function testAuthenticateUnknownUser() {
|
||||
|
||||
$response = new Sabre_HTTP_ResponseMock();
|
||||
$tree = new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('bla'));
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->httpResponse = $response;
|
||||
|
||||
$header = 'username=false, realm=myRealm, nonce=12345, uri=/, response=HASH, opaque=1, qop=auth, nc=1, cnonce=1';
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'PHP_AUTH_DIGEST' => $header,
|
||||
));
|
||||
$server->httpRequest = $request;
|
||||
|
||||
$backend = new Sabre_DAV_Auth_Backend_AbstractDigestMock();
|
||||
$backend->authenticate($server,'myRealm');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_NotAuthenticated
|
||||
*/
|
||||
public function testAuthenticateBadPassword() {
|
||||
|
||||
$response = new Sabre_HTTP_ResponseMock();
|
||||
$tree = new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('bla'));
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->httpResponse = $response;
|
||||
|
||||
$header = 'username=user, realm=myRealm, nonce=12345, uri=/, response=HASH, opaque=1, qop=auth, nc=1, cnonce=1';
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'PHP_AUTH_DIGEST' => $header,
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
));
|
||||
$server->httpRequest = $request;
|
||||
|
||||
$backend = new Sabre_DAV_Auth_Backend_AbstractDigestMock();
|
||||
$backend->authenticate($server,'myRealm');
|
||||
|
||||
}
|
||||
|
||||
public function testAuthenticate() {
|
||||
|
||||
$response = new Sabre_HTTP_ResponseMock();
|
||||
$tree = new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('bla'));
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->httpResponse = $response;
|
||||
|
||||
$digestHash = md5('HELLO:12345:1:1:auth:' . md5('GET:/'));
|
||||
$header = 'username=user, realm=myRealm, nonce=12345, uri=/, response='.$digestHash.', opaque=1, qop=auth, nc=1, cnonce=1';
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
'PHP_AUTH_DIGEST' => $header,
|
||||
'REQUEST_URI' => '/',
|
||||
));
|
||||
$server->httpRequest = $request;
|
||||
|
||||
$backend = new Sabre_DAV_Auth_Backend_AbstractDigestMock();
|
||||
$this->assertTrue($backend->authenticate($server,'myRealm'));
|
||||
|
||||
$result = $backend->getCurrentUser();
|
||||
|
||||
$this->assertEquals('user', $result);
|
||||
$this->assertEquals('HELLO', $backend->getDigestHash('myRealm', $result));
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
class Sabre_DAV_Auth_Backend_AbstractDigestMock extends Sabre_DAV_Auth_Backend_AbstractDigest {
|
||||
|
||||
function getDigestHash($realm, $userName) {
|
||||
|
||||
switch($userName) {
|
||||
case 'null' : return null;
|
||||
case 'false' : return false;
|
||||
case 'array' : return array();
|
||||
case 'user' : return 'HELLO';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
|
||||
abstract class Sabre_DAV_Auth_Backend_AbstractPDOTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
abstract function getPDO();
|
||||
|
||||
function testConstruct() {
|
||||
|
||||
$pdo = $this->getPDO();
|
||||
$backend = new Sabre_DAV_Auth_Backend_PDO($pdo);
|
||||
$this->assertTrue($backend instanceof Sabre_DAV_Auth_Backend_PDO);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testConstruct
|
||||
*/
|
||||
function testUserInfo() {
|
||||
|
||||
$pdo = $this->getPDO();
|
||||
$backend = new Sabre_DAV_Auth_Backend_PDO($pdo);
|
||||
|
||||
$this->assertNull($backend->getDigestHash('realm','blabla'));
|
||||
|
||||
$expected = 'hash';
|
||||
|
||||
$this->assertEquals($expected, $backend->getDigestHash('realm','user'));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
40
dav/SabreDAV/tests/Sabre/DAV/Auth/Backend/ApacheTest.php
Normal file
40
dav/SabreDAV/tests/Sabre/DAV/Auth/Backend/ApacheTest.php
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAV_Auth_Backend_ApacheTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testConstruct() {
|
||||
|
||||
$backend = new Sabre_DAV_Auth_Backend_Apache();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception
|
||||
*/
|
||||
function testNoHeader() {
|
||||
|
||||
$server = new Sabre_DAV_Server();
|
||||
$backend = new Sabre_DAV_Auth_Backend_Apache();
|
||||
$backend->authenticate($server,'Realm');
|
||||
|
||||
}
|
||||
|
||||
function testRemoteUser() {
|
||||
|
||||
$backend = new Sabre_DAV_Auth_Backend_Apache();
|
||||
|
||||
$server = new Sabre_DAV_Server();
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REMOTE_USER' => 'username',
|
||||
));
|
||||
$server->httpRequest = $request;
|
||||
|
||||
$this->assertTrue($backend->authenticate($server, 'Realm'));
|
||||
|
||||
$userInfo = 'username';
|
||||
|
||||
$this->assertEquals($userInfo, $backend->getCurrentUser());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
40
dav/SabreDAV/tests/Sabre/DAV/Auth/Backend/FileTest.php
Normal file
40
dav/SabreDAV/tests/Sabre/DAV/Auth/Backend/FileTest.php
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAV_Auth_Backend_FileTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function tearDown() {
|
||||
|
||||
if (file_exists(SABRE_TEMPDIR . '/filebackend')) unlink(SABRE_TEMPDIR .'/filebackend');
|
||||
|
||||
}
|
||||
|
||||
function testConstruct() {
|
||||
|
||||
$file = new Sabre_DAV_Auth_Backend_File();
|
||||
$this->assertTrue($file instanceof Sabre_DAV_Auth_Backend_File);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception
|
||||
*/
|
||||
function testLoadFileBroken() {
|
||||
|
||||
file_put_contents(SABRE_TEMPDIR . '/backend','user:realm:hash');
|
||||
$file = new Sabre_DAV_Auth_Backend_File();
|
||||
$file->loadFile(SABRE_TEMPDIR .'/backend');
|
||||
|
||||
}
|
||||
|
||||
function testLoadFile() {
|
||||
|
||||
file_put_contents(SABRE_TEMPDIR . '/backend','user:realm:' . md5('user:realm:password'));
|
||||
$file = new Sabre_DAV_Auth_Backend_File();
|
||||
$file->loadFile(SABRE_TEMPDIR . '/backend');
|
||||
|
||||
$this->assertFalse($file->getDigestHash('realm','blabla'));
|
||||
$this->assertEquals(md5('user:realm:password'), $file->getDigesthash('realm','user'));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
24
dav/SabreDAV/tests/Sabre/DAV/Auth/Backend/PDOMySQLTest
Normal file
24
dav/SabreDAV/tests/Sabre/DAV/Auth/Backend/PDOMySQLTest
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAV_Auth_Backend_PDOSQLiteTest extends Sabre_DAV_Auth_Backend_AbstractPDOTest {
|
||||
|
||||
function tearDown() {
|
||||
|
||||
if (file_exists(SABRE_TEMPDIR . '/pdobackend')) unlink(SABRE_TEMPDIR . '/pdobackend');
|
||||
if (file_exists(SABRE_TEMPDIR . '/pdobackend2')) unlink(SABRE_TEMPDIR . '/pdobackend2');
|
||||
|
||||
}
|
||||
|
||||
function getPDO() {
|
||||
|
||||
if (!SABRE_HASSQLITE) $this->markTestSkipped('SQLite driver is not available');
|
||||
$pdo = new PDO('sqlite:'.SABRE_TEMPDIR.'/pdobackend');
|
||||
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
|
||||
$pdo->query('CREATE TABLE users (username TEXT, digesta1 TEXT)');
|
||||
$pdo->query('INSERT INTO users VALUES ("user","hash")');
|
||||
|
||||
return $pdo;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
29
dav/SabreDAV/tests/Sabre/DAV/Auth/Backend/PDOMySQLTest.php
Normal file
29
dav/SabreDAV/tests/Sabre/DAV/Auth/Backend/PDOMySQLTest.php
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/TestUtil.php';
|
||||
|
||||
class Sabre_DAV_Auth_Backend_PDOMySQLTest extends Sabre_DAV_Auth_Backend_AbstractPDOTest {
|
||||
|
||||
function getPDO() {
|
||||
|
||||
if (!SABRE_HASMYSQL) $this->markTestSkipped('MySQL driver is not available, or not properly configured');
|
||||
$pdo = Sabre_TestUtil::getMySQLDB();
|
||||
if (!$pdo) $this->markTestSkipped('Could not connect to MySQL database');
|
||||
$pdo->query("DROP TABLE IF EXISTS users");
|
||||
$pdo->query("
|
||||
create table users (
|
||||
id integer unsigned not null primary key auto_increment,
|
||||
username varchar(50),
|
||||
digesta1 varchar(32),
|
||||
email varchar(80),
|
||||
displayname varchar(80),
|
||||
unique(username)
|
||||
);");
|
||||
|
||||
$pdo->query("INSERT INTO users (username,digesta1,email,displayname) VALUES ('user','hash','user@example.org','User')");
|
||||
|
||||
return $pdo;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
26
dav/SabreDAV/tests/Sabre/DAV/Auth/Backend/PDOSqliteTest.php
Normal file
26
dav/SabreDAV/tests/Sabre/DAV/Auth/Backend/PDOSqliteTest.php
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/DAV/Auth/Backend/AbstractPDOTest.php';
|
||||
|
||||
class Sabre_DAV_Auth_Backend_PDOSQLiteTest extends Sabre_DAV_Auth_Backend_AbstractPDOTest {
|
||||
|
||||
function tearDown() {
|
||||
|
||||
if (file_exists(SABRE_TEMPDIR . '/pdobackend')) unlink(SABRE_TEMPDIR . '/pdobackend');
|
||||
if (file_exists(SABRE_TEMPDIR . '/pdobackend2')) unlink(SABRE_TEMPDIR . '/pdobackend2');
|
||||
|
||||
}
|
||||
|
||||
function getPDO() {
|
||||
|
||||
if (!SABRE_HASSQLITE) $this->markTestSkipped('SQLite driver is not available');
|
||||
$pdo = new PDO('sqlite:'.SABRE_TEMPDIR.'/pdobackend');
|
||||
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
|
||||
$pdo->query('CREATE TABLE users (username TEXT, digesta1 TEXT, email VARCHAR(80), displayname VARCHAR(80))');
|
||||
$pdo->query('INSERT INTO users VALUES ("user","hash","user@example.org","User")');
|
||||
|
||||
return $pdo;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
32
dav/SabreDAV/tests/Sabre/DAV/Auth/MockBackend.php
Normal file
32
dav/SabreDAV/tests/Sabre/DAV/Auth/MockBackend.php
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAV_Auth_MockBackend implements Sabre_DAV_Auth_IBackend {
|
||||
|
||||
protected $currentUser;
|
||||
|
||||
/**
|
||||
* @param Sabre_DAV_Server $server
|
||||
* @param string $realm
|
||||
* @throws Sabre_DAV_Exception_NotAuthenticated
|
||||
*/
|
||||
function authenticate(Sabre_DAV_Server $server, $realm) {
|
||||
|
||||
if ($realm=='failme') throw new Sabre_DAV_Exception_NotAuthenticated('deliberate fail');
|
||||
|
||||
$this->currentUser = 'admin';
|
||||
|
||||
}
|
||||
|
||||
function setCurrentUser($user) {
|
||||
|
||||
$this->currentUser = $user;
|
||||
|
||||
}
|
||||
|
||||
function getCurrentUser() {
|
||||
|
||||
return $this->currentUser;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
80
dav/SabreDAV/tests/Sabre/DAV/Auth/PluginTest.php
Normal file
80
dav/SabreDAV/tests/Sabre/DAV/Auth/PluginTest.php
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/DAV/Auth/MockBackend.php';
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
|
||||
class Sabre_DAV_Auth_PluginTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testInit() {
|
||||
|
||||
$fakeServer = new Sabre_DAV_Server(new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('bla')));
|
||||
$plugin = new Sabre_DAV_Auth_Plugin(new Sabre_DAV_Auth_MockBackend(),'realm');
|
||||
$this->assertTrue($plugin instanceof Sabre_DAV_Auth_Plugin);
|
||||
$fakeServer->addPlugin($plugin);
|
||||
$this->assertEquals($plugin, $fakeServer->getPlugin('auth'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testInit
|
||||
*/
|
||||
function testAuthenticate() {
|
||||
|
||||
$fakeServer = new Sabre_DAV_Server(new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('bla')));
|
||||
$plugin = new Sabre_DAV_Auth_Plugin(new Sabre_DAV_Auth_MockBackend(),'realm');
|
||||
$fakeServer->addPlugin($plugin);
|
||||
$fakeServer->broadCastEvent('beforeMethod',array('GET','/'));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @depends testInit
|
||||
* @expectedException Sabre_DAV_Exception_NotAuthenticated
|
||||
*/
|
||||
function testAuthenticateFail() {
|
||||
|
||||
$fakeServer = new Sabre_DAV_Server(new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('bla')));
|
||||
$plugin = new Sabre_DAV_Auth_Plugin(new Sabre_DAV_Auth_MockBackend(),'failme');
|
||||
$fakeServer->addPlugin($plugin);
|
||||
$fakeServer->broadCastEvent('beforeMethod',array('GET','/'));
|
||||
|
||||
}
|
||||
|
||||
function testReportPassThrough() {
|
||||
|
||||
$fakeServer = new Sabre_DAV_Server(new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('bla')));
|
||||
$plugin = new Sabre_DAV_Auth_Plugin(new Sabre_DAV_Auth_MockBackend(),'realm');
|
||||
$fakeServer->addPlugin($plugin);
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'HTTP_CONTENT_TYPE' => 'application/xml',
|
||||
'REQUEST_URI' => '/',
|
||||
));
|
||||
$request->setBody('<?xml version="1.0"?><s:somereport xmlns:s="http://www.rooftopsolutions.nl/NS/example" />');
|
||||
|
||||
$fakeServer->httpRequest = $request;
|
||||
$fakeServer->httpResponse = new Sabre_HTTP_ResponseMock();
|
||||
$fakeServer->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 501 Not Implemented', $fakeServer->httpResponse->status);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testInit
|
||||
*/
|
||||
function testGetCurrentUserPrincipal() {
|
||||
|
||||
$fakeServer = new Sabre_DAV_Server(new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('bla')));
|
||||
$plugin = new Sabre_DAV_Auth_Plugin(new Sabre_DAV_Auth_MockBackend(),'realm');
|
||||
$fakeServer->addPlugin($plugin);
|
||||
$fakeServer->broadCastEvent('beforeMethod',array('GET','/'));
|
||||
$this->assertEquals('admin', $plugin->getCurrentUser());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
232
dav/SabreDAV/tests/Sabre/DAV/BasicNodeTest.php
Normal file
232
dav/SabreDAV/tests/Sabre/DAV/BasicNodeTest.php
Normal file
|
|
@ -0,0 +1,232 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAV_BasicNodeTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_Forbidden
|
||||
*/
|
||||
public function testPut() {
|
||||
|
||||
$file = new Sabre_DAV_FileMock();
|
||||
$file->put('hi');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_Forbidden
|
||||
*/
|
||||
public function testGet() {
|
||||
|
||||
$file = new Sabre_DAV_FileMock();
|
||||
$file->get();
|
||||
|
||||
}
|
||||
|
||||
public function testGetSize() {
|
||||
|
||||
$file = new Sabre_DAV_FileMock();
|
||||
$this->assertEquals(0,$file->getSize());
|
||||
|
||||
}
|
||||
|
||||
|
||||
public function testGetETag() {
|
||||
|
||||
$file = new Sabre_DAV_FileMock();
|
||||
$this->assertNull($file->getETag());
|
||||
|
||||
}
|
||||
|
||||
public function testGetContentType() {
|
||||
|
||||
$file = new Sabre_DAV_FileMock();
|
||||
$this->assertNull($file->getContentType());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_Forbidden
|
||||
*/
|
||||
public function testDelete() {
|
||||
|
||||
$file = new Sabre_DAV_FileMock();
|
||||
$file->delete();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_Forbidden
|
||||
*/
|
||||
public function testSetName() {
|
||||
|
||||
$file = new Sabre_DAV_FileMock();
|
||||
$file->setName('hi');
|
||||
|
||||
}
|
||||
|
||||
public function testGetLastModified() {
|
||||
|
||||
$file = new Sabre_DAV_FileMock();
|
||||
// checking if lastmod is within the range of a few seconds
|
||||
$lastMod = $file->getLastModified();
|
||||
$compareTime = ($lastMod + 1)-time();
|
||||
$this->assertTrue($compareTime < 3);
|
||||
|
||||
}
|
||||
|
||||
public function testGetChild() {
|
||||
|
||||
$dir = new Sabre_DAV_DirectoryMock();
|
||||
$file = $dir->getChild('mockfile');
|
||||
$this->assertTrue($file instanceof Sabre_DAV_FileMock);
|
||||
|
||||
}
|
||||
|
||||
public function testChildExists() {
|
||||
|
||||
$dir = new Sabre_DAV_DirectoryMock();
|
||||
$this->assertTrue($dir->childExists('mockfile'));
|
||||
|
||||
}
|
||||
|
||||
public function testChildExistsFalse() {
|
||||
|
||||
$dir = new Sabre_DAV_DirectoryMock();
|
||||
$this->assertFalse($dir->childExists('mockfile2'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_NotFound
|
||||
*/
|
||||
public function testGetChild404() {
|
||||
|
||||
$dir = new Sabre_DAV_DirectoryMock();
|
||||
$file = $dir->getChild('blabla');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_Forbidden
|
||||
*/
|
||||
public function testCreateFile() {
|
||||
|
||||
$dir = new Sabre_DAV_DirectoryMock();
|
||||
$dir->createFile('hello','data');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_Forbidden
|
||||
*/
|
||||
public function testCreateDirectory() {
|
||||
|
||||
$dir = new Sabre_DAV_DirectoryMock();
|
||||
$dir->createDirectory('hello');
|
||||
|
||||
}
|
||||
|
||||
public function testSimpleDirectoryConstruct() {
|
||||
|
||||
$dir = new Sabre_DAV_SimpleCollection('simpledir',array());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSimpleDirectoryConstruct
|
||||
*/
|
||||
public function testSimpleDirectoryConstructChild() {
|
||||
|
||||
$file = new Sabre_DAV_FileMock();
|
||||
$dir = new Sabre_DAV_SimpleCollection('simpledir',array($file));
|
||||
$file2 = $dir->getChild('mockfile');
|
||||
|
||||
$this->assertEquals($file,$file2);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception
|
||||
* @depends testSimpleDirectoryConstruct
|
||||
*/
|
||||
public function testSimpleDirectoryBadParam() {
|
||||
|
||||
$dir = new Sabre_DAV_SimpleCollection('simpledir',array('string shouldn\'t be here'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSimpleDirectoryConstruct
|
||||
*/
|
||||
public function testSimpleDirectoryAddChild() {
|
||||
|
||||
$file = new Sabre_DAV_FileMock();
|
||||
$dir = new Sabre_DAV_SimpleCollection('simpledir');
|
||||
$dir->addChild($file);
|
||||
$file2 = $dir->getChild('mockfile');
|
||||
|
||||
$this->assertEquals($file,$file2);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSimpleDirectoryConstruct
|
||||
* @depends testSimpleDirectoryAddChild
|
||||
*/
|
||||
public function testSimpleDirectoryGetChildren() {
|
||||
|
||||
$file = new Sabre_DAV_FileMock();
|
||||
$dir = new Sabre_DAV_SimpleCollection('simpledir');
|
||||
$dir->addChild($file);
|
||||
|
||||
$this->assertEquals(array($file),$dir->getChildren());
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* @depends testSimpleDirectoryConstruct
|
||||
*/
|
||||
public function testSimpleDirectoryGetName() {
|
||||
|
||||
$dir = new Sabre_DAV_SimpleCollection('simpledir');
|
||||
$this->assertEquals('simpledir',$dir->getName());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSimpleDirectoryConstruct
|
||||
* @expectedException Sabre_DAV_Exception_NotFound
|
||||
*/
|
||||
public function testSimpleDirectoryGetChild404() {
|
||||
|
||||
$dir = new Sabre_DAV_SimpleCollection('simpledir');
|
||||
$dir->getChild('blabla');
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
class Sabre_DAV_DirectoryMock extends Sabre_DAV_Collection {
|
||||
|
||||
function getName() {
|
||||
|
||||
return 'mockdir';
|
||||
|
||||
}
|
||||
|
||||
function getChildren() {
|
||||
|
||||
return array(new Sabre_DAV_FileMock());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class Sabre_DAV_FileMock extends Sabre_DAV_File {
|
||||
|
||||
function getName() {
|
||||
|
||||
return 'mockfile';
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/DAV/AbstractServer.php';
|
||||
class Sabre_DAV_Browser_GuessContentTypeTest extends Sabre_DAV_AbstractServer {
|
||||
|
||||
function setUp() {
|
||||
|
||||
parent::setUp();
|
||||
file_put_contents(SABRE_TEMPDIR . '/somefile.jpg','blabla');
|
||||
file_put_contents(SABRE_TEMPDIR . '/somefile.hoi','blabla');
|
||||
|
||||
}
|
||||
|
||||
function tearDown() {
|
||||
|
||||
unlink(SABRE_TEMPDIR . '/somefile.jpg');
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
function testGetProperties() {
|
||||
|
||||
$properties = array(
|
||||
'{DAV:}getcontenttype',
|
||||
);
|
||||
$result = $this->server->getPropertiesForPath('/somefile.jpg',$properties);
|
||||
$this->assertArrayHasKey(0,$result);
|
||||
$this->assertArrayHasKey(404,$result[0]);
|
||||
$this->assertArrayHasKey('{DAV:}getcontenttype',$result[0][404]);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testGetProperties
|
||||
*/
|
||||
function testGetPropertiesPluginEnabled() {
|
||||
|
||||
$this->server->addPlugin(new Sabre_DAV_Browser_GuessContentType());
|
||||
$properties = array(
|
||||
'{DAV:}getcontenttype',
|
||||
);
|
||||
$result = $this->server->getPropertiesForPath('/somefile.jpg',$properties);
|
||||
$this->assertArrayHasKey(0,$result);
|
||||
$this->assertArrayHasKey(200,$result[0]);
|
||||
$this->assertArrayHasKey('{DAV:}getcontenttype',$result[0][200]);
|
||||
$this->assertEquals('image/jpeg',$result[0][200]['{DAV:}getcontenttype']);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testGetPropertiesPluginEnabled
|
||||
*/
|
||||
function testGetPropertiesUnknown() {
|
||||
|
||||
$this->server->addPlugin(new Sabre_DAV_Browser_GuessContentType());
|
||||
$properties = array(
|
||||
'{DAV:}getcontenttype',
|
||||
);
|
||||
$result = $this->server->getPropertiesForPath('/somefile.hoi',$properties);
|
||||
$this->assertArrayHasKey(0,$result);
|
||||
$this->assertArrayHasKey(404,$result[0]);
|
||||
$this->assertArrayHasKey('{DAV:}getcontenttype',$result[0][404]);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/DAV/AbstractServer.php';
|
||||
|
||||
class Sabre_DAV_Browser_MapGetToPropFindTest extends Sabre_DAV_AbstractServer {
|
||||
|
||||
function setUp() {
|
||||
|
||||
parent::setUp();
|
||||
$this->server->addPlugin(new Sabre_DAV_Browser_MapGetToPropFind());
|
||||
|
||||
}
|
||||
|
||||
function testCollectionGet() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/',
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('');
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
'DAV' => '1, 3, extended-mkcol',
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status',$this->response->status,'Incorrect status response received. Full response body: ' . $this->response->body);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
108
dav/SabreDAV/tests/Sabre/DAV/Browser/PluginTest.php
Normal file
108
dav/SabreDAV/tests/Sabre/DAV/Browser/PluginTest.php
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/DAV/AbstractServer.php';
|
||||
|
||||
class Sabre_DAV_Browser_PluginTest extends Sabre_DAV_AbstractServer{
|
||||
|
||||
function setUp() {
|
||||
|
||||
parent::setUp();
|
||||
$this->server->addPlugin(new Sabre_DAV_Browser_Plugin());
|
||||
|
||||
}
|
||||
|
||||
function testCollectionGet() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/dir',
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status);
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'text/html; charset=utf-8',
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertTrue(strpos($this->response->body, 'Index for dir/') !== false);
|
||||
|
||||
}
|
||||
|
||||
function testNotFound() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/random',
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 404 Not Found',$this->response->status);
|
||||
|
||||
}
|
||||
|
||||
function testPostOtherContentType() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/',
|
||||
'REQUEST_METHOD' => 'POST',
|
||||
'CONTENT_TYPE' => 'text/xml',
|
||||
);
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 501 Not Implemented', $this->response->status);
|
||||
|
||||
}
|
||||
|
||||
function testPostNoSabreAction() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/',
|
||||
'REQUEST_METHOD' => 'POST',
|
||||
'CONTENT_TYPE' => 'application/x-www-form-urlencoded',
|
||||
);
|
||||
$postVars = array();
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars,$postVars);
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 501 Not Implemented', $this->response->status);
|
||||
|
||||
}
|
||||
|
||||
function testPostMkCol() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/',
|
||||
'REQUEST_METHOD' => 'POST',
|
||||
'CONTENT_TYPE' => 'application/x-www-form-urlencoded',
|
||||
);
|
||||
$postVars = array(
|
||||
'sabreAction' => 'mkcol',
|
||||
'name' => 'new_collection',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars,$postVars);
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 302 Found', $this->response->status);
|
||||
$this->assertEquals(array(
|
||||
'Location' => '/',
|
||||
), $this->response->headers);
|
||||
|
||||
$this->assertTrue(is_dir(SABRE_TEMPDIR . '/new_collection'));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
30
dav/SabreDAV/tests/Sabre/DAV/ClientMock.php
Normal file
30
dav/SabreDAV/tests/Sabre/DAV/ClientMock.php
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAV_ClientMock extends Sabre_DAV_Client {
|
||||
|
||||
public $response;
|
||||
|
||||
public $url;
|
||||
public $curlSettings;
|
||||
|
||||
protected function curlRequest($url, $curlSettings) {
|
||||
|
||||
$this->url = $url;
|
||||
$this->curlSettings = $curlSettings;
|
||||
return $this->response;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Just making this method public
|
||||
*
|
||||
* @param string $url
|
||||
* @return string
|
||||
*/
|
||||
public function getAbsoluteUrl($url) {
|
||||
|
||||
return parent::getAbsoluteUrl($url);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
791
dav/SabreDAV/tests/Sabre/DAV/ClientTest.php
Normal file
791
dav/SabreDAV/tests/Sabre/DAV/ClientTest.php
Normal file
|
|
@ -0,0 +1,791 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/DAV/ClientMock.php';
|
||||
|
||||
class Sabre_DAV_ClientTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testConstruct() {
|
||||
|
||||
$client = new Sabre_DAV_ClientMock(array(
|
||||
'baseUri' => '/',
|
||||
));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException InvalidArgumentException
|
||||
*/
|
||||
function testConstructNoBaseUri() {
|
||||
|
||||
$client = new Sabre_DAV_ClientMock(array());
|
||||
|
||||
}
|
||||
|
||||
function testRequest() {
|
||||
|
||||
$client = new Sabre_DAV_ClientMock(array(
|
||||
'baseUri' => 'http://example.org/foo/bar/',
|
||||
));
|
||||
|
||||
$responseBlob = array(
|
||||
"HTTP/1.1 200 OK",
|
||||
"Content-Type: text/plain",
|
||||
"",
|
||||
"Hello there!"
|
||||
);
|
||||
|
||||
$client->response = array(
|
||||
implode("\r\n", $responseBlob),
|
||||
array(
|
||||
'header_size' => 45,
|
||||
'http_code' => 200,
|
||||
),
|
||||
0,
|
||||
""
|
||||
);
|
||||
|
||||
$result = $client->request('POST', 'baz', 'sillybody', array('Content-Type' => 'text/plain'));
|
||||
|
||||
$this->assertEquals('http://example.org/foo/bar/baz', $client->url);
|
||||
$this->assertEquals(array(
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_FOLLOWLOCATION => true,
|
||||
CURLOPT_MAXREDIRS => 5,
|
||||
CURLOPT_CUSTOMREQUEST => 'POST',
|
||||
CURLOPT_POSTFIELDS => 'sillybody',
|
||||
CURLOPT_HEADER => true,
|
||||
CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
|
||||
), $client->curlSettings);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'statusCode' => 200,
|
||||
'headers' => array(
|
||||
'content-type' => 'text/plain',
|
||||
),
|
||||
'body' => 'Hello there!'
|
||||
), $result);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
function testRequestProxy() {
|
||||
|
||||
$client = new Sabre_DAV_ClientMock(array(
|
||||
'baseUri' => 'http://example.org/foo/bar/',
|
||||
'proxy' => 'http://localhost:8000/',
|
||||
));
|
||||
|
||||
$responseBlob = array(
|
||||
"HTTP/1.1 200 OK",
|
||||
"Content-Type: text/plain",
|
||||
"",
|
||||
"Hello there!"
|
||||
);
|
||||
|
||||
$client->response = array(
|
||||
implode("\r\n", $responseBlob),
|
||||
array(
|
||||
'header_size' => 45,
|
||||
'http_code' => 200,
|
||||
),
|
||||
0,
|
||||
""
|
||||
);
|
||||
|
||||
$result = $client->request('POST', 'baz', 'sillybody', array('Content-Type' => 'text/plain'));
|
||||
|
||||
$this->assertEquals('http://example.org/foo/bar/baz', $client->url);
|
||||
$this->assertEquals(array(
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_FOLLOWLOCATION => true,
|
||||
CURLOPT_MAXREDIRS => 5,
|
||||
CURLOPT_CUSTOMREQUEST => 'POST',
|
||||
CURLOPT_POSTFIELDS => 'sillybody',
|
||||
CURLOPT_HEADER => true,
|
||||
CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
|
||||
CURLOPT_PROXY => 'http://localhost:8000/',
|
||||
), $client->curlSettings);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'statusCode' => 200,
|
||||
'headers' => array(
|
||||
'content-type' => 'text/plain',
|
||||
),
|
||||
'body' => 'Hello there!'
|
||||
), $result);
|
||||
|
||||
}
|
||||
|
||||
|
||||
function testRequestAuth() {
|
||||
|
||||
$client = new Sabre_DAV_ClientMock(array(
|
||||
'baseUri' => 'http://example.org/foo/bar/',
|
||||
'userName' => 'user',
|
||||
'password' => 'password',
|
||||
));
|
||||
|
||||
$responseBlob = array(
|
||||
"HTTP/1.1 200 OK",
|
||||
"Content-Type: text/plain",
|
||||
"",
|
||||
"Hello there!"
|
||||
);
|
||||
|
||||
$client->response = array(
|
||||
implode("\r\n", $responseBlob),
|
||||
array(
|
||||
'header_size' => 45,
|
||||
'http_code' => 200,
|
||||
),
|
||||
0,
|
||||
""
|
||||
);
|
||||
|
||||
$result = $client->request('POST', 'baz', 'sillybody', array('Content-Type' => 'text/plain'));
|
||||
|
||||
$this->assertEquals('http://example.org/foo/bar/baz', $client->url);
|
||||
$this->assertEquals(array(
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_FOLLOWLOCATION => true,
|
||||
CURLOPT_MAXREDIRS => 5,
|
||||
CURLOPT_CUSTOMREQUEST => 'POST',
|
||||
CURLOPT_POSTFIELDS => 'sillybody',
|
||||
CURLOPT_HEADER => true,
|
||||
CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
|
||||
CURLOPT_HTTPAUTH => CURLAUTH_BASIC | CURLAUTH_DIGEST,
|
||||
CURLOPT_USERPWD => 'user:password'
|
||||
), $client->curlSettings);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'statusCode' => 200,
|
||||
'headers' => array(
|
||||
'content-type' => 'text/plain',
|
||||
),
|
||||
'body' => 'Hello there!'
|
||||
), $result);
|
||||
|
||||
}
|
||||
|
||||
function testRequestAuthBasic() {
|
||||
|
||||
$client = new Sabre_DAV_ClientMock(array(
|
||||
'baseUri' => 'http://example.org/foo/bar/',
|
||||
'userName' => 'user',
|
||||
'password' => 'password',
|
||||
'authType' => Sabre_DAV_Client::AUTH_BASIC,
|
||||
));
|
||||
|
||||
$responseBlob = array(
|
||||
"HTTP/1.1 200 OK",
|
||||
"Content-Type: text/plain",
|
||||
"",
|
||||
"Hello there!"
|
||||
);
|
||||
|
||||
$client->response = array(
|
||||
implode("\r\n", $responseBlob),
|
||||
array(
|
||||
'header_size' => 45,
|
||||
'http_code' => 200,
|
||||
),
|
||||
0,
|
||||
""
|
||||
);
|
||||
|
||||
$result = $client->request('POST', 'baz', 'sillybody', array('Content-Type' => 'text/plain'));
|
||||
|
||||
$this->assertEquals('http://example.org/foo/bar/baz', $client->url);
|
||||
$this->assertEquals(array(
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_FOLLOWLOCATION => true,
|
||||
CURLOPT_MAXREDIRS => 5,
|
||||
CURLOPT_CUSTOMREQUEST => 'POST',
|
||||
CURLOPT_POSTFIELDS => 'sillybody',
|
||||
CURLOPT_HEADER => true,
|
||||
CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
|
||||
CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
|
||||
CURLOPT_USERPWD => 'user:password'
|
||||
), $client->curlSettings);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'statusCode' => 200,
|
||||
'headers' => array(
|
||||
'content-type' => 'text/plain',
|
||||
),
|
||||
'body' => 'Hello there!'
|
||||
), $result);
|
||||
|
||||
}
|
||||
|
||||
function testRequestAuthDigest() {
|
||||
|
||||
$client = new Sabre_DAV_ClientMock(array(
|
||||
'baseUri' => 'http://example.org/foo/bar/',
|
||||
'userName' => 'user',
|
||||
'password' => 'password',
|
||||
'authType' => Sabre_DAV_Client::AUTH_DIGEST,
|
||||
));
|
||||
|
||||
$responseBlob = array(
|
||||
"HTTP/1.1 200 OK",
|
||||
"Content-Type: text/plain",
|
||||
"",
|
||||
"Hello there!"
|
||||
);
|
||||
|
||||
$client->response = array(
|
||||
implode("\r\n", $responseBlob),
|
||||
array(
|
||||
'header_size' => 45,
|
||||
'http_code' => 200,
|
||||
),
|
||||
0,
|
||||
""
|
||||
);
|
||||
|
||||
$result = $client->request('POST', 'baz', 'sillybody', array('Content-Type' => 'text/plain'));
|
||||
|
||||
$this->assertEquals('http://example.org/foo/bar/baz', $client->url);
|
||||
$this->assertEquals(array(
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_FOLLOWLOCATION => true,
|
||||
CURLOPT_MAXREDIRS => 5,
|
||||
CURLOPT_CUSTOMREQUEST => 'POST',
|
||||
CURLOPT_POSTFIELDS => 'sillybody',
|
||||
CURLOPT_HEADER => true,
|
||||
CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
|
||||
CURLOPT_HTTPAUTH => CURLAUTH_DIGEST,
|
||||
CURLOPT_USERPWD => 'user:password'
|
||||
), $client->curlSettings);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'statusCode' => 200,
|
||||
'headers' => array(
|
||||
'content-type' => 'text/plain',
|
||||
),
|
||||
'body' => 'Hello there!'
|
||||
), $result);
|
||||
|
||||
}
|
||||
function testRequestError() {
|
||||
|
||||
$client = new Sabre_DAV_ClientMock(array(
|
||||
'baseUri' => 'http://example.org/foo/bar/',
|
||||
));
|
||||
|
||||
$responseBlob = array(
|
||||
"HTTP/1.1 200 OK",
|
||||
"Content-Type: text/plain",
|
||||
"",
|
||||
"Hello there!"
|
||||
);
|
||||
|
||||
$client->response = array(
|
||||
implode("\r\n", $responseBlob),
|
||||
array(
|
||||
'header_size' => 45,
|
||||
'http_code' => 200,
|
||||
),
|
||||
CURLE_COULDNT_CONNECT,
|
||||
"Could not connect, or something"
|
||||
);
|
||||
|
||||
$caught = false;
|
||||
try {
|
||||
$client->request('POST', 'baz', 'sillybody', array('Content-Type' => 'text/plain'));
|
||||
} catch (Sabre_DAV_Exception $e) {
|
||||
$caught = true;
|
||||
}
|
||||
if (!$caught) {
|
||||
$this->markTestFailed('Exception was not thrown');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function testRequestHTTPError() {
|
||||
|
||||
$client = new Sabre_DAV_ClientMock(array(
|
||||
'baseUri' => 'http://example.org/foo/bar/',
|
||||
));
|
||||
|
||||
$responseBlob = array(
|
||||
"HTTP/1.1 400 Bad Request",
|
||||
"Content-Type: text/plain",
|
||||
"",
|
||||
"Hello there!"
|
||||
);
|
||||
|
||||
$client->response = array(
|
||||
implode("\r\n", $responseBlob),
|
||||
array(
|
||||
'header_size' => 45,
|
||||
'http_code' => 400,
|
||||
),
|
||||
0,
|
||||
""
|
||||
);
|
||||
|
||||
$caught = false;
|
||||
try {
|
||||
$client->request('POST', 'baz', 'sillybody', array('Content-Type' => 'text/plain'));
|
||||
} catch (Sabre_DAV_Exception $e) {
|
||||
$caught = true;
|
||||
}
|
||||
if (!$caught) {
|
||||
$this->fail('Exception was not thrown');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function testRequestHTTP404() {
|
||||
|
||||
$client = new Sabre_DAV_ClientMock(array(
|
||||
'baseUri' => 'http://example.org/foo/bar/',
|
||||
));
|
||||
|
||||
$responseBlob = array(
|
||||
"HTTP/1.1 404 Not Found",
|
||||
"Content-Type: text/plain",
|
||||
"",
|
||||
"Hello there!"
|
||||
);
|
||||
|
||||
$client->response = array(
|
||||
implode("\r\n", $responseBlob),
|
||||
array(
|
||||
'header_size' => 45,
|
||||
'http_code' => 404,
|
||||
),
|
||||
0,
|
||||
""
|
||||
);
|
||||
|
||||
$caught = false;
|
||||
try {
|
||||
$client->request('POST', 'baz', 'sillybody', array('Content-Type' => 'text/plain'));
|
||||
} catch (Sabre_DAV_Exception_NotFound $e) {
|
||||
$caught = true;
|
||||
}
|
||||
if (!$caught) {
|
||||
$this->fail('Exception was not thrown');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider supportedHTTPCodes
|
||||
*/
|
||||
function testSpecificHTTPErrors($error) {
|
||||
|
||||
$client = new Sabre_DAV_ClientMock(array(
|
||||
'baseUri' => 'http://example.org/foo/bar/',
|
||||
));
|
||||
|
||||
$responseBlob = array(
|
||||
"HTTP/1.1 $error blabla",
|
||||
"Content-Type: text/plain",
|
||||
"",
|
||||
"Hello there!"
|
||||
);
|
||||
|
||||
$client->response = array(
|
||||
implode("\r\n", $responseBlob),
|
||||
array(
|
||||
'header_size' => 42,
|
||||
'http_code' => $error,
|
||||
),
|
||||
0,
|
||||
""
|
||||
);
|
||||
|
||||
$caught = false;
|
||||
try {
|
||||
$client->request('POST', 'baz', 'sillybody', array('Content-Type' => 'text/plain'));
|
||||
} catch (Sabre_DAV_Exception $e) {
|
||||
$caught = true;
|
||||
$this->assertEquals($e->getHTTPCode(), $error);
|
||||
}
|
||||
if (!$caught) {
|
||||
$this->fail('Exception was not thrown');
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public function supportedHTTPCodes() {
|
||||
|
||||
return array(
|
||||
array(400),
|
||||
array(401),
|
||||
array(402),
|
||||
array(403),
|
||||
array(404),
|
||||
array(405),
|
||||
array(409),
|
||||
array(412),
|
||||
array(416),
|
||||
array(500),
|
||||
array(501),
|
||||
array(507),
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function testGetAbsoluteUrl() {
|
||||
|
||||
$client = new Sabre_DAV_ClientMock(array(
|
||||
'baseUri' => 'http://example.org/foo/',
|
||||
));
|
||||
|
||||
$this->assertEquals(
|
||||
'http://example.org/foo/bar',
|
||||
$client->getAbsoluteUrl('bar')
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
'http://example.org/bar',
|
||||
$client->getAbsoluteUrl('/bar')
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
'http://example.com/bar',
|
||||
$client->getAbsoluteUrl('http://example.com/bar')
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function testOptions() {
|
||||
|
||||
$client = new Sabre_DAV_ClientMock(array(
|
||||
'baseUri' => 'http://example.org/foo/bar/',
|
||||
));
|
||||
|
||||
$responseBlob = array(
|
||||
"HTTP/1.1 200 OK",
|
||||
"DAV: feature1, feature2",
|
||||
"",
|
||||
);
|
||||
|
||||
$client->response = array(
|
||||
implode("\r\n", $responseBlob),
|
||||
array(
|
||||
'header_size' => 40,
|
||||
'http_code' => 200,
|
||||
),
|
||||
0,
|
||||
""
|
||||
);
|
||||
|
||||
$result = $client->options();
|
||||
$this->assertEquals(
|
||||
array('feature1', 'feature2'),
|
||||
$result
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function testOptionsNoDav() {
|
||||
|
||||
$client = new Sabre_DAV_ClientMock(array(
|
||||
'baseUri' => 'http://example.org/foo/bar/',
|
||||
));
|
||||
|
||||
$responseBlob = array(
|
||||
"HTTP/1.1 200 OK",
|
||||
"",
|
||||
);
|
||||
|
||||
$client->response = array(
|
||||
implode("\r\n", $responseBlob),
|
||||
array(
|
||||
'header_size' => 20,
|
||||
'http_code' => 200,
|
||||
),
|
||||
0,
|
||||
""
|
||||
);
|
||||
|
||||
$result = $client->options();
|
||||
$this->assertEquals(
|
||||
array(),
|
||||
$result
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException InvalidArgumentException
|
||||
*/
|
||||
function testPropFindNoXML() {
|
||||
|
||||
$client = new Sabre_DAV_ClientMock(array(
|
||||
'baseUri' => 'http://example.org/foo/bar/',
|
||||
));
|
||||
|
||||
$responseBlob = array(
|
||||
"HTTP/1.1 200 OK",
|
||||
"",
|
||||
);
|
||||
|
||||
$client->response = array(
|
||||
implode("\r\n", $responseBlob),
|
||||
array(
|
||||
'header_size' => 20,
|
||||
'http_code' => 200,
|
||||
),
|
||||
0,
|
||||
""
|
||||
);
|
||||
|
||||
$client->propfind('', array('{DAV:}foo','{DAV:}bar'));
|
||||
|
||||
}
|
||||
|
||||
function testPropFind() {
|
||||
|
||||
$client = new Sabre_DAV_ClientMock(array(
|
||||
'baseUri' => 'http://example.org/foo/bar/',
|
||||
));
|
||||
|
||||
$responseBlob = array(
|
||||
"HTTP/1.1 200 OK",
|
||||
"",
|
||||
"<?xml version=\"1.0\"?>",
|
||||
"<d:multistatus xmlns:d=\"DAV:\">",
|
||||
" <d:response>",
|
||||
" <d:href>/foo/bar/</d:href>",
|
||||
" <d:propstat>",
|
||||
" <d:prop>",
|
||||
" <d:foo>hello</d:foo>",
|
||||
" </d:prop>",
|
||||
" <d:status>HTTP/1.1 200 OK</d:status>",
|
||||
" </d:propstat>",
|
||||
" <d:propstat>",
|
||||
" <d:prop>",
|
||||
" <d:bar />",
|
||||
" </d:prop>",
|
||||
" <d:status>HTTP/1.1 404 Not Found</d:status>",
|
||||
" </d:propstat>",
|
||||
" </d:response>",
|
||||
"</d:multistatus>",
|
||||
);
|
||||
|
||||
$client->response = array(
|
||||
implode("\r\n", $responseBlob),
|
||||
array(
|
||||
'header_size' => 19,
|
||||
'http_code' => 200,
|
||||
),
|
||||
0,
|
||||
""
|
||||
);
|
||||
|
||||
$result = $client->propfind('', array('{DAV:}foo','{DAV:}bar'));
|
||||
|
||||
$this->assertEquals(array(
|
||||
'{DAV:}foo' => 'hello',
|
||||
), $result);
|
||||
|
||||
$requestBody = array(
|
||||
'<?xml version="1.0"?>',
|
||||
'<d:propfind xmlns:d="DAV:">',
|
||||
' <d:prop>',
|
||||
' <d:foo />',
|
||||
' <d:bar />',
|
||||
' </d:prop>',
|
||||
'</d:propfind>'
|
||||
);
|
||||
$requestBody = implode("\n", $requestBody);
|
||||
|
||||
$this->assertEquals($requestBody, $client->curlSettings[CURLOPT_POSTFIELDS]);
|
||||
|
||||
}
|
||||
|
||||
function testPropFindDepth1CustomProp() {
|
||||
|
||||
$client = new Sabre_DAV_ClientMock(array(
|
||||
'baseUri' => 'http://example.org/foo/bar/',
|
||||
));
|
||||
|
||||
$responseBlob = array(
|
||||
"HTTP/1.1 200 OK",
|
||||
"",
|
||||
"<?xml version=\"1.0\"?>",
|
||||
"<d:multistatus xmlns:d=\"DAV:\" xmlns:x=\"urn:custom\">",
|
||||
" <d:response>",
|
||||
" <d:href>/foo/bar/</d:href>",
|
||||
" <d:propstat>",
|
||||
" <d:prop>",
|
||||
" <d:foo>hello</d:foo>",
|
||||
" <x:bar>world</x:bar>",
|
||||
" </d:prop>",
|
||||
" <d:status>HTTP/1.1 200 OK</d:status>",
|
||||
" </d:propstat>",
|
||||
" </d:response>",
|
||||
"</d:multistatus>",
|
||||
);
|
||||
|
||||
$client->response = array(
|
||||
implode("\r\n", $responseBlob),
|
||||
array(
|
||||
'header_size' => 19,
|
||||
'http_code' => 200,
|
||||
),
|
||||
0,
|
||||
""
|
||||
);
|
||||
|
||||
$result = $client->propfind('', array('{DAV:}foo','{urn:custom}bar'),1);
|
||||
|
||||
$this->assertEquals(array(
|
||||
"/foo/bar/" => array(
|
||||
'{DAV:}foo' => 'hello',
|
||||
'{urn:custom}bar' => 'world',
|
||||
),
|
||||
), $result);
|
||||
|
||||
$requestBody = array(
|
||||
'<?xml version="1.0"?>',
|
||||
'<d:propfind xmlns:d="DAV:">',
|
||||
' <d:prop>',
|
||||
' <d:foo />',
|
||||
' <x:bar xmlns:x="urn:custom"/>',
|
||||
' </d:prop>',
|
||||
'</d:propfind>'
|
||||
);
|
||||
$requestBody = implode("\n", $requestBody);
|
||||
|
||||
$this->assertEquals($requestBody, $client->curlSettings[CURLOPT_POSTFIELDS]);
|
||||
|
||||
}
|
||||
|
||||
function testPropPatch() {
|
||||
|
||||
$client = new Sabre_DAV_ClientMock(array(
|
||||
'baseUri' => 'http://example.org/foo/bar/',
|
||||
));
|
||||
|
||||
$responseBlob = array(
|
||||
"HTTP/1.1 200 OK",
|
||||
"",
|
||||
);
|
||||
|
||||
$client->response = array(
|
||||
implode("\r\n", $responseBlob),
|
||||
array(
|
||||
'header_size' => 20,
|
||||
'http_code' => 200,
|
||||
),
|
||||
0,
|
||||
""
|
||||
);
|
||||
|
||||
$client->proppatch('', array(
|
||||
'{DAV:}foo' => 'newvalue',
|
||||
'{urn:custom}foo' => 'newvalue2',
|
||||
'{DAV:}bar' => null,
|
||||
'{urn:custom}bar' => null,
|
||||
));
|
||||
|
||||
$requestBody = array(
|
||||
'<?xml version="1.0"?>',
|
||||
'<d:propertyupdate xmlns:d="DAV:">',
|
||||
'<d:set><d:prop>',
|
||||
' <d:foo>newvalue</d:foo>',
|
||||
'</d:prop></d:set>',
|
||||
'<d:set><d:prop>',
|
||||
' <x:foo xmlns:x="urn:custom">newvalue2</x:foo>',
|
||||
'</d:prop></d:set>',
|
||||
'<d:remove><d:prop>',
|
||||
' <d:bar />',
|
||||
'</d:prop></d:remove>',
|
||||
'<d:remove><d:prop>',
|
||||
' <x:bar xmlns:x="urn:custom"/>',
|
||||
'</d:prop></d:remove>',
|
||||
'</d:propertyupdate>'
|
||||
);
|
||||
$requestBody = implode("\n", $requestBody);
|
||||
|
||||
$this->assertEquals($requestBody, $client->curlSettings[CURLOPT_POSTFIELDS]);
|
||||
|
||||
}
|
||||
|
||||
function testHEADRequest() {
|
||||
|
||||
$client = new Sabre_DAV_ClientMock(array(
|
||||
'baseUri' => 'http://example.org/foo/bar/',
|
||||
));
|
||||
|
||||
$responseBlob = array(
|
||||
"HTTP/1.1 200 OK",
|
||||
"Content-Type: text/plain",
|
||||
"",
|
||||
"Hello there!"
|
||||
);
|
||||
|
||||
$client->response = array(
|
||||
implode("\r\n", $responseBlob),
|
||||
array(
|
||||
'header_size' => 45,
|
||||
'http_code' => 200,
|
||||
),
|
||||
0,
|
||||
""
|
||||
);
|
||||
|
||||
$result = $client->request('HEAD', 'baz');
|
||||
|
||||
$this->assertEquals('http://example.org/foo/bar/baz', $client->url);
|
||||
$this->assertEquals(array(
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_FOLLOWLOCATION => true,
|
||||
CURLOPT_MAXREDIRS => 5,
|
||||
CURLOPT_CUSTOMREQUEST => 'HEAD',
|
||||
CURLOPT_NOBODY => true,
|
||||
CURLOPT_HEADER => true,
|
||||
CURLOPT_HTTPHEADER => array(),
|
||||
CURLOPT_POSTFIELDS => null,
|
||||
), $client->curlSettings);
|
||||
|
||||
}
|
||||
|
||||
function testPUTRequest() {
|
||||
|
||||
$client = new Sabre_DAV_ClientMock(array(
|
||||
'baseUri' => 'http://example.org/foo/bar/',
|
||||
));
|
||||
|
||||
$responseBlob = array(
|
||||
"HTTP/1.1 200 OK",
|
||||
"Content-Type: text/plain",
|
||||
"",
|
||||
"Hello there!"
|
||||
);
|
||||
|
||||
$client->response = array(
|
||||
implode("\r\n", $responseBlob),
|
||||
array(
|
||||
'header_size' => 45,
|
||||
'http_code' => 200,
|
||||
),
|
||||
0,
|
||||
""
|
||||
);
|
||||
|
||||
$result = $client->request('PUT', 'bar','newcontent');
|
||||
|
||||
$this->assertEquals('http://example.org/foo/bar/bar', $client->url);
|
||||
$this->assertEquals(array(
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_FOLLOWLOCATION => true,
|
||||
CURLOPT_MAXREDIRS => 5,
|
||||
CURLOPT_CUSTOMREQUEST => "PUT",
|
||||
CURLOPT_POSTFIELDS => 'newcontent',
|
||||
CURLOPT_HEADER => true,
|
||||
CURLOPT_HTTPHEADER => array(),
|
||||
), $client->curlSettings);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAV_Exception_PaymentRequiredTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testGetHTTPCode() {
|
||||
|
||||
$ex = new Sabre_DAV_Exception_PaymentRequired();
|
||||
$this->assertEquals(402, $ex->getHTTPCode());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
28
dav/SabreDAV/tests/Sabre/DAV/ExceptionTest.php
Normal file
28
dav/SabreDAV/tests/Sabre/DAV/ExceptionTest.php
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAV_ExceptionTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testStatus() {
|
||||
|
||||
$e = new Sabre_DAV_Exception();
|
||||
$this->assertEquals(500,$e->getHTTPCode());
|
||||
|
||||
}
|
||||
|
||||
function testExceptionStatuses() {
|
||||
|
||||
$c = array(
|
||||
'Sabre_DAV_Exception_NotAuthenticated' => 401,
|
||||
'Sabre_DAV_Exception_InsufficientStorage' => 507,
|
||||
);
|
||||
|
||||
foreach($c as $class=>$status) {
|
||||
|
||||
$obj = new $class();
|
||||
$this->assertEquals($status, $obj->getHTTPCode());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
76
dav/SabreDAV/tests/Sabre/DAV/FSExt/FileTest.php
Normal file
76
dav/SabreDAV/tests/Sabre/DAV/FSExt/FileTest.php
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/TestUtil.php';
|
||||
|
||||
class Sabre_DAV_FSExt_FileTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function setUp() {
|
||||
|
||||
file_put_contents(SABRE_TEMPDIR . '/file.txt', 'Contents');
|
||||
|
||||
}
|
||||
|
||||
function tearDown() {
|
||||
|
||||
Sabre_TestUtil::clearTempDir();
|
||||
|
||||
}
|
||||
|
||||
function testPut() {
|
||||
|
||||
$file = new Sabre_DAV_FSExt_File(SABRE_TEMPDIR . '/file.txt');
|
||||
$result = $file->put('New contents');
|
||||
|
||||
$this->assertEquals('New contents',file_get_contents(SABRE_TEMPDIR . '/file.txt'));
|
||||
$this->assertEquals('"' . md5('New contents') . '"', $result);
|
||||
|
||||
}
|
||||
|
||||
function testRange() {
|
||||
|
||||
$file = new Sabre_DAV_FSExt_File(SABRE_TEMPDIR . '/file.txt');
|
||||
$file->put('0000000');
|
||||
$file->putRange('111',3);
|
||||
|
||||
$this->assertEquals('0011100',file_get_contents(SABRE_TEMPDIR . '/file.txt'));
|
||||
|
||||
}
|
||||
|
||||
function testGet() {
|
||||
|
||||
$file = new Sabre_DAV_FSExt_File(SABRE_TEMPDIR . '/file.txt');
|
||||
$this->assertEquals('Contents',stream_get_contents($file->get()));
|
||||
|
||||
}
|
||||
|
||||
function testDelete() {
|
||||
|
||||
$file = new Sabre_DAV_FSExt_File(SABRE_TEMPDIR . '/file.txt');
|
||||
$file->delete();
|
||||
|
||||
$this->assertFalse(file_exists(SABRE_TEMPDIR . '/file.txt'));
|
||||
|
||||
}
|
||||
|
||||
function testGetETag() {
|
||||
|
||||
$file = new Sabre_DAV_FSExt_File(SABRE_TEMPDIR . '/file.txt');
|
||||
$this->assertEquals('"' . md5('Contents') . '"',$file->getETag());
|
||||
|
||||
}
|
||||
|
||||
function testGetContentType() {
|
||||
|
||||
$file = new Sabre_DAV_FSExt_File(SABRE_TEMPDIR . '/file.txt');
|
||||
$this->assertNull($file->getContentType());
|
||||
|
||||
}
|
||||
|
||||
function testGetSize() {
|
||||
|
||||
$file = new Sabre_DAV_FSExt_File(SABRE_TEMPDIR . '/file.txt');
|
||||
$this->assertEquals(8,$file->getSize());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
175
dav/SabreDAV/tests/Sabre/DAV/FSExt/NodeTest.php
Normal file
175
dav/SabreDAV/tests/Sabre/DAV/FSExt/NodeTest.php
Normal file
|
|
@ -0,0 +1,175 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/TestUtil.php';
|
||||
|
||||
class Sabre_DAV_FSExt_NodeTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function setUp() {
|
||||
|
||||
mkdir(SABRE_TEMPDIR . '/dir');
|
||||
file_put_contents(SABRE_TEMPDIR . '/dir/file.txt', 'Contents');
|
||||
file_put_contents(SABRE_TEMPDIR . '/dir/file2.txt', 'Contents2');
|
||||
|
||||
}
|
||||
|
||||
function tearDown() {
|
||||
|
||||
Sabre_TestUtil::clearTempDir();
|
||||
|
||||
}
|
||||
|
||||
function testUpdateProperties() {
|
||||
|
||||
$file = new Sabre_DAV_FSExt_File(SABRE_TEMPDIR . '/dir/file.txt');
|
||||
$properties = array(
|
||||
'{http://sabredav.org/NS/2010}test1' => 'foo',
|
||||
'{http://sabredav.org/NS/2010}test2' => 'bar',
|
||||
);
|
||||
|
||||
$result = $file->updateProperties($properties);
|
||||
$expected = true;
|
||||
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$getProperties = $file->getProperties(array_keys($properties));
|
||||
|
||||
$this->assertEquals($properties, $getProperties);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testUpdateProperties
|
||||
*/
|
||||
function testUpdatePropertiesAgain() {
|
||||
|
||||
$file = new Sabre_DAV_FSExt_File(SABRE_TEMPDIR . '/dir/file.txt');
|
||||
$mutations = array(
|
||||
'{http://sabredav.org/NS/2010}test1' => 'foo',
|
||||
'{http://sabredav.org/NS/2010}test2' => 'bar',
|
||||
);
|
||||
|
||||
$result = $file->updateProperties($mutations);
|
||||
|
||||
$this->assertEquals(true, $result);
|
||||
|
||||
$mutations = array(
|
||||
'{http://sabredav.org/NS/2010}test1' => 'foo',
|
||||
'{http://sabredav.org/NS/2010}test3' => 'baz',
|
||||
);
|
||||
|
||||
$result = $file->updateProperties($mutations);
|
||||
|
||||
$this->assertEquals(true, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testUpdateProperties
|
||||
*/
|
||||
function testUpdatePropertiesDelete() {
|
||||
|
||||
$file = new Sabre_DAV_FSExt_File(SABRE_TEMPDIR . '/dir/file.txt');
|
||||
|
||||
$mutations = array(
|
||||
'{http://sabredav.org/NS/2010}test1' => 'foo',
|
||||
'{http://sabredav.org/NS/2010}test2' => 'bar',
|
||||
);
|
||||
|
||||
$result = $file->updateProperties($mutations);
|
||||
|
||||
$this->assertEquals(true, $result);
|
||||
|
||||
$mutations = array(
|
||||
'{http://sabredav.org/NS/2010}test1' => null,
|
||||
'{http://sabredav.org/NS/2010}test3' => null
|
||||
);
|
||||
|
||||
$result = $file->updateProperties($mutations);
|
||||
|
||||
$this->assertEquals(true, $result);
|
||||
|
||||
$properties = $file->getProperties(array('http://sabredav.org/NS/2010}test1','{http://sabredav.org/NS/2010}test2','{http://sabredav.org/NS/2010}test3'));
|
||||
|
||||
$this->assertEquals(array(
|
||||
'{http://sabredav.org/NS/2010}test2' => 'bar',
|
||||
), $properties);
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testUpdateProperties
|
||||
*/
|
||||
function testUpdatePropertiesMove() {
|
||||
|
||||
$file = new Sabre_DAV_FSExt_File(SABRE_TEMPDIR . '/dir/file.txt');
|
||||
|
||||
$mutations = array(
|
||||
'{http://sabredav.org/NS/2010}test1' => 'foo',
|
||||
'{http://sabredav.org/NS/2010}test2' => 'bar',
|
||||
);
|
||||
|
||||
$result = $file->updateProperties($mutations);
|
||||
|
||||
$this->assertEquals(true, $result);
|
||||
|
||||
$properties = $file->getProperties(array('{http://sabredav.org/NS/2010}test1','{http://sabredav.org/NS/2010}test2','{http://sabredav.org/NS/2010}test3'));
|
||||
|
||||
$this->assertEquals(array(
|
||||
'{http://sabredav.org/NS/2010}test1' => 'foo',
|
||||
'{http://sabredav.org/NS/2010}test2' => 'bar',
|
||||
), $properties);
|
||||
|
||||
// Renaming
|
||||
$file->setName('file3.txt');
|
||||
|
||||
$this->assertFalse(file_exists(SABRE_TEMPDIR . '/dir/file.txt'));
|
||||
$this->assertTrue(file_exists(SABRE_TEMPDIR . '/dir/file3.txt'));
|
||||
$this->assertEquals('file3.txt',$file->getName());
|
||||
|
||||
$newFile = new Sabre_DAV_FSExt_File(SABRE_TEMPDIR . '/dir/file3.txt');
|
||||
$this->assertEquals('file3.txt',$newFile->getName());
|
||||
|
||||
$properties = $newFile->getProperties(array('{http://sabredav.org/NS/2010}test1','{http://sabredav.org/NS/2010}test2','{http://sabredav.org/NS/2010}test3'));
|
||||
|
||||
$this->assertEquals(array(
|
||||
'{http://sabredav.org/NS/2010}test1' => 'foo',
|
||||
'{http://sabredav.org/NS/2010}test2' => 'bar',
|
||||
), $properties);
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testUpdatePropertiesMove
|
||||
*/
|
||||
function testUpdatePropertiesDeleteBleed() {
|
||||
|
||||
$file = new Sabre_DAV_FSExt_File(SABRE_TEMPDIR . '/dir/file.txt');
|
||||
$mutations = array(
|
||||
'{http://sabredav.org/NS/2010}test1' => 'foo',
|
||||
'{http://sabredav.org/NS/2010}test2' => 'bar',
|
||||
);
|
||||
|
||||
$result = $file->updateProperties($mutations);
|
||||
|
||||
$this->assertEquals(true, $result);
|
||||
|
||||
$properties = $file->getProperties(array('{http://sabredav.org/NS/2010}test1','{http://sabredav.org/NS/2010}test2','{http://sabredav.org/NS/2010}test3'));
|
||||
|
||||
$this->assertEquals(array(
|
||||
'{http://sabredav.org/NS/2010}test1' => 'foo',
|
||||
'{http://sabredav.org/NS/2010}test2' => 'bar',
|
||||
), $properties);
|
||||
|
||||
// Deleting
|
||||
$file->delete();
|
||||
|
||||
$this->assertFalse(file_exists(SABRE_TEMPDIR . '/dir/file.txt'));
|
||||
|
||||
// Creating it again
|
||||
file_put_contents(SABRE_TEMPDIR . '/dir/file.txt','New Contents');
|
||||
$file = new Sabre_DAV_FSExt_File(SABRE_TEMPDIR . '/dir/file.txt');
|
||||
|
||||
$properties = $file->getProperties(array('http://sabredav.org/NS/2010}test1','{http://sabredav.org/NS/2010}test2','{http://sabredav.org/NS/2010}test3'));
|
||||
|
||||
$this->assertEquals(array(), $properties);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
219
dav/SabreDAV/tests/Sabre/DAV/FSExt/ServerTest.php
Normal file
219
dav/SabreDAV/tests/Sabre/DAV/FSExt/ServerTest.php
Normal file
|
|
@ -0,0 +1,219 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/DAV/AbstractServer.php';
|
||||
|
||||
class Sabre_DAV_FSExt_ServerTest extends Sabre_DAV_AbstractServer{
|
||||
|
||||
protected function getRootNode() {
|
||||
|
||||
return new Sabre_DAV_FSExt_Directory($this->tempDir);
|
||||
|
||||
}
|
||||
|
||||
function testGet() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/octet-stream',
|
||||
'Content-Length' => 13,
|
||||
'Last-Modified' => Sabre_HTTP_Util::toHTTPDate(new DateTime('@' . filemtime($this->tempDir . '/test.txt'))),
|
||||
'ETag' => '"' .md5_file($this->tempDir . '/test.txt') . '"',
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status);
|
||||
$this->assertEquals('Test contents', stream_get_contents($this->response->body));
|
||||
|
||||
}
|
||||
|
||||
function testHEAD() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'HEAD',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/octet-stream',
|
||||
'Content-Length' => 13,
|
||||
'Last-Modified' => Sabre_HTTP_Util::toHTTPDate(new DateTime('@' . filemtime($this->tempDir . '/test.txt'))),
|
||||
'ETag' => '"' . md5_file($this->tempDir . '/test.txt') . '"',
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status);
|
||||
$this->assertEquals('', $this->response->body);
|
||||
|
||||
}
|
||||
|
||||
function testPut() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/testput.txt',
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('Testing new file');
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Length' => 0,
|
||||
'ETag' => '"' . md5('Testing new file') . '"',
|
||||
), $this->response->headers);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
|
||||
$this->assertEquals('', $this->response->body);
|
||||
$this->assertEquals('Testing new file',file_get_contents($this->tempDir . '/testput.txt'));
|
||||
|
||||
}
|
||||
|
||||
function testPutAlreadyExists() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'HTTP_IF_NONE_MATCH' => '*',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('Testing new file');
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 412 Precondition failed',$this->response->status);
|
||||
$this->assertNotEquals('Testing new file',file_get_contents($this->tempDir . '/test.txt'));
|
||||
|
||||
}
|
||||
|
||||
function testMkcol() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/testcol',
|
||||
'REQUEST_METHOD' => 'MKCOL',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody("");
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Length' => '0',
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
|
||||
$this->assertEquals('', $this->response->body);
|
||||
$this->assertTrue(is_dir($this->tempDir . '/testcol'));
|
||||
|
||||
}
|
||||
|
||||
function testPutUpdate() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('Testing updated file');
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('0', $this->response->headers['Content-Length']);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 204 No Content',$this->response->status);
|
||||
$this->assertEquals('', $this->response->body);
|
||||
$this->assertEquals('Testing updated file',file_get_contents($this->tempDir . '/test.txt'));
|
||||
|
||||
}
|
||||
|
||||
function testDelete() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'DELETE',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Length' => '0',
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 204 No Content',$this->response->status);
|
||||
$this->assertEquals('', $this->response->body);
|
||||
$this->assertFalse(file_exists($this->tempDir . '/test.txt'));
|
||||
|
||||
}
|
||||
|
||||
function testDeleteDirectory() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/testcol',
|
||||
'REQUEST_METHOD' => 'DELETE',
|
||||
);
|
||||
|
||||
mkdir($this->tempDir.'/testcol');
|
||||
file_put_contents($this->tempDir.'/testcol/test.txt','Hi! I\'m a file with a short lifespan');
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Length' => '0',
|
||||
),$this->response->headers);
|
||||
$this->assertEquals('HTTP/1.1 204 No Content',$this->response->status);
|
||||
$this->assertEquals('', $this->response->body);
|
||||
$this->assertFalse(file_exists($this->tempDir . '/col'));
|
||||
|
||||
}
|
||||
|
||||
function testOptions() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/',
|
||||
'REQUEST_METHOD' => 'OPTIONS',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'DAV' => '1, 3, extended-mkcol',
|
||||
'MS-Author-Via' => 'DAV',
|
||||
'Allow' => 'OPTIONS, GET, HEAD, DELETE, PROPFIND, PUT, PROPPATCH, COPY, MOVE, REPORT',
|
||||
'Accept-Ranges' => 'bytes',
|
||||
'Content-Length' => '0',
|
||||
'X-Sabre-Version'=> Sabre_DAV_Version::VERSION,
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status);
|
||||
$this->assertEquals('', $this->response->body);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
102
dav/SabreDAV/tests/Sabre/DAV/Issue33Test.php
Normal file
102
dav/SabreDAV/tests/Sabre/DAV/Issue33Test.php
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/TestUtil.php';
|
||||
|
||||
class Sabre_DAV_Issue33Test extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function setUp() {
|
||||
|
||||
Sabre_TestUtil::clearTempDir();
|
||||
|
||||
}
|
||||
|
||||
function testCopyMoveInfo() {
|
||||
|
||||
$foo = new Sabre_DAV_SimpleCollection('foo');
|
||||
$root = new Sabre_DAV_SimpleCollection('webdav',array($foo));
|
||||
|
||||
$tree = new Sabre_DAV_ObjectTree($root);
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->setBaseUri('/webdav/');
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/webdav/foo',
|
||||
'HTTP_DESTINATION' => 'http://dev2.tribalos.com/webdav/%C3%A0fo%C3%B3',
|
||||
'HTTP_OVERWRITE' => 'F',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
|
||||
$server->httpRequest = $request;
|
||||
|
||||
$info = $server->getCopyAndMoveInfo();
|
||||
|
||||
$this->assertEquals('%C3%A0fo%C3%B3', urlencode($info['destination']));
|
||||
$this->assertFalse($info['destinationExists']);
|
||||
$this->assertFalse($info['destinationNode']);
|
||||
|
||||
}
|
||||
|
||||
function testTreeMove() {
|
||||
|
||||
mkdir(SABRE_TEMPDIR . '/issue33');
|
||||
$dir = new Sabre_DAV_FS_Directory(SABRE_TEMPDIR . '/issue33');
|
||||
|
||||
$dir->createDirectory('foo');
|
||||
|
||||
$tree = new Sabre_DAV_ObjectTree($dir);
|
||||
$tree->move('foo',urldecode('%C3%A0fo%C3%B3'));
|
||||
|
||||
$node = $tree->getNodeForPath(urldecode('%C3%A0fo%C3%B3'));
|
||||
$this->assertEquals(urldecode('%C3%A0fo%C3%B3'),$node->getName());
|
||||
|
||||
}
|
||||
|
||||
function testDirName() {
|
||||
|
||||
$dirname1 = 'foo';
|
||||
$dirname2 = urlencode('%C3%A0fo%C3%B3');;
|
||||
|
||||
$this->assertTrue(dirname($dirname1)==dirname($dirname2));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testTreeMove
|
||||
* @depends testCopyMoveInfo
|
||||
*/
|
||||
function testEverything() {
|
||||
|
||||
// Request object
|
||||
$serverVars = array(
|
||||
'REQUEST_METHOD' => 'MOVE',
|
||||
'REQUEST_URI' => '/webdav/foo',
|
||||
'HTTP_DESTINATION' => 'http://dev2.tribalos.com/webdav/%C3%A0fo%C3%B3',
|
||||
'HTTP_OVERWRITE' => 'F',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('');
|
||||
|
||||
$response = new Sabre_HTTP_ResponseMock();
|
||||
|
||||
// Server setup
|
||||
mkdir(SABRE_TEMPDIR . '/issue33');
|
||||
$dir = new Sabre_DAV_FS_Directory(SABRE_TEMPDIR . '/issue33');
|
||||
|
||||
$dir->createDirectory('foo');
|
||||
|
||||
$tree = new Sabre_DAV_ObjectTree($dir);
|
||||
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->setBaseUri('/webdav/');
|
||||
|
||||
$server->httpRequest = $request;
|
||||
$server->httpResponse = $response;
|
||||
$server->exec();
|
||||
|
||||
$this->assertTrue(file_exists(SABRE_TEMPDIR . '/issue33/' . urldecode('%C3%A0fo%C3%B3')));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
192
dav/SabreDAV/tests/Sabre/DAV/Locks/Backend/AbstractTest.php
Normal file
192
dav/SabreDAV/tests/Sabre/DAV/Locks/Backend/AbstractTest.php
Normal file
|
|
@ -0,0 +1,192 @@
|
|||
<?php
|
||||
|
||||
abstract class Sabre_DAV_Locks_Backend_AbstractTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @abstract
|
||||
* @return Sabre_DAV_Locks_Backend_Abstract
|
||||
*/
|
||||
abstract function getBackend();
|
||||
|
||||
function testSetup() {
|
||||
|
||||
$backend = $this->getBackend();
|
||||
$this->assertInstanceOf('Sabre_DAV_Locks_Backend_Abstract', $backend);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSetup
|
||||
*/
|
||||
function testGetLocks() {
|
||||
|
||||
$backend = $this->getBackend();
|
||||
|
||||
$lock = new Sabre_DAV_Locks_LockInfo();
|
||||
$lock->owner = 'Sinterklaas';
|
||||
$lock->timeout = 60;
|
||||
$lock->created = time();
|
||||
$lock->token = 'MY-UNIQUE-TOKEN';
|
||||
$lock->uri ='someuri';
|
||||
|
||||
$this->assertTrue($backend->lock('someuri', $lock));
|
||||
|
||||
$locks = $backend->getLocks('someuri', false);
|
||||
|
||||
$this->assertEquals(1,count($locks));
|
||||
$this->assertEquals('Sinterklaas',$locks[0]->owner);
|
||||
$this->assertEquals('someuri',$locks[0]->uri);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testGetLocks
|
||||
*/
|
||||
function testGetLocksParent() {
|
||||
|
||||
$backend = $this->getBackend();
|
||||
|
||||
$lock = new Sabre_DAV_Locks_LockInfo();
|
||||
$lock->owner = 'Sinterklaas';
|
||||
$lock->timeout = 60;
|
||||
$lock->created = time();
|
||||
$lock->depth = Sabre_DAV_Server::DEPTH_INFINITY;
|
||||
$lock->token = 'MY-UNIQUE-TOKEN';
|
||||
|
||||
$this->assertTrue($backend->lock('someuri', $lock));
|
||||
|
||||
$locks = $backend->getLocks('someuri/child', false);
|
||||
|
||||
$this->assertEquals(1,count($locks));
|
||||
$this->assertEquals('Sinterklaas',$locks[0]->owner);
|
||||
$this->assertEquals('someuri',$locks[0]->uri);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @depends testGetLocks
|
||||
*/
|
||||
function testGetLocksParentDepth0() {
|
||||
|
||||
$backend = $this->getBackend();
|
||||
|
||||
$lock = new Sabre_DAV_Locks_LockInfo();
|
||||
$lock->owner = 'Sinterklaas';
|
||||
$lock->timeout = 60;
|
||||
$lock->created = time();
|
||||
$lock->depth = 0;
|
||||
$lock->token = 'MY-UNIQUE-TOKEN';
|
||||
|
||||
$this->assertTrue($backend->lock('someuri', $lock));
|
||||
|
||||
$locks = $backend->getLocks('someuri/child', false);
|
||||
|
||||
$this->assertEquals(0,count($locks));
|
||||
|
||||
}
|
||||
|
||||
function testGetLocksChildren() {
|
||||
|
||||
$backend = $this->getBackend();
|
||||
|
||||
$lock = new Sabre_DAV_Locks_LockInfo();
|
||||
$lock->owner = 'Sinterklaas';
|
||||
$lock->timeout = 60;
|
||||
$lock->created = time();
|
||||
$lock->depth = 0;
|
||||
$lock->token = 'MY-UNIQUE-TOKEN';
|
||||
|
||||
$this->assertTrue($backend->lock('someuri/child', $lock));
|
||||
|
||||
$locks = $backend->getLocks('someuri/child', false);
|
||||
$this->assertEquals(1,count($locks));
|
||||
|
||||
$locks = $backend->getLocks('someuri', false);
|
||||
$this->assertEquals(0,count($locks));
|
||||
|
||||
$locks = $backend->getLocks('someuri', true);
|
||||
$this->assertEquals(1,count($locks));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testGetLocks
|
||||
*/
|
||||
function testLockRefresh() {
|
||||
|
||||
$backend = $this->getBackend();
|
||||
|
||||
$lock = new Sabre_DAV_Locks_LockInfo();
|
||||
$lock->owner = 'Sinterklaas';
|
||||
$lock->timeout = 60;
|
||||
$lock->created = time();
|
||||
$lock->token = 'MY-UNIQUE-TOKEN';
|
||||
|
||||
$this->assertTrue($backend->lock('someuri', $lock));
|
||||
/* Second time */
|
||||
|
||||
$lock->owner = 'Santa Clause';
|
||||
$this->assertTrue($backend->lock('someuri', $lock));
|
||||
|
||||
$locks = $backend->getLocks('someuri', false);
|
||||
|
||||
$this->assertEquals(1,count($locks));
|
||||
|
||||
$this->assertEquals('Santa Clause',$locks[0]->owner);
|
||||
$this->assertEquals('someuri',$locks[0]->uri);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testGetLocks
|
||||
*/
|
||||
function testUnlock() {
|
||||
|
||||
$backend = $this->getBackend();
|
||||
|
||||
$lock = new Sabre_DAV_Locks_LockInfo();
|
||||
$lock->owner = 'Sinterklaas';
|
||||
$lock->timeout = 60;
|
||||
$lock->created = time();
|
||||
$lock->token = 'MY-UNIQUE-TOKEN';
|
||||
|
||||
$this->assertTrue($backend->lock('someuri', $lock));
|
||||
|
||||
$locks = $backend->getLocks('someuri', false);
|
||||
$this->assertEquals(1,count($locks));
|
||||
|
||||
$this->assertTrue($backend->unlock('someuri',$lock));
|
||||
|
||||
$locks = $backend->getLocks('someuri', false);
|
||||
$this->assertEquals(0,count($locks));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testUnlock
|
||||
*/
|
||||
function testUnlockUnknownToken() {
|
||||
|
||||
$backend = $this->getBackend();
|
||||
|
||||
$lock = new Sabre_DAV_Locks_LockInfo();
|
||||
$lock->owner = 'Sinterklaas';
|
||||
$lock->timeout = 60;
|
||||
$lock->created = time();
|
||||
$lock->token = 'MY-UNIQUE-TOKEN';
|
||||
|
||||
$this->assertTrue($backend->lock('someuri', $lock));
|
||||
|
||||
$locks = $backend->getLocks('someuri', false);
|
||||
$this->assertEquals(1,count($locks));
|
||||
|
||||
$lock->token = 'SOME-OTHER-TOKEN';
|
||||
$this->assertFalse($backend->unlock('someuri',$lock));
|
||||
|
||||
$locks = $backend->getLocks('someuri', false);
|
||||
$this->assertEquals(1,count($locks));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
29
dav/SabreDAV/tests/Sabre/DAV/Locks/Backend/FSTest.php
Normal file
29
dav/SabreDAV/tests/Sabre/DAV/Locks/Backend/FSTest.php
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/TestUtil.php';
|
||||
|
||||
class Sabre_DAV_Locks_Backend_FSTest extends Sabre_DAV_Locks_Backend_AbstractTest {
|
||||
|
||||
function getBackend() {
|
||||
|
||||
Sabre_TestUtil::clearTempDir();
|
||||
mkdir(SABRE_TEMPDIR . '/locks');
|
||||
$backend = new Sabre_DAV_Locks_Backend_FS(SABRE_TEMPDIR . '/locks/');
|
||||
return $backend;
|
||||
|
||||
}
|
||||
|
||||
function tearDown() {
|
||||
|
||||
Sabre_TestUtil::clearTempDir();
|
||||
|
||||
}
|
||||
|
||||
function testGetLocksChildren() {
|
||||
|
||||
// We're skipping this test. This doesn't work, and it will
|
||||
// never. The class is deprecated anyway.
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
22
dav/SabreDAV/tests/Sabre/DAV/Locks/Backend/FileTest.php
Normal file
22
dav/SabreDAV/tests/Sabre/DAV/Locks/Backend/FileTest.php
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/TestUtil.php';
|
||||
|
||||
class Sabre_DAV_Locks_Backend_FileTest extends Sabre_DAV_Locks_Backend_AbstractTest {
|
||||
|
||||
function getBackend() {
|
||||
|
||||
Sabre_TestUtil::clearTempDir();
|
||||
$backend = new Sabre_DAV_Locks_Backend_File(SABRE_TEMPDIR . '/lockdb');
|
||||
return $backend;
|
||||
|
||||
}
|
||||
|
||||
|
||||
function tearDown() {
|
||||
|
||||
Sabre_TestUtil::clearTempDir();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
30
dav/SabreDAV/tests/Sabre/DAV/Locks/Backend/PDOMySQLTest.php
Normal file
30
dav/SabreDAV/tests/Sabre/DAV/Locks/Backend/PDOMySQLTest.php
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/TestUtil.php';
|
||||
|
||||
class Sabre_DAV_Locks_Backend_PDOMySQLTest extends Sabre_DAV_Locks_Backend_AbstractTest {
|
||||
|
||||
function getBackend() {
|
||||
|
||||
if (!SABRE_HASMYSQL) $this->markTestSkipped('MySQL driver is not available, or it was not properly configured');
|
||||
$pdo = Sabre_TestUtil::getMySQLDB();
|
||||
if (!$pdo) $this->markTestSkipped('Could not connect to MySQL database');
|
||||
$pdo->query('DROP TABLE IF EXISTS locks;');
|
||||
$pdo->query("
|
||||
CREATE TABLE locks (
|
||||
id INTEGER UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
||||
owner VARCHAR(100),
|
||||
timeout INTEGER UNSIGNED,
|
||||
created INTEGER,
|
||||
token VARCHAR(100),
|
||||
scope TINYINT,
|
||||
depth TINYINT,
|
||||
uri text
|
||||
);");
|
||||
|
||||
$backend = new Sabre_DAV_Locks_Backend_PDO($pdo);
|
||||
return $backend;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
27
dav/SabreDAV/tests/Sabre/DAV/Locks/Backend/PDOTest.php
Normal file
27
dav/SabreDAV/tests/Sabre/DAV/Locks/Backend/PDOTest.php
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/TestUtil.php';
|
||||
require_once 'Sabre/DAV/Locks/Backend/AbstractTest.php';
|
||||
|
||||
class Sabre_DAV_Locks_Backend_PDOTest extends Sabre_DAV_Locks_Backend_AbstractTest {
|
||||
|
||||
function getBackend() {
|
||||
|
||||
if (!SABRE_HASSQLITE) $this->markTestSkipped('SQLite driver is not available');
|
||||
Sabre_TestUtil::clearTempDir();
|
||||
mkdir(SABRE_TEMPDIR . '/pdolocks');
|
||||
$pdo = new PDO('sqlite:' . SABRE_TEMPDIR . '/pdolocks/db.sqlite');
|
||||
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
|
||||
$pdo->query('CREATE TABLE locks ( id integer primary key asc, owner text, timeout text, created integer, token text, scope integer, depth integer, uri text)');
|
||||
$backend = new Sabre_DAV_Locks_Backend_PDO($pdo);
|
||||
return $backend;
|
||||
|
||||
}
|
||||
|
||||
function tearDown() {
|
||||
|
||||
Sabre_TestUtil::clearTempDir();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
370
dav/SabreDAV/tests/Sabre/DAV/Locks/GetIfConditionsTest.php
Normal file
370
dav/SabreDAV/tests/Sabre/DAV/Locks/GetIfConditionsTest.php
Normal file
|
|
@ -0,0 +1,370 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
require_once 'Sabre/DAV/AbstractServer.php';
|
||||
|
||||
class Sabre_DAV_Locks_GetIfConditionsTest extends Sabre_DAV_AbstractServer {
|
||||
|
||||
/**
|
||||
* @var Sabre_DAV_Locks_Plugin
|
||||
*/
|
||||
protected $locksPlugin;
|
||||
|
||||
function setUp() {
|
||||
|
||||
parent::setUp();
|
||||
$locksPlugin = new Sabre_DAV_Locks_Plugin();
|
||||
$this->server->addPlugin($locksPlugin);
|
||||
$this->locksPlugin = $locksPlugin;
|
||||
|
||||
}
|
||||
|
||||
function testNoConditions() {
|
||||
|
||||
$serverVars = array(
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
|
||||
$conditions = $this->locksPlugin->getIfConditions();
|
||||
$this->assertEquals(array(),$conditions);
|
||||
|
||||
}
|
||||
|
||||
function testLockToken() {
|
||||
|
||||
$serverVars = array(
|
||||
'HTTP_IF' => '(<opaquelocktoken:token1>)',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
|
||||
$conditions = $this->locksPlugin->getIfConditions();
|
||||
|
||||
$compare = array(
|
||||
|
||||
array(
|
||||
'uri' => '',
|
||||
'tokens' => array(
|
||||
array(
|
||||
1,
|
||||
'opaquelocktoken:token1',
|
||||
'',
|
||||
),
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
);
|
||||
|
||||
$this->assertEquals($compare,$conditions);
|
||||
|
||||
}
|
||||
|
||||
function testNotLockToken() {
|
||||
|
||||
$serverVars = array(
|
||||
'HTTP_IF' => '(Not <opaquelocktoken:token1>)',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
|
||||
$conditions = $this->locksPlugin->getIfConditions();
|
||||
|
||||
$compare = array(
|
||||
|
||||
array(
|
||||
'uri' => '',
|
||||
'tokens' => array(
|
||||
array(
|
||||
0,
|
||||
'opaquelocktoken:token1',
|
||||
'',
|
||||
),
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
);
|
||||
$this->assertEquals($compare,$conditions);
|
||||
|
||||
}
|
||||
|
||||
function testLockTokenUrl() {
|
||||
|
||||
$serverVars = array(
|
||||
'HTTP_IF' => '<http://www.example.com/> (<opaquelocktoken:token1>)',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
|
||||
$conditions = $this->locksPlugin->getIfConditions();
|
||||
|
||||
$compare = array(
|
||||
|
||||
array(
|
||||
'uri' => 'http://www.example.com/',
|
||||
'tokens' => array(
|
||||
array(
|
||||
1,
|
||||
'opaquelocktoken:token1',
|
||||
'',
|
||||
),
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
);
|
||||
$this->assertEquals($compare,$conditions);
|
||||
|
||||
}
|
||||
|
||||
function test2LockTokens() {
|
||||
|
||||
$serverVars = array(
|
||||
'HTTP_IF' => '(<opaquelocktoken:token1>) (Not <opaquelocktoken:token2>)',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
|
||||
$conditions = $this->locksPlugin->getIfConditions();
|
||||
|
||||
$compare = array(
|
||||
|
||||
array(
|
||||
'uri' => '',
|
||||
'tokens' => array(
|
||||
array(
|
||||
1,
|
||||
'opaquelocktoken:token1',
|
||||
'',
|
||||
),
|
||||
array(
|
||||
0,
|
||||
'opaquelocktoken:token2',
|
||||
'',
|
||||
),
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
);
|
||||
$this->assertEquals($compare,$conditions);
|
||||
|
||||
}
|
||||
|
||||
function test2UriLockTokens() {
|
||||
|
||||
$serverVars = array(
|
||||
'HTTP_IF' => '<http://www.example.org/node1> (<opaquelocktoken:token1>) <http://www.example.org/node2> (Not <opaquelocktoken:token2>)',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
|
||||
$conditions = $this->locksPlugin->getIfConditions();
|
||||
|
||||
$compare = array(
|
||||
|
||||
array(
|
||||
'uri' => 'http://www.example.org/node1',
|
||||
'tokens' => array(
|
||||
array(
|
||||
1,
|
||||
'opaquelocktoken:token1',
|
||||
'',
|
||||
),
|
||||
),
|
||||
),
|
||||
array(
|
||||
'uri' => 'http://www.example.org/node2',
|
||||
'tokens' => array(
|
||||
array(
|
||||
0,
|
||||
'opaquelocktoken:token2',
|
||||
'',
|
||||
),
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
);
|
||||
$this->assertEquals($compare,$conditions);
|
||||
|
||||
}
|
||||
|
||||
function test2UriMultiLockTokens() {
|
||||
|
||||
$serverVars = array(
|
||||
'HTTP_IF' => '<http://www.example.org/node1> (<opaquelocktoken:token1>) (<opaquelocktoken:token2>) <http://www.example.org/node2> (Not <opaquelocktoken:token3>)',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
|
||||
$conditions = $this->locksPlugin->getIfConditions();
|
||||
|
||||
$compare = array(
|
||||
|
||||
array(
|
||||
'uri' => 'http://www.example.org/node1',
|
||||
'tokens' => array(
|
||||
array(
|
||||
1,
|
||||
'opaquelocktoken:token1',
|
||||
'',
|
||||
),
|
||||
array(
|
||||
1,
|
||||
'opaquelocktoken:token2',
|
||||
'',
|
||||
),
|
||||
),
|
||||
),
|
||||
array(
|
||||
'uri' => 'http://www.example.org/node2',
|
||||
'tokens' => array(
|
||||
array(
|
||||
0,
|
||||
'opaquelocktoken:token3',
|
||||
'',
|
||||
),
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
);
|
||||
$this->assertEquals($compare,$conditions);
|
||||
|
||||
}
|
||||
|
||||
function testEtag() {
|
||||
|
||||
$serverVars = array(
|
||||
'HTTP_IF' => '([etag1])',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
|
||||
$conditions = $this->locksPlugin->getIfConditions();
|
||||
|
||||
$compare = array(
|
||||
|
||||
array(
|
||||
'uri' => '',
|
||||
'tokens' => array(
|
||||
array(
|
||||
1,
|
||||
'',
|
||||
'etag1',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
);
|
||||
$this->assertEquals($compare,$conditions);
|
||||
|
||||
}
|
||||
|
||||
function test2Etags() {
|
||||
|
||||
$serverVars = array(
|
||||
'HTTP_IF' => '<http://www.example.org/> ([etag1]) ([etag2])',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
|
||||
$conditions = $this->locksPlugin->getIfConditions();
|
||||
|
||||
$compare = array(
|
||||
|
||||
array(
|
||||
'uri' => 'http://www.example.org/',
|
||||
'tokens' => array(
|
||||
array(
|
||||
1,
|
||||
'',
|
||||
'etag1',
|
||||
),
|
||||
array(
|
||||
1,
|
||||
'',
|
||||
'etag2',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
);
|
||||
$this->assertEquals($compare,$conditions);
|
||||
|
||||
}
|
||||
|
||||
function testComplexIf() {
|
||||
|
||||
$serverVars = array(
|
||||
'HTTP_IF' => '<http://www.example.org/node1> (<opaquelocktoken:token1> [etag1]) ' .
|
||||
'(Not <opaquelocktoken:token2>) ([etag2]) <http://www.example.org/node2> ' .
|
||||
'(<opaquelocktoken:token3>) (Not <opaquelocktoken:token4>) ([etag3])',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
|
||||
$conditions = $this->locksPlugin->getIfConditions();
|
||||
|
||||
$compare = array(
|
||||
|
||||
array(
|
||||
'uri' => 'http://www.example.org/node1',
|
||||
'tokens' => array(
|
||||
array(
|
||||
1,
|
||||
'opaquelocktoken:token1',
|
||||
'etag1',
|
||||
),
|
||||
array(
|
||||
0,
|
||||
'opaquelocktoken:token2',
|
||||
'',
|
||||
),
|
||||
array(
|
||||
1,
|
||||
'',
|
||||
'etag2',
|
||||
),
|
||||
),
|
||||
),
|
||||
array(
|
||||
'uri' => 'http://www.example.org/node2',
|
||||
'tokens' => array(
|
||||
array(
|
||||
1,
|
||||
'opaquelocktoken:token3',
|
||||
'',
|
||||
),
|
||||
array(
|
||||
0,
|
||||
'opaquelocktoken:token4',
|
||||
'',
|
||||
),
|
||||
array(
|
||||
1,
|
||||
'',
|
||||
'etag3',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
);
|
||||
$this->assertEquals($compare,$conditions);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
118
dav/SabreDAV/tests/Sabre/DAV/Locks/MSWordTest.php
Normal file
118
dav/SabreDAV/tests/Sabre/DAV/Locks/MSWordTest.php
Normal file
|
|
@ -0,0 +1,118 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
require_once 'Sabre/TestUtil.php';
|
||||
|
||||
class Sabre_DAV_Locks_MSWordTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testLockEtc() {
|
||||
|
||||
mkdir(SABRE_TEMPDIR . '/mstest');
|
||||
$tree = new Sabre_DAV_FS_Directory(SABRE_TEMPDIR . '/mstest');
|
||||
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->debugExceptions = true;
|
||||
$locksBackend = new Sabre_DAV_Locks_Backend_File(SABRE_TEMPDIR . '/locksdb');
|
||||
$locksPlugin = new Sabre_DAV_Locks_Plugin($locksBackend);
|
||||
$server->addPlugin($locksPlugin);
|
||||
|
||||
$response1 = new Sabre_HTTP_ResponseMock();
|
||||
|
||||
$server->httpRequest = $this->getLockRequest();
|
||||
$server->httpResponse = $response1;
|
||||
$server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 201 Created', $server->httpResponse->status);
|
||||
$this->assertTrue(isset($server->httpResponse->headers['Lock-Token']));
|
||||
$lockToken = $server->httpResponse->headers['Lock-Token'];
|
||||
|
||||
//sleep(10);
|
||||
|
||||
$response2 = new Sabre_HTTP_ResponseMock();
|
||||
|
||||
$server->httpRequest = $this->getLockRequest2();
|
||||
$server->httpResponse = $response2;
|
||||
$server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 201 Created', $server->httpResponse->status);
|
||||
$this->assertTrue(isset($server->httpResponse->headers['Lock-Token']));
|
||||
|
||||
//sleep(10);
|
||||
|
||||
$response3 = new Sabre_HTTP_ResponseMock();
|
||||
$server->httpRequest = $this->getPutRequest($lockToken);
|
||||
$server->httpResponse = $response3;
|
||||
$server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 204 No Content', $server->httpResponse->status);
|
||||
|
||||
}
|
||||
|
||||
function tearDown() {
|
||||
|
||||
Sabre_TestUtil::clearTempDir();
|
||||
|
||||
}
|
||||
|
||||
function getLockRequest() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'LOCK',
|
||||
'HTTP_CONTENT_TYPE' => 'application/xml',
|
||||
'HTTP_TIMEOUT' => 'Second-3600',
|
||||
'REQUEST_URI' => '/Nouveau%20Microsoft%20Office%20Excel%20Worksheet.xlsx',
|
||||
));
|
||||
|
||||
$request->setBody('<D:lockinfo xmlns:D="DAV:">
|
||||
<D:lockscope>
|
||||
<D:exclusive />
|
||||
</D:lockscope>
|
||||
<D:locktype>
|
||||
<D:write />
|
||||
</D:locktype>
|
||||
<D:owner>
|
||||
<D:href>PC-Vista\User</D:href>
|
||||
</D:owner>
|
||||
</D:lockinfo>');
|
||||
|
||||
return $request;
|
||||
|
||||
}
|
||||
function getLockRequest2() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'LOCK',
|
||||
'HTTP_CONTENT_TYPE' => 'application/xml',
|
||||
'HTTP_TIMEOUT' => 'Second-3600',
|
||||
'REQUEST_URI' => '/~$Nouveau%20Microsoft%20Office%20Excel%20Worksheet.xlsx',
|
||||
));
|
||||
|
||||
$request->setBody('<D:lockinfo xmlns:D="DAV:">
|
||||
<D:lockscope>
|
||||
<D:exclusive />
|
||||
</D:lockscope>
|
||||
<D:locktype>
|
||||
<D:write />
|
||||
</D:locktype>
|
||||
<D:owner>
|
||||
<D:href>PC-Vista\User</D:href>
|
||||
</D:owner>
|
||||
</D:lockinfo>');
|
||||
|
||||
return $request;
|
||||
|
||||
}
|
||||
|
||||
function getPutRequest($lockToken) {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'REQUEST_URI' => '/Nouveau%20Microsoft%20Office%20Excel%20Worksheet.xlsx',
|
||||
'HTTP_IF' => 'If: ('.$lockToken.')',
|
||||
));
|
||||
$request->setBody('FAKE BODY');
|
||||
return $request;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
961
dav/SabreDAV/tests/Sabre/DAV/Locks/PluginTest.php
Normal file
961
dav/SabreDAV/tests/Sabre/DAV/Locks/PluginTest.php
Normal file
|
|
@ -0,0 +1,961 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/DAV/AbstractServer.php';
|
||||
|
||||
class Sabre_DAV_Locks_PluginTest extends Sabre_DAV_AbstractServer {
|
||||
|
||||
/**
|
||||
* @var Sabre_DAV_Locks_Plugin
|
||||
*/
|
||||
protected $locksPlugin;
|
||||
|
||||
function setUp() {
|
||||
|
||||
parent::setUp();
|
||||
$locksBackend = new Sabre_DAV_Locks_Backend_File(SABRE_TEMPDIR . '/locksdb');
|
||||
$locksPlugin = new Sabre_DAV_Locks_Plugin($locksBackend);
|
||||
$this->server->addPlugin($locksPlugin);
|
||||
$this->locksPlugin = $locksPlugin;
|
||||
|
||||
}
|
||||
|
||||
function testGetFeatures() {
|
||||
|
||||
$this->assertEquals(array(2),$this->locksPlugin->getFeatures());
|
||||
|
||||
}
|
||||
|
||||
function testGetHTTPMethods() {
|
||||
|
||||
$this->assertEquals(array('LOCK','UNLOCK'),$this->locksPlugin->getHTTPMethods(''));
|
||||
|
||||
}
|
||||
|
||||
function testGetHTTPMethodsNoBackend() {
|
||||
|
||||
$locksPlugin = new Sabre_DAV_Locks_Plugin();
|
||||
$this->server->addPlugin($locksPlugin);
|
||||
$this->assertEquals(array(),$locksPlugin->getHTTPMethods(''));
|
||||
|
||||
}
|
||||
|
||||
function testUnknownMethodPassthough() {
|
||||
|
||||
$this->assertNull($this->locksPlugin->unknownMethod('BLA','/'));
|
||||
|
||||
}
|
||||
|
||||
function testLockNoBody() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'LOCK',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('');
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 400 Bad request',$this->response->status);
|
||||
|
||||
}
|
||||
|
||||
function testLock() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'LOCK',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('<?xml version="1.0"?>
|
||||
<D:lockinfo xmlns:D="DAV:">
|
||||
<D:lockscope><D:exclusive/></D:lockscope>
|
||||
<D:locktype><D:write/></D:locktype>
|
||||
<D:owner>
|
||||
<D:href>http://example.org/~ejw/contact.html</D:href>
|
||||
</D:owner>
|
||||
</D:lockinfo>');
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
$this->assertTrue(preg_match('/^<opaquelocktoken:(.*)>$/',$this->response->headers['Lock-Token'])===1,'We did not get a valid Locktoken back (' . $this->response->headers['Lock-Token'] . ')');
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status,'Got an incorrect status back. Response body: ' . $this->response->body);
|
||||
|
||||
$body = preg_replace("/xmlns(:[A-Za-z0-9_])?=(\"|\')DAV:(\"|\')/","xmlns\\1=\"DAV:\"",$this->response->body);
|
||||
$xml = simplexml_load_string($body);
|
||||
$xml->registerXPathNamespace('d','DAV:');
|
||||
|
||||
$elements = array(
|
||||
'/d:prop',
|
||||
'/d:prop/d:lockdiscovery',
|
||||
'/d:prop/d:lockdiscovery/d:activelock',
|
||||
'/d:prop/d:lockdiscovery/d:activelock/d:locktype',
|
||||
'/d:prop/d:lockdiscovery/d:activelock/d:lockroot',
|
||||
'/d:prop/d:lockdiscovery/d:activelock/d:lockroot/d:href',
|
||||
'/d:prop/d:lockdiscovery/d:activelock/d:locktype/d:write',
|
||||
'/d:prop/d:lockdiscovery/d:activelock/d:lockscope',
|
||||
'/d:prop/d:lockdiscovery/d:activelock/d:lockscope/d:exclusive',
|
||||
'/d:prop/d:lockdiscovery/d:activelock/d:depth',
|
||||
'/d:prop/d:lockdiscovery/d:activelock/d:owner',
|
||||
'/d:prop/d:lockdiscovery/d:activelock/d:timeout',
|
||||
'/d:prop/d:lockdiscovery/d:activelock/d:locktoken',
|
||||
'/d:prop/d:lockdiscovery/d:activelock/d:locktoken/d:href',
|
||||
);
|
||||
|
||||
foreach($elements as $elem) {
|
||||
$data = $xml->xpath($elem);
|
||||
$this->assertEquals(1,count($data),'We expected 1 match for the xpath expression "' . $elem . '". ' . count($data) . ' were found. Full response body: ' . $this->response->body);
|
||||
}
|
||||
|
||||
$depth = $xml->xpath('/d:prop/d:lockdiscovery/d:activelock/d:depth');
|
||||
$this->assertEquals('infinity',(string)$depth[0]);
|
||||
|
||||
$token = $xml->xpath('/d:prop/d:lockdiscovery/d:activelock/d:locktoken/d:href');
|
||||
$this->assertEquals($this->response->headers['Lock-Token'],'<' . (string)$token[0] . '>','Token in response body didn\'t match token in response header.');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testLock
|
||||
*/
|
||||
function testDoubleLock() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'LOCK',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('<?xml version="1.0"?>
|
||||
<D:lockinfo xmlns:D="DAV:">
|
||||
<D:lockscope><D:exclusive/></D:lockscope>
|
||||
<D:locktype><D:write/></D:locktype>
|
||||
<D:owner>
|
||||
<D:href>http://example.org/~ejw/contact.html</D:href>
|
||||
</D:owner>
|
||||
</D:lockinfo>');
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->response = new Sabre_HTTP_ResponseMock();
|
||||
$this->server->httpResponse = $this->response;
|
||||
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 423 Locked',$this->response->status);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testLock
|
||||
*/
|
||||
function testLockRefresh() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'LOCK',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('<?xml version="1.0"?>
|
||||
<D:lockinfo xmlns:D="DAV:">
|
||||
<D:lockscope><D:exclusive/></D:lockscope>
|
||||
<D:locktype><D:write/></D:locktype>
|
||||
<D:owner>
|
||||
<D:href>http://example.org/~ejw/contact.html</D:href>
|
||||
</D:owner>
|
||||
</D:lockinfo>');
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$lockToken = $this->response->headers['Lock-Token'];
|
||||
|
||||
$this->response = new Sabre_HTTP_ResponseMock();
|
||||
$this->server->httpResponse = $this->response;
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'LOCK',
|
||||
'HTTP_IF' => '(' . $lockToken . ')',
|
||||
);
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('');
|
||||
$this->server->httpRequest = $request;
|
||||
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status,'We received an incorrect status code. Full response body: ' . $this->response->body);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testLock
|
||||
*/
|
||||
function testLockNoFile() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/notfound.txt',
|
||||
'REQUEST_METHOD' => 'LOCK',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('<?xml version="1.0"?>
|
||||
<D:lockinfo xmlns:D="DAV:">
|
||||
<D:lockscope><D:exclusive/></D:lockscope>
|
||||
<D:locktype><D:write/></D:locktype>
|
||||
<D:owner>
|
||||
<D:href>http://example.org/~ejw/contact.html</D:href>
|
||||
</D:owner>
|
||||
</D:lockinfo>');
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
$this->assertTrue(preg_match('/^<opaquelocktoken:(.*)>$/',$this->response->headers['Lock-Token'])===1,'We did not get a valid Locktoken back (' . $this->response->headers['Lock-Token'] . ')');
|
||||
|
||||
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testLock
|
||||
*/
|
||||
function testUnlockNoToken() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'UNLOCK',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 400 Bad request',$this->response->status);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testLock
|
||||
*/
|
||||
function testUnlockBadToken() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'UNLOCK',
|
||||
'HTTP_LOCK_TOKEN' => '<opaquelocktoken:blablabla>',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 409 Conflict',$this->response->status,'Got an incorrect status code. Full response body: ' . $this->response->body);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testLock
|
||||
*/
|
||||
function testLockPutNoToken() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'LOCK',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('<?xml version="1.0"?>
|
||||
<D:lockinfo xmlns:D="DAV:">
|
||||
<D:lockscope><D:exclusive/></D:lockscope>
|
||||
<D:locktype><D:write/></D:locktype>
|
||||
<D:owner>
|
||||
<D:href>http://example.org/~ejw/contact.html</D:href>
|
||||
</D:owner>
|
||||
</D:lockinfo>');
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
$this->assertTrue(preg_match('/^<opaquelocktoken:(.*)>$/',$this->response->headers['Lock-Token'])===1,'We did not get a valid Locktoken back (' . $this->response->headers['Lock-Token'] . ')');
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status);
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('newbody');
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
$this->assertTrue(preg_match('/^<opaquelocktoken:(.*)>$/',$this->response->headers['Lock-Token'])===1,'We did not get a valid Locktoken back (' . $this->response->headers['Lock-Token'] . ')');
|
||||
|
||||
$this->assertEquals('HTTP/1.1 423 Locked',$this->response->status);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testLock
|
||||
*/
|
||||
function testUnlock() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array());
|
||||
$this->server->httpRequest = $request;
|
||||
|
||||
$request->setBody('<?xml version="1.0"?>
|
||||
<D:lockinfo xmlns:D="DAV:">
|
||||
<D:lockscope><D:exclusive/></D:lockscope>
|
||||
<D:locktype><D:write/></D:locktype>
|
||||
<D:owner>
|
||||
<D:href>http://example.org/~ejw/contact.html</D:href>
|
||||
</D:owner>
|
||||
</D:lockinfo>');
|
||||
|
||||
$this->server->invokeMethod('LOCK','test.txt');
|
||||
$lockToken = $this->server->httpResponse->headers['Lock-Token'];
|
||||
|
||||
$serverVars = array(
|
||||
'HTTP_LOCK_TOKEN' => $lockToken,
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->httpResponse = new Sabre_HTTP_ResponseMock();
|
||||
$this->server->invokeMethod('UNLOCK', 'test.txt');
|
||||
|
||||
$this->assertEquals('HTTP/1.1 204 No Content',$this->server->httpResponse->status,'Got an incorrect status code. Full response body: ' . $this->response->body);
|
||||
$this->assertEquals(array(
|
||||
'Content-Length' => '0',
|
||||
),
|
||||
$this->server->httpResponse->headers
|
||||
);
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testLock
|
||||
*/
|
||||
function testUnlockWindowsBug() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array());
|
||||
$this->server->httpRequest = $request;
|
||||
|
||||
$request->setBody('<?xml version="1.0"?>
|
||||
<D:lockinfo xmlns:D="DAV:">
|
||||
<D:lockscope><D:exclusive/></D:lockscope>
|
||||
<D:locktype><D:write/></D:locktype>
|
||||
<D:owner>
|
||||
<D:href>http://example.org/~ejw/contact.html</D:href>
|
||||
</D:owner>
|
||||
</D:lockinfo>');
|
||||
|
||||
$this->server->invokeMethod('LOCK','test.txt');
|
||||
$lockToken = $this->server->httpResponse->headers['Lock-Token'];
|
||||
|
||||
// See Issue 123
|
||||
$lockToken = trim($lockToken,'<>');
|
||||
|
||||
$serverVars = array(
|
||||
'HTTP_LOCK_TOKEN' => $lockToken,
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->httpResponse = new Sabre_HTTP_ResponseMock();
|
||||
$this->server->invokeMethod('UNLOCK', 'test.txt');
|
||||
|
||||
$this->assertEquals('HTTP/1.1 204 No Content',$this->server->httpResponse->status,'Got an incorrect status code. Full response body: ' . $this->response->body);
|
||||
$this->assertEquals(array(
|
||||
'Content-Length' => '0',
|
||||
),
|
||||
$this->server->httpResponse->headers
|
||||
);
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testLock
|
||||
*/
|
||||
function testLockRetainOwner() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array());
|
||||
$this->server->httpRequest = $request;
|
||||
|
||||
$request->setBody('<?xml version="1.0"?>
|
||||
<D:lockinfo xmlns:D="DAV:">
|
||||
<D:lockscope><D:exclusive/></D:lockscope>
|
||||
<D:locktype><D:write/></D:locktype>
|
||||
<D:owner>Evert</D:owner>
|
||||
</D:lockinfo>');
|
||||
|
||||
$this->server->invokeMethod('LOCK','test.txt');
|
||||
$lockToken = $this->server->httpResponse->headers['Lock-Token'];
|
||||
|
||||
$locks = $this->locksPlugin->getLocks('test.txt');
|
||||
$this->assertEquals(1,count($locks));
|
||||
$this->assertEquals('Evert',$locks[0]->owner);
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testLock
|
||||
*/
|
||||
function testLockPutBadToken() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'LOCK',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('<?xml version="1.0"?>
|
||||
<D:lockinfo xmlns:D="DAV:">
|
||||
<D:lockscope><D:exclusive/></D:lockscope>
|
||||
<D:locktype><D:write/></D:locktype>
|
||||
<D:owner>
|
||||
<D:href>http://example.org/~ejw/contact.html</D:href>
|
||||
</D:owner>
|
||||
</D:lockinfo>');
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
$this->assertTrue(preg_match('/^<opaquelocktoken:(.*)>$/',$this->response->headers['Lock-Token'])===1,'We did not get a valid Locktoken back (' . $this->response->headers['Lock-Token'] . ')');
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status);
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'HTTP_IF' => '(<opaquelocktoken:token1>)',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('newbody');
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
$this->assertTrue(preg_match('/^<opaquelocktoken:(.*)>$/',$this->response->headers['Lock-Token'])===1,'We did not get a valid Locktoken back (' . $this->response->headers['Lock-Token'] . ')');
|
||||
|
||||
$this->assertEquals('HTTP/1.1 412 Precondition failed',$this->response->status);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testLock
|
||||
*/
|
||||
function testLockDeleteParent() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/dir/child.txt',
|
||||
'REQUEST_METHOD' => 'LOCK',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('<?xml version="1.0"?>
|
||||
<D:lockinfo xmlns:D="DAV:">
|
||||
<D:lockscope><D:exclusive/></D:lockscope>
|
||||
<D:locktype><D:write/></D:locktype>
|
||||
<D:owner>
|
||||
<D:href>http://example.org/~ejw/contact.html</D:href>
|
||||
</D:owner>
|
||||
</D:lockinfo>');
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
$this->assertTrue(preg_match('/^<opaquelocktoken:(.*)>$/',$this->response->headers['Lock-Token'])===1,'We did not get a valid Locktoken back (' . $this->response->headers['Lock-Token'] . ')');
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status);
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/dir',
|
||||
'REQUEST_METHOD' => 'DELETE',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 423 Locked',$this->response->status);
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
|
||||
}
|
||||
/**
|
||||
* @depends testLock
|
||||
*/
|
||||
function testLockDeleteSucceed() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/dir/child.txt',
|
||||
'REQUEST_METHOD' => 'LOCK',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('<?xml version="1.0"?>
|
||||
<D:lockinfo xmlns:D="DAV:">
|
||||
<D:lockscope><D:exclusive/></D:lockscope>
|
||||
<D:locktype><D:write/></D:locktype>
|
||||
<D:owner>
|
||||
<D:href>http://example.org/~ejw/contact.html</D:href>
|
||||
</D:owner>
|
||||
</D:lockinfo>');
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
$this->assertTrue(preg_match('/^<opaquelocktoken:(.*)>$/',$this->response->headers['Lock-Token'])===1,'We did not get a valid Locktoken back (' . $this->response->headers['Lock-Token'] . ')');
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status);
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/dir/child.txt',
|
||||
'REQUEST_METHOD' => 'DELETE',
|
||||
'HTTP_IF' => '(' . $this->response->headers['Lock-Token'] . ')',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 204 No Content',$this->response->status);
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testLock
|
||||
*/
|
||||
function testLockCopyLockSource() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/dir/child.txt',
|
||||
'REQUEST_METHOD' => 'LOCK',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('<?xml version="1.0"?>
|
||||
<D:lockinfo xmlns:D="DAV:">
|
||||
<D:lockscope><D:exclusive/></D:lockscope>
|
||||
<D:locktype><D:write/></D:locktype>
|
||||
<D:owner>
|
||||
<D:href>http://example.org/~ejw/contact.html</D:href>
|
||||
</D:owner>
|
||||
</D:lockinfo>');
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
$this->assertTrue(preg_match('/^<opaquelocktoken:(.*)>$/',$this->response->headers['Lock-Token'])===1,'We did not get a valid Locktoken back (' . $this->response->headers['Lock-Token'] . ')');
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status);
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/dir/child.txt',
|
||||
'REQUEST_METHOD' => 'COPY',
|
||||
'HTTP_DESTINATION' => '/dir/child2.txt',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status,'Copy must succeed if only the source is locked, but not the destination');
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
|
||||
}
|
||||
/**
|
||||
* @depends testLock
|
||||
*/
|
||||
function testLockCopyLockDestination() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/dir/child2.txt',
|
||||
'REQUEST_METHOD' => 'LOCK',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('<?xml version="1.0"?>
|
||||
<D:lockinfo xmlns:D="DAV:">
|
||||
<D:lockscope><D:exclusive/></D:lockscope>
|
||||
<D:locktype><D:write/></D:locktype>
|
||||
<D:owner>
|
||||
<D:href>http://example.org/~ejw/contact.html</D:href>
|
||||
</D:owner>
|
||||
</D:lockinfo>');
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
$this->assertTrue(preg_match('/^<opaquelocktoken:(.*)>$/',$this->response->headers['Lock-Token'])===1,'We did not get a valid Locktoken back (' . $this->response->headers['Lock-Token'] . ')');
|
||||
|
||||
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/dir/child.txt',
|
||||
'REQUEST_METHOD' => 'COPY',
|
||||
'HTTP_DESTINATION' => '/dir/child2.txt',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 423 Locked',$this->response->status,'Copy must succeed if only the source is locked, but not the destination');
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testLock
|
||||
*/
|
||||
function testLockMoveLockSourceLocked() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/dir/child.txt',
|
||||
'REQUEST_METHOD' => 'LOCK',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('<?xml version="1.0"?>
|
||||
<D:lockinfo xmlns:D="DAV:">
|
||||
<D:lockscope><D:exclusive/></D:lockscope>
|
||||
<D:locktype><D:write/></D:locktype>
|
||||
<D:owner>
|
||||
<D:href>http://example.org/~ejw/contact.html</D:href>
|
||||
</D:owner>
|
||||
</D:lockinfo>');
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
$this->assertTrue(preg_match('/^<opaquelocktoken:(.*)>$/',$this->response->headers['Lock-Token'])===1,'We did not get a valid Locktoken back (' . $this->response->headers['Lock-Token'] . ')');
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status);
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/dir/child.txt',
|
||||
'REQUEST_METHOD' => 'MOVE',
|
||||
'HTTP_DESTINATION' => '/dir/child2.txt',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 423 Locked',$this->response->status,'Copy must succeed if only the source is locked, but not the destination');
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testLock
|
||||
*/
|
||||
function testLockMoveLockSourceSucceed() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/dir/child.txt',
|
||||
'REQUEST_METHOD' => 'LOCK',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('<?xml version="1.0"?>
|
||||
<D:lockinfo xmlns:D="DAV:">
|
||||
<D:lockscope><D:exclusive/></D:lockscope>
|
||||
<D:locktype><D:write/></D:locktype>
|
||||
<D:owner>
|
||||
<D:href>http://example.org/~ejw/contact.html</D:href>
|
||||
</D:owner>
|
||||
</D:lockinfo>');
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
$this->assertTrue(preg_match('/^<opaquelocktoken:(.*)>$/',$this->response->headers['Lock-Token'])===1,'We did not get a valid Locktoken back (' . $this->response->headers['Lock-Token'] . ')');
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status);
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/dir/child.txt',
|
||||
'REQUEST_METHOD' => 'MOVE',
|
||||
'HTTP_DESTINATION' => '/dir/child2.txt',
|
||||
'HTTP_IF' => '(' . $this->response->headers['Lock-Token'] . ')',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status,'A valid lock-token was provided for the source, so this MOVE operation must succeed. Full response body: ' . $this->response->body);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testLock
|
||||
*/
|
||||
function testLockMoveLockDestination() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/dir/child2.txt',
|
||||
'REQUEST_METHOD' => 'LOCK',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('<?xml version="1.0"?>
|
||||
<D:lockinfo xmlns:D="DAV:">
|
||||
<D:lockscope><D:exclusive/></D:lockscope>
|
||||
<D:locktype><D:write/></D:locktype>
|
||||
<D:owner>
|
||||
<D:href>http://example.org/~ejw/contact.html</D:href>
|
||||
</D:owner>
|
||||
</D:lockinfo>');
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
$this->assertTrue(preg_match('/^<opaquelocktoken:(.*)>$/',$this->response->headers['Lock-Token'])===1,'We did not get a valid Locktoken back (' . $this->response->headers['Lock-Token'] . ')');
|
||||
|
||||
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/dir/child.txt',
|
||||
'REQUEST_METHOD' => 'MOVE',
|
||||
'HTTP_DESTINATION' => '/dir/child2.txt',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 423 Locked',$this->response->status,'Copy must succeed if only the source is locked, but not the destination');
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
|
||||
}
|
||||
/**
|
||||
* @depends testLock
|
||||
*/
|
||||
function testLockMoveLockParent() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/dir',
|
||||
'REQUEST_METHOD' => 'LOCK',
|
||||
'HTTP_DEPTH' => 'infinite',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('<?xml version="1.0"?>
|
||||
<D:lockinfo xmlns:D="DAV:">
|
||||
<D:lockscope><D:exclusive/></D:lockscope>
|
||||
<D:locktype><D:write/></D:locktype>
|
||||
<D:owner>
|
||||
<D:href>http://example.org/~ejw/contact.html</D:href>
|
||||
</D:owner>
|
||||
</D:lockinfo>');
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
$this->assertTrue(preg_match('/^<opaquelocktoken:(.*)>$/',$this->response->headers['Lock-Token'])===1,'We did not get a valid Locktoken back (' . $this->response->headers['Lock-Token'] . ')');
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status);
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/dir/child.txt',
|
||||
'REQUEST_METHOD' => 'MOVE',
|
||||
'HTTP_DESTINATION' => '/dir/child2.txt',
|
||||
'HTTP_IF' => '</dir> (' . $this->response->headers['Lock-Token'] . ')',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status,'We locked the parent of both the source and destination, but the move didn\'t succeed.');
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testLock
|
||||
*/
|
||||
function testLockPutGoodToken() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'LOCK',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('<?xml version="1.0"?>
|
||||
<D:lockinfo xmlns:D="DAV:">
|
||||
<D:lockscope><D:exclusive/></D:lockscope>
|
||||
<D:locktype><D:write/></D:locktype>
|
||||
<D:owner>
|
||||
<D:href>http://example.org/~ejw/contact.html</D:href>
|
||||
</D:owner>
|
||||
</D:lockinfo>');
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
$this->assertTrue(preg_match('/^<opaquelocktoken:(.*)>$/',$this->response->headers['Lock-Token'])===1,'We did not get a valid Locktoken back (' . $this->response->headers['Lock-Token'] . ')');
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status);
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'HTTP_IF' => '('.$this->response->headers['Lock-Token'].')',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('newbody');
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
$this->assertTrue(preg_match('/^<opaquelocktoken:(.*)>$/',$this->response->headers['Lock-Token'])===1,'We did not get a valid Locktoken back (' . $this->response->headers['Lock-Token'] . ')');
|
||||
|
||||
$this->assertEquals('HTTP/1.1 204 No Content',$this->response->status);
|
||||
|
||||
}
|
||||
|
||||
function testPutWithIncorrectETag() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'HTTP_IF' => '(["etag1"])',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('newbody');
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
$this->assertEquals('HTTP/1.1 412 Precondition failed',$this->response->status);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testPutWithIncorrectETag
|
||||
*/
|
||||
function testPutWithCorrectETag() {
|
||||
|
||||
// We need an etag-enabled file node.
|
||||
$tree = new Sabre_DAV_ObjectTree(new Sabre_DAV_FSExt_Directory(SABRE_TEMPDIR));
|
||||
$this->server->tree = $tree;
|
||||
|
||||
$etag = md5(file_get_contents(SABRE_TEMPDIR . '/test.txt'));
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'HTTP_IF' => '(["'.$etag.'"])',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('newbody');
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
$this->assertEquals('HTTP/1.1 204 No Content',$this->response->status, 'Incorrect status received. Full response body:' . $this->response->body);
|
||||
|
||||
}
|
||||
|
||||
function testGetTimeoutHeader() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'HTTP_TIMEOUT' => 'second-100',
|
||||
));
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->assertEquals(100, $this->locksPlugin->getTimeoutHeader());
|
||||
|
||||
}
|
||||
|
||||
|
||||
function testGetTimeoutHeaderNotSet() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
));
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->assertEquals(0, $this->locksPlugin->getTimeoutHeader());
|
||||
|
||||
}
|
||||
|
||||
|
||||
function testGetTimeoutHeaderInfinite() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'HTTP_TIMEOUT' => 'infinite',
|
||||
));
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->assertEquals(Sabre_DAV_Locks_LockInfo::TIMEOUT_INFINITE, $this->locksPlugin->getTimeoutHeader());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_BadRequest
|
||||
*/
|
||||
function testGetTimeoutHeaderInvalid() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'HTTP_TIMEOUT' => 'yourmom',
|
||||
));
|
||||
|
||||
$this->server->httpRequest = $request;
|
||||
$this->locksPlugin->getTimeoutHeader();
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
53
dav/SabreDAV/tests/Sabre/DAV/Mount/PluginTest.php
Normal file
53
dav/SabreDAV/tests/Sabre/DAV/Mount/PluginTest.php
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/DAV/AbstractServer.php';
|
||||
|
||||
class Sabre_DAV_Mount_PluginTest extends Sabre_DAV_AbstractServer {
|
||||
|
||||
function setUp() {
|
||||
|
||||
parent::setUp();
|
||||
$this->server->addPlugin(new Sabre_DAV_Mount_Plugin());
|
||||
|
||||
}
|
||||
|
||||
function testPassThrough() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/',
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 501 Not Implemented',$this->response->status,'We expected GET to not be implemented for Directories. Response body: ' . $this->response->body);
|
||||
|
||||
}
|
||||
|
||||
function testMountResponse() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/?mount',
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
'QUERY_STRING' => 'mount',
|
||||
'HTTP_HOST' => 'example.org',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status);
|
||||
|
||||
$xml = simplexml_load_string($this->response->body);
|
||||
$this->assertTrue($xml==true,'Response was not a valid xml document');
|
||||
|
||||
$xml->registerXPathNamespace('dm','http://purl.org/NET/webdav/mount');
|
||||
$url = $xml->xpath('//dm:url');
|
||||
$this->assertEquals('http://example.org/',(string)$url[0]);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
98
dav/SabreDAV/tests/Sabre/DAV/ObjectTreeTest.php
Normal file
98
dav/SabreDAV/tests/Sabre/DAV/ObjectTreeTest.php
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/TestUtil.php';
|
||||
|
||||
class Sabre_DAV_ObjectTreeTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
protected $tree;
|
||||
|
||||
function setup() {
|
||||
|
||||
Sabre_TestUtil::clearTempDir();
|
||||
mkdir(SABRE_TEMPDIR . '/root');
|
||||
mkdir(SABRE_TEMPDIR . '/root/subdir');
|
||||
file_put_contents(SABRE_TEMPDIR . '/root/file.txt','contents');
|
||||
file_put_contents(SABRE_TEMPDIR . '/root/subdir/subfile.txt','subcontents');
|
||||
$rootNode = new Sabre_DAV_FSExt_Directory(SABRE_TEMPDIR . '/root');
|
||||
$this->tree = new Sabre_DAV_ObjectTree($rootNode);
|
||||
|
||||
}
|
||||
|
||||
function teardown() {
|
||||
|
||||
Sabre_TestUtil::clearTempDir();
|
||||
|
||||
}
|
||||
|
||||
function testGetRootNode() {
|
||||
|
||||
$root = $this->tree->getNodeForPath('');
|
||||
$this->assertInstanceOf('Sabre_DAV_FSExt_Directory',$root);
|
||||
|
||||
}
|
||||
|
||||
function testGetSubDir() {
|
||||
|
||||
$root = $this->tree->getNodeForPath('subdir');
|
||||
$this->assertInstanceOf('Sabre_DAV_FSExt_Directory',$root);
|
||||
|
||||
}
|
||||
|
||||
function testCopyFile() {
|
||||
|
||||
$this->tree->copy('file.txt','file2.txt');
|
||||
$this->assertTrue(file_exists(SABRE_TEMPDIR.'/root/file2.txt'));
|
||||
$this->assertEquals('contents',file_get_contents(SABRE_TEMPDIR.'/root/file2.txt'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testCopyFile
|
||||
*/
|
||||
function testCopyDirectory() {
|
||||
|
||||
$this->tree->copy('subdir','subdir2');
|
||||
$this->assertTrue(file_exists(SABRE_TEMPDIR.'/root/subdir2'));
|
||||
$this->assertTrue(file_exists(SABRE_TEMPDIR.'/root/subdir2/subfile.txt'));
|
||||
$this->assertEquals('subcontents',file_get_contents(SABRE_TEMPDIR.'/root/subdir2/subfile.txt'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testCopyFile
|
||||
*/
|
||||
function testMoveFile() {
|
||||
|
||||
$this->tree->move('file.txt','file2.txt');
|
||||
$this->assertTrue(file_exists(SABRE_TEMPDIR.'/root/file2.txt'));
|
||||
$this->assertFalse(file_exists(SABRE_TEMPDIR.'/root/file.txt'));
|
||||
$this->assertEquals('contents',file_get_contents(SABRE_TEMPDIR.'/root/file2.txt'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testMoveFile
|
||||
*/
|
||||
function testMoveFileNewParent() {
|
||||
|
||||
$this->tree->move('file.txt','subdir/file2.txt');
|
||||
$this->assertTrue(file_exists(SABRE_TEMPDIR.'/root/subdir/file2.txt'));
|
||||
$this->assertFalse(file_exists(SABRE_TEMPDIR.'/root/file.txt'));
|
||||
$this->assertEquals('contents',file_get_contents(SABRE_TEMPDIR.'/root/subdir/file2.txt'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testCopyDirectory
|
||||
*/
|
||||
function testMoveDirectory() {
|
||||
|
||||
$this->tree->move('subdir','subdir2');
|
||||
$this->assertTrue(file_exists(SABRE_TEMPDIR.'/root/subdir2'));
|
||||
$this->assertTrue(file_exists(SABRE_TEMPDIR.'/root/subdir2/subfile.txt'));
|
||||
$this->assertFalse(file_exists(SABRE_TEMPDIR.'/root/subdir'));
|
||||
$this->assertEquals('subcontents',file_get_contents(SABRE_TEMPDIR.'/root/subdir2/subfile.txt'));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
76
dav/SabreDAV/tests/Sabre/DAV/PartialUpdate/FileMock.php
Normal file
76
dav/SabreDAV/tests/Sabre/DAV/PartialUpdate/FileMock.php
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAV_PartialUpdate_FileMock implements Sabre_DAV_PartialUpdate_IFile {
|
||||
|
||||
protected $data = '';
|
||||
|
||||
function put($str) {
|
||||
|
||||
if (is_resource($str)) {
|
||||
$str = stream_get_contents($str);
|
||||
}
|
||||
$this->data = $str;
|
||||
|
||||
}
|
||||
|
||||
function putRange($str,$start) {
|
||||
|
||||
if (is_resource($str)) {
|
||||
$str = stream_get_contents($str);
|
||||
}
|
||||
$this->data = substr($this->data, 0, $start) . $str . substr($this->data, $start + strlen($str));
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
function get() {
|
||||
|
||||
return $this->data;
|
||||
|
||||
}
|
||||
|
||||
function getContentType() {
|
||||
|
||||
return 'text/plain';
|
||||
|
||||
}
|
||||
|
||||
function getSize() {
|
||||
|
||||
return strlen($this->data);
|
||||
|
||||
}
|
||||
|
||||
function getETag() {
|
||||
|
||||
return '"' . $this->data . '"';
|
||||
|
||||
}
|
||||
|
||||
function delete() {
|
||||
|
||||
throw new Sabre_DAV_Exception_MethodNotAllowed();
|
||||
|
||||
}
|
||||
|
||||
function setName($name) {
|
||||
|
||||
throw new Sabre_DAV_Exception_MethodNotAllowed();
|
||||
|
||||
}
|
||||
|
||||
function getName() {
|
||||
|
||||
return 'partial';
|
||||
|
||||
}
|
||||
|
||||
function getLastModified() {
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
125
dav/SabreDAV/tests/Sabre/DAV/PartialUpdate/PluginTest.php
Normal file
125
dav/SabreDAV/tests/Sabre/DAV/PartialUpdate/PluginTest.php
Normal file
|
|
@ -0,0 +1,125 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/DAV/PartialUpdate/FileMock.php';
|
||||
|
||||
class Sabre_DAV_PartialUpdate_PluginTest extends Sabre_DAVServerTest {
|
||||
|
||||
protected $node;
|
||||
protected $plugin;
|
||||
|
||||
public function setUp() {
|
||||
|
||||
$this->node = new Sabre_DAV_PartialUpdate_FileMock();
|
||||
$this->tree[] = $this->node;
|
||||
|
||||
parent::setUp();
|
||||
|
||||
$this->plugin = new Sabre_DAV_PartialUpdate_Plugin();
|
||||
$this->server->addPlugin($this->plugin);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public function testInit() {
|
||||
|
||||
$this->assertEquals('partialupdate', $this->plugin->getPluginName());
|
||||
$this->assertEquals(array('sabredav-partialupdate'), $this->plugin->getFeatures());
|
||||
$this->assertEquals(array(
|
||||
'PATCH'
|
||||
), $this->plugin->getHTTPMethods('partial'));
|
||||
$this->assertEquals(array(
|
||||
), $this->plugin->getHTTPMethods(''));
|
||||
|
||||
$this->assertNull($this->plugin->unknownMethod('FOO','partial'));
|
||||
|
||||
}
|
||||
|
||||
public function testPatchNoRange() {
|
||||
|
||||
$this->node->put('00000000');
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'PATCH',
|
||||
'REQUEST_URI' => '/partial',
|
||||
));
|
||||
$response = $this->request($request);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 400 Bad request', $response->status, 'Full response body:' . $response->body);
|
||||
|
||||
}
|
||||
|
||||
public function testPatchNotSupported() {
|
||||
|
||||
$this->node->put('00000000');
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'PATCH',
|
||||
'REQUEST_URI' => '/',
|
||||
'X_UPDATE_RANGE' => '3-4',
|
||||
|
||||
));
|
||||
$request->setBody(
|
||||
'111'
|
||||
);
|
||||
$response = $this->request($request);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 405 Method Not Allowed', $response->status, 'Full response body:' . $response->body);
|
||||
|
||||
}
|
||||
|
||||
public function testPatchNoContentType() {
|
||||
|
||||
$this->node->put('00000000');
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'PATCH',
|
||||
'REQUEST_URI' => '/partial',
|
||||
'HTTP_X_UPDATE_RANGE' => 'bytes=3-4',
|
||||
|
||||
));
|
||||
$request->setBody(
|
||||
'111'
|
||||
);
|
||||
$response = $this->request($request);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 415 Unsupported Media Type', $response->status, 'Full response body:' . $response->body);
|
||||
|
||||
}
|
||||
|
||||
public function testPatchBadRange() {
|
||||
|
||||
$this->node->put('00000000');
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'PATCH',
|
||||
'REQUEST_URI' => '/partial',
|
||||
'HTTP_X_UPDATE_RANGE' => 'bytes=3-4',
|
||||
'HTTP_CONTENT_TYPE' => 'application/x-sabredav-partialupdate',
|
||||
));
|
||||
$request->setBody(
|
||||
'111'
|
||||
);
|
||||
$response = $this->request($request);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 416 Requested Range Not Satisfiable', $response->status, 'Full response body:' . $response->body);
|
||||
|
||||
}
|
||||
|
||||
public function testPatchSuccess() {
|
||||
|
||||
$this->node->put('00000000');
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'PATCH',
|
||||
'REQUEST_URI' => '/partial',
|
||||
'HTTP_X_UPDATE_RANGE' => 'bytes=3-5',
|
||||
'HTTP_CONTENT_TYPE' => 'application/x-sabredav-partialupdate',
|
||||
'HTTP_CONTENT_LENGTH' => 3,
|
||||
));
|
||||
$request->setBody(
|
||||
'111'
|
||||
);
|
||||
$response = $this->request($request);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 204 No Content', $response->status, 'Full response body:' . $response->body);
|
||||
$this->assertEquals('00111000', $this->node->get());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAV_Property_GetLastModifiedTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testConstructDateTime() {
|
||||
|
||||
$dt = new DateTime('2010-03-14 16:35', new DateTimeZone('UTC'));
|
||||
$lastMod = new Sabre_DAV_Property_GetLastModified($dt);
|
||||
$this->assertEquals($dt->format(DateTime::ATOM), $lastMod->getTime()->format(DateTime::ATOM));
|
||||
|
||||
}
|
||||
|
||||
function testConstructString() {
|
||||
|
||||
$dt = new DateTime('2010-03-14 16:35', new DateTimeZone('UTC'));
|
||||
$lastMod = new Sabre_DAV_Property_GetLastModified('2010-03-14 16:35');
|
||||
$this->assertEquals($dt->format(DateTime::ATOM), $lastMod->getTime()->format(DateTime::ATOM));
|
||||
|
||||
}
|
||||
|
||||
function testConstructInt() {
|
||||
|
||||
$dt = new DateTime('2010-03-14 16:35', new DateTimeZone('UTC'));
|
||||
$lastMod = new Sabre_DAV_Property_GetLastModified((int)$dt->format('U'));
|
||||
$this->assertEquals($dt->format(DateTime::ATOM), $lastMod->getTime()->format(DateTime::ATOM));
|
||||
|
||||
}
|
||||
|
||||
function testSerialize() {
|
||||
|
||||
$dt = new DateTime('2010-03-14 16:35', new DateTimeZone('UTC'));
|
||||
$lastMod = new Sabre_DAV_Property_GetLastModified($dt);
|
||||
|
||||
$doc = new DOMDocument();
|
||||
$root = $doc->createElement('d:getlastmodified');
|
||||
$root->setAttribute('xmlns:d','DAV:');
|
||||
|
||||
$doc->appendChild($root);
|
||||
$objectTree = new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('rootdir'));
|
||||
$server = new Sabre_DAV_Server($objectTree);
|
||||
|
||||
$lastMod->serialize($server, $root);
|
||||
|
||||
$xml = $doc->saveXML();
|
||||
|
||||
$this->assertEquals(
|
||||
'<?xml version="1.0"?>
|
||||
<d:getlastmodified xmlns:d="DAV:" xmlns:b="urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/" b:dt="dateTime.rfc1123">' .
|
||||
Sabre_HTTP_Util::toHTTPDate($dt) .
|
||||
'</d:getlastmodified>
|
||||
', $xml);
|
||||
|
||||
$ok = false;
|
||||
try {
|
||||
Sabre_DAV_Property_GetLastModified::unserialize(Sabre_DAV_XMLUtil::loadDOMDocument($xml)->firstChild);
|
||||
} catch (Sabre_DAV_Exception $e) {
|
||||
$ok = true;
|
||||
}
|
||||
if (!$ok) $this->markTestFailed('Unserialize should not be supported');
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
88
dav/SabreDAV/tests/Sabre/DAV/Property/HrefListTest.php
Normal file
88
dav/SabreDAV/tests/Sabre/DAV/Property/HrefListTest.php
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAV_Property_HrefListTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testConstruct() {
|
||||
|
||||
$href = new Sabre_DAV_Property_HrefList(array('foo','bar'));
|
||||
$this->assertEquals(array('foo','bar'),$href->getHrefs());
|
||||
|
||||
}
|
||||
|
||||
function testSerialize() {
|
||||
|
||||
$href = new Sabre_DAV_Property_HrefList(array('foo','bar'));
|
||||
$this->assertEquals(array('foo','bar'),$href->getHrefs());
|
||||
|
||||
$doc = new DOMDocument();
|
||||
$root = $doc->createElement('d:anything');
|
||||
$root->setAttribute('xmlns:d','DAV:');
|
||||
|
||||
$doc->appendChild($root);
|
||||
$server = new Sabre_DAV_Server();
|
||||
$server->setBaseUri('/bla/');
|
||||
|
||||
$href->serialize($server, $root);
|
||||
|
||||
$xml = $doc->saveXML();
|
||||
|
||||
$this->assertEquals(
|
||||
'<?xml version="1.0"?>
|
||||
<d:anything xmlns:d="DAV:"><d:href>/bla/foo</d:href><d:href>/bla/bar</d:href></d:anything>
|
||||
', $xml);
|
||||
|
||||
}
|
||||
|
||||
function testSerializeNoPrefix() {
|
||||
|
||||
$href = new Sabre_DAV_Property_HrefList(array('foo','bar'), false);
|
||||
$this->assertEquals(array('foo','bar'),$href->getHrefs());
|
||||
|
||||
$doc = new DOMDocument();
|
||||
$root = $doc->createElement('d:anything');
|
||||
$root->setAttribute('xmlns:d','DAV:');
|
||||
|
||||
$doc->appendChild($root);
|
||||
$server = new Sabre_DAV_Server();
|
||||
$server->setBaseUri('/bla/');
|
||||
|
||||
$href->serialize($server, $root);
|
||||
|
||||
$xml = $doc->saveXML();
|
||||
|
||||
$this->assertEquals(
|
||||
'<?xml version="1.0"?>
|
||||
<d:anything xmlns:d="DAV:"><d:href>foo</d:href><d:href>bar</d:href></d:anything>
|
||||
', $xml);
|
||||
|
||||
}
|
||||
|
||||
function testUnserialize() {
|
||||
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:anything xmlns:d="DAV:"><d:href>/bla/foo</d:href><d:href>/bla/bar</d:href></d:anything>
|
||||
';
|
||||
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML($xml);
|
||||
|
||||
$href = Sabre_DAV_Property_HrefList::unserialize($dom->firstChild);
|
||||
$this->assertEquals(array('/bla/foo','/bla/bar'),$href->getHrefs());
|
||||
|
||||
}
|
||||
|
||||
function testUnserializeIncompatible() {
|
||||
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:anything xmlns:d="DAV:"><d:href2>/bla/foo</d:href2></d:anything>
|
||||
';
|
||||
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML($xml);
|
||||
|
||||
$href = Sabre_DAV_Property_HrefList::unserialize($dom->firstChild);
|
||||
$this->assertEquals(array(), $href->getHrefs());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
88
dav/SabreDAV/tests/Sabre/DAV/Property/HrefTest.php
Normal file
88
dav/SabreDAV/tests/Sabre/DAV/Property/HrefTest.php
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAV_Property_HrefTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testConstruct() {
|
||||
|
||||
$href = new Sabre_DAV_Property_Href('path');
|
||||
$this->assertEquals('path',$href->getHref());
|
||||
|
||||
}
|
||||
|
||||
function testSerialize() {
|
||||
|
||||
$href = new Sabre_DAV_Property_Href('path');
|
||||
$this->assertEquals('path',$href->getHref());
|
||||
|
||||
$doc = new DOMDocument();
|
||||
$root = $doc->createElement('d:anything');
|
||||
$root->setAttribute('xmlns:d','DAV:');
|
||||
|
||||
$doc->appendChild($root);
|
||||
$server = new Sabre_DAV_Server();
|
||||
$server->setBaseUri('/bla/');
|
||||
|
||||
$href->serialize($server, $root);
|
||||
|
||||
$xml = $doc->saveXML();
|
||||
|
||||
$this->assertEquals(
|
||||
'<?xml version="1.0"?>
|
||||
<d:anything xmlns:d="DAV:"><d:href>/bla/path</d:href></d:anything>
|
||||
', $xml);
|
||||
|
||||
}
|
||||
|
||||
function testSerializeNoPrefix() {
|
||||
|
||||
$href = new Sabre_DAV_Property_Href('path',false);
|
||||
$this->assertEquals('path',$href->getHref());
|
||||
|
||||
$doc = new DOMDocument();
|
||||
$root = $doc->createElement('d:anything');
|
||||
$root->setAttribute('xmlns:d','DAV:');
|
||||
|
||||
$doc->appendChild($root);
|
||||
$server = new Sabre_DAV_Server();
|
||||
$server->setBaseUri('/bla/');
|
||||
|
||||
$href->serialize($server, $root);
|
||||
|
||||
$xml = $doc->saveXML();
|
||||
|
||||
$this->assertEquals(
|
||||
'<?xml version="1.0"?>
|
||||
<d:anything xmlns:d="DAV:"><d:href>path</d:href></d:anything>
|
||||
', $xml);
|
||||
|
||||
}
|
||||
|
||||
function testUnserialize() {
|
||||
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:anything xmlns:d="DAV:"><d:href>/bla/path</d:href></d:anything>
|
||||
';
|
||||
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML($xml);
|
||||
|
||||
$href = Sabre_DAV_Property_Href::unserialize($dom->firstChild);
|
||||
$this->assertEquals('/bla/path',$href->getHref());
|
||||
|
||||
}
|
||||
|
||||
function testUnserializeIncompatible() {
|
||||
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:anything xmlns:d="DAV:"><d:href2>/bla/path</d:href2></d:anything>
|
||||
';
|
||||
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML($xml);
|
||||
|
||||
$href = Sabre_DAV_Property_Href::unserialize($dom->firstChild);
|
||||
$this->assertNull($href);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
107
dav/SabreDAV/tests/Sabre/DAV/Property/ResourceTypeTest.php
Normal file
107
dav/SabreDAV/tests/Sabre/DAV/Property/ResourceTypeTest.php
Normal file
|
|
@ -0,0 +1,107 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAV_Property_ResourceTypeTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testConstruct() {
|
||||
|
||||
$resourceType = new Sabre_DAV_Property_ResourceType(array('{DAV:}collection'));
|
||||
$this->assertEquals(array('{DAV:}collection'),$resourceType->getValue());
|
||||
|
||||
$resourceType = new Sabre_DAV_Property_ResourceType(Sabre_DAV_Server::NODE_FILE);
|
||||
$this->assertEquals(array(),$resourceType->getValue());
|
||||
|
||||
$resourceType = new Sabre_DAV_Property_ResourceType(Sabre_DAV_Server::NODE_DIRECTORY);
|
||||
$this->assertEquals(array('{DAV:}collection'),$resourceType->getValue());
|
||||
|
||||
$resourceType = new Sabre_DAV_Property_ResourceType('{DAV:}principal');
|
||||
$this->assertEquals(array('{DAV:}principal'),$resourceType->getValue());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testConstruct
|
||||
*/
|
||||
function testSerialize() {
|
||||
|
||||
$resourceType = new Sabre_DAV_Property_ResourceType(array('{DAV:}collection','{DAV:}principal'));
|
||||
|
||||
$doc = new DOMDocument();
|
||||
$root = $doc->createElement('d:anything');
|
||||
$root->setAttribute('xmlns:d','DAV:');
|
||||
|
||||
$doc->appendChild($root);
|
||||
$server = new Sabre_DAV_Server();
|
||||
$resourceType->serialize($server, $root);
|
||||
|
||||
$xml = $doc->saveXML();
|
||||
|
||||
$this->assertEquals(
|
||||
'<?xml version="1.0"?>
|
||||
<d:anything xmlns:d="DAV:"><d:collection/><d:principal/></d:anything>
|
||||
', $xml);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSerialize
|
||||
*/
|
||||
function testSerializeCustomNS() {
|
||||
|
||||
$resourceType = new Sabre_DAV_Property_ResourceType(array('{http://example.org/NS}article'));
|
||||
|
||||
$doc = new DOMDocument();
|
||||
$root = $doc->createElement('d:anything');
|
||||
$root->setAttribute('xmlns:d','DAV:');
|
||||
|
||||
$doc->appendChild($root);
|
||||
$server = new Sabre_DAV_Server();
|
||||
$resourceType->serialize($server, $root);
|
||||
|
||||
$xml = $doc->saveXML();
|
||||
|
||||
$this->assertEquals(
|
||||
'<?xml version="1.0"?>
|
||||
<d:anything xmlns:d="DAV:"><custom:article xmlns:custom="http://example.org/NS"/></d:anything>
|
||||
', $xml);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testConstruct
|
||||
*/
|
||||
function testIs() {
|
||||
|
||||
$resourceType = new Sabre_DAV_Property_ResourceType(array('{DAV:}collection','{DAV:}principal'));
|
||||
$this->assertTrue($resourceType->is('{DAV:}collection'));
|
||||
$this->assertFalse($resourceType->is('{DAV:}blabla'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testConstruct
|
||||
*/
|
||||
function testAdd() {
|
||||
|
||||
$resourceType = new Sabre_DAV_Property_ResourceType(array('{DAV:}collection','{DAV:}principal'));
|
||||
$resourceType->add('{DAV:}foo');
|
||||
$this->assertEquals(array('{DAV:}collection','{DAV:}principal','{DAV:}foo'), $resourceType->getValue());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testConstruct
|
||||
*/
|
||||
function testUnserialize() {
|
||||
|
||||
$xml ='<?xml version="1.0"?>
|
||||
<d:anything xmlns:d="DAV:"><d:collection/><d:principal/></d:anything>
|
||||
';
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
|
||||
|
||||
$resourceType = Sabre_DAV_Property_ResourceType::unserialize($dom->firstChild);
|
||||
$this->assertEquals(array('{DAV:}collection','{DAV:}principal'),$resourceType->getValue());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
231
dav/SabreDAV/tests/Sabre/DAV/Property/ResponseTest.php
Normal file
231
dav/SabreDAV/tests/Sabre/DAV/Property/ResponseTest.php
Normal file
|
|
@ -0,0 +1,231 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAV_Property_ResponseTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testSimple() {
|
||||
|
||||
$innerProps = array(
|
||||
200 => array(
|
||||
'{DAV:}displayname' => 'my file',
|
||||
),
|
||||
404 => array(
|
||||
'{DAV:}owner' => null,
|
||||
)
|
||||
);
|
||||
|
||||
$property = new Sabre_DAV_Property_Response('uri',$innerProps);
|
||||
|
||||
$this->assertEquals('uri',$property->getHref());
|
||||
$this->assertEquals($innerProps,$property->getResponseProperties());
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSimple
|
||||
*/
|
||||
function testSerialize() {
|
||||
|
||||
$innerProps = array(
|
||||
200 => array(
|
||||
'{DAV:}displayname' => 'my file',
|
||||
),
|
||||
404 => array(
|
||||
'{DAV:}owner' => null,
|
||||
)
|
||||
);
|
||||
|
||||
$property = new Sabre_DAV_Property_Response('uri',$innerProps);
|
||||
|
||||
$doc = new DOMDocument();
|
||||
$root = $doc->createElement('d:root');
|
||||
$root->setAttribute('xmlns:d','DAV:');
|
||||
|
||||
$doc->appendChild($root);
|
||||
$objectTree = new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('rootdir'));
|
||||
$server = new Sabre_DAV_Server($objectTree);
|
||||
|
||||
$property->serialize($server, $root);
|
||||
|
||||
$xml = $doc->saveXML();
|
||||
|
||||
$this->assertEquals(
|
||||
'<?xml version="1.0"?>
|
||||
<d:root xmlns:d="DAV:">' .
|
||||
'<d:response>' .
|
||||
'<d:href>/uri</d:href>' .
|
||||
'<d:propstat>' .
|
||||
'<d:prop>' .
|
||||
'<d:displayname>my file</d:displayname>' .
|
||||
'</d:prop>' .
|
||||
'<d:status>HTTP/1.1 200 OK</d:status>' .
|
||||
'</d:propstat>' .
|
||||
'<d:propstat>' .
|
||||
'<d:prop>' .
|
||||
'<d:owner/>' .
|
||||
'</d:prop>' .
|
||||
'<d:status>HTTP/1.1 404 Not Found</d:status>' .
|
||||
'</d:propstat>' .
|
||||
'</d:response>' .
|
||||
'</d:root>
|
||||
', $xml);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* This one is specifically for testing properties with no namespaces, which is legal xml
|
||||
*
|
||||
* @depends testSerialize
|
||||
*/
|
||||
function testSerializeEmptyNamespace() {
|
||||
|
||||
$innerProps = array(
|
||||
200 => array(
|
||||
'{}propertyname' => 'value',
|
||||
),
|
||||
);
|
||||
|
||||
$property = new Sabre_DAV_Property_Response('uri',$innerProps);
|
||||
|
||||
$doc = new DOMDocument();
|
||||
$root = $doc->createElement('d:root');
|
||||
$root->setAttribute('xmlns:d','DAV:');
|
||||
|
||||
$doc->appendChild($root);
|
||||
$objectTree = new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('rootdir'));
|
||||
$server = new Sabre_DAV_Server($objectTree);
|
||||
|
||||
$property->serialize($server, $root);
|
||||
|
||||
$xml = $doc->saveXML();
|
||||
|
||||
$this->assertEquals(
|
||||
'<?xml version="1.0"?>
|
||||
<d:root xmlns:d="DAV:">' .
|
||||
'<d:response>' .
|
||||
'<d:href>/uri</d:href>' .
|
||||
'<d:propstat>' .
|
||||
'<d:prop>' .
|
||||
'<propertyname xmlns="">value</propertyname>' .
|
||||
'</d:prop>' .
|
||||
'<d:status>HTTP/1.1 200 OK</d:status>' .
|
||||
'</d:propstat>' .
|
||||
'</d:response>' .
|
||||
'</d:root>
|
||||
', $xml);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* This one is specifically for testing properties with no namespaces, which is legal xml
|
||||
*
|
||||
* @depends testSerialize
|
||||
*/
|
||||
function testSerializeCustomNamespace() {
|
||||
|
||||
$innerProps = array(
|
||||
200 => array(
|
||||
'{http://sabredav.org/NS/example}propertyname' => 'value',
|
||||
),
|
||||
);
|
||||
|
||||
$property = new Sabre_DAV_Property_Response('uri',$innerProps);
|
||||
|
||||
$doc = new DOMDocument();
|
||||
$root = $doc->createElement('d:root');
|
||||
$root->setAttribute('xmlns:d','DAV:');
|
||||
|
||||
$doc->appendChild($root);
|
||||
$objectTree = new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('rootdir'));
|
||||
$server = new Sabre_DAV_Server($objectTree);
|
||||
|
||||
$property->serialize($server, $root);
|
||||
|
||||
$xml = $doc->saveXML();
|
||||
|
||||
$this->assertEquals(
|
||||
'<?xml version="1.0"?>
|
||||
<d:root xmlns:d="DAV:">' .
|
||||
'<d:response>' .
|
||||
'<d:href>/uri</d:href>' .
|
||||
'<d:propstat>' .
|
||||
'<d:prop>' .
|
||||
'<x2:propertyname xmlns:x2="http://sabredav.org/NS/example">value</x2:propertyname>' .
|
||||
'</d:prop>' .
|
||||
'<d:status>HTTP/1.1 200 OK</d:status>' .
|
||||
'</d:propstat>' .
|
||||
'</d:response>' .
|
||||
'</d:root>
|
||||
', $xml);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSerialize
|
||||
*/
|
||||
function testSerializeComplexProperty() {
|
||||
|
||||
$innerProps = array(
|
||||
200 => array(
|
||||
'{DAV:}link' => new Sabre_DAV_Property_Href('http://sabredav.org/', false)
|
||||
),
|
||||
);
|
||||
|
||||
$property = new Sabre_DAV_Property_Response('uri',$innerProps);
|
||||
|
||||
$doc = new DOMDocument();
|
||||
$root = $doc->createElement('d:root');
|
||||
$root->setAttribute('xmlns:d','DAV:');
|
||||
|
||||
$doc->appendChild($root);
|
||||
$objectTree = new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('rootdir'));
|
||||
$server = new Sabre_DAV_Server($objectTree);
|
||||
|
||||
$property->serialize($server, $root);
|
||||
|
||||
$xml = $doc->saveXML();
|
||||
|
||||
$this->assertEquals(
|
||||
'<?xml version="1.0"?>
|
||||
<d:root xmlns:d="DAV:">' .
|
||||
'<d:response>' .
|
||||
'<d:href>/uri</d:href>' .
|
||||
'<d:propstat>' .
|
||||
'<d:prop>' .
|
||||
'<d:link><d:href>http://sabredav.org/</d:href></d:link>' .
|
||||
'</d:prop>' .
|
||||
'<d:status>HTTP/1.1 200 OK</d:status>' .
|
||||
'</d:propstat>' .
|
||||
'</d:response>' .
|
||||
'</d:root>
|
||||
', $xml);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSerialize
|
||||
* @expectedException Sabre_DAV_Exception
|
||||
*/
|
||||
function testSerializeBreak() {
|
||||
|
||||
$innerProps = array(
|
||||
200 => array(
|
||||
'{DAV:}link' => new STDClass()
|
||||
),
|
||||
);
|
||||
|
||||
$property = new Sabre_DAV_Property_Response('uri',$innerProps);
|
||||
|
||||
$doc = new DOMDocument();
|
||||
$root = $doc->createElement('d:root');
|
||||
$root->setAttribute('xmlns:d','DAV:');
|
||||
|
||||
$doc->appendChild($root);
|
||||
$objectTree = new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('rootdir'));
|
||||
$server = new Sabre_DAV_Server($objectTree);
|
||||
|
||||
$property->serialize($server, $root);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
123
dav/SabreDAV/tests/Sabre/DAV/Property/SupportedReportSetTest.php
Normal file
123
dav/SabreDAV/tests/Sabre/DAV/Property/SupportedReportSetTest.php
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
require_once 'Sabre/DAV/AbstractServer.php';
|
||||
|
||||
class Sabre_DAV_Property_SupportedReportSetTest extends Sabre_DAV_AbstractServer {
|
||||
|
||||
public function sendPROPFIND($body) {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/',
|
||||
'REQUEST_METHOD' => 'PROPFIND',
|
||||
'HTTP_DEPTH' => '0',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody($body);
|
||||
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Sabre_DAV_Property_SupportedReportSet
|
||||
*/
|
||||
function testNoReports() {
|
||||
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:propfind xmlns:d="DAV:">
|
||||
<d:prop>
|
||||
<d:supported-report-set />
|
||||
</d:prop>
|
||||
</d:propfind>';
|
||||
|
||||
$this->sendPROPFIND($xml);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status',$this->response->status,'We expected a multi-status response. Full response body: ' . $this->response->body);
|
||||
|
||||
$body = preg_replace("/xmlns(:[A-Za-z0-9_])?=(\"|\')DAV:(\"|\')/","xmlns\\1=\"DAV:\"",$this->response->body);
|
||||
$xml = simplexml_load_string($body);
|
||||
$xml->registerXPathNamespace('d','DAV:');
|
||||
|
||||
$data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop');
|
||||
$this->assertEquals(1,count($data),'We expected 1 \'d:prop\' element');
|
||||
|
||||
$data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:supported-report-set');
|
||||
$this->assertEquals(1,count($data),'We expected 1 \'d:supported-report-set\' element');
|
||||
|
||||
$data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:status');
|
||||
$this->assertEquals(1,count($data),'We expected 1 \'d:status\' element');
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',(string)$data[0],'The status for this property should have been 200');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Sabre_DAV_Property_SupportedReportSet
|
||||
* @depends testNoReports
|
||||
*/
|
||||
function testCustomReport() {
|
||||
|
||||
// Intercepting the report property
|
||||
$this->server->subscribeEvent('afterGetProperties',array($this,'addProp'));
|
||||
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:propfind xmlns:d="DAV:">
|
||||
<d:prop>
|
||||
<d:supported-report-set />
|
||||
</d:prop>
|
||||
</d:propfind>';
|
||||
|
||||
$this->sendPROPFIND($xml);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status',$this->response->status,'We expected a multi-status response. Full response body: ' . $this->response->body);
|
||||
|
||||
$body = preg_replace("/xmlns(:[A-Za-z0-9_])?=(\"|\')DAV:(\"|\')/","xmlns\\1=\"DAV:\"",$this->response->body);
|
||||
$xml = simplexml_load_string($body);
|
||||
$xml->registerXPathNamespace('d','DAV:');
|
||||
$xml->registerXPathNamespace('x','http://www.rooftopsolutions.nl/testnamespace');
|
||||
|
||||
$data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop');
|
||||
$this->assertEquals(1,count($data),'We expected 1 \'d:prop\' element');
|
||||
|
||||
$data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:supported-report-set');
|
||||
$this->assertEquals(1,count($data),'We expected 1 \'d:supported-report-set\' element');
|
||||
|
||||
$data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:supported-report-set/d:supported-report');
|
||||
$this->assertEquals(2,count($data),'We expected 2 \'d:supported-report\' elements');
|
||||
|
||||
$data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:supported-report-set/d:supported-report/d:report');
|
||||
$this->assertEquals(2,count($data),'We expected 2 \'d:report\' elements');
|
||||
|
||||
$data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:supported-report-set/d:supported-report/d:report/x:myreport');
|
||||
$this->assertEquals(1,count($data),'We expected 1 \'x:myreport\' element. Full body: ' . $this->response->body);
|
||||
|
||||
$data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:supported-report-set/d:supported-report/d:report/d:anotherreport');
|
||||
$this->assertEquals(1,count($data),'We expected 1 \'d:anotherreport\' element. Full body: ' . $this->response->body);
|
||||
|
||||
$data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:status');
|
||||
$this->assertEquals(1,count($data),'We expected 1 \'d:status\' element');
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',(string)$data[0],'The status for this property should have been 200');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is used as a callback for afterGetProperties
|
||||
*/
|
||||
function addProp($path, &$properties) {
|
||||
|
||||
if (isset($properties[200]['{DAV:}supported-report-set'])) {
|
||||
$properties[200]['{DAV:}supported-report-set']->addReport('{http://www.rooftopsolutions.nl/testnamespace}myreport');
|
||||
$properties[200]['{DAV:}supported-report-set']->addReport('{DAV:}anotherreport');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
264
dav/SabreDAV/tests/Sabre/DAV/ServerCopyMoveTest.php
Normal file
264
dav/SabreDAV/tests/Sabre/DAV/ServerCopyMoveTest.php
Normal file
|
|
@ -0,0 +1,264 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
|
||||
class Sabre_DAV_ServerCopyMoveTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
private $response;
|
||||
/**
|
||||
* @var Sabre_DAV_Server
|
||||
*/
|
||||
private $server;
|
||||
|
||||
function setUp() {
|
||||
|
||||
$this->response = new Sabre_HTTP_ResponseMock();
|
||||
$dir = new Sabre_DAV_FS_Directory(SABRE_TEMPDIR);
|
||||
$tree = new Sabre_DAV_ObjectTree($dir);
|
||||
$this->server = new Sabre_DAV_Server($tree);
|
||||
$this->server->debugExceptions = true;
|
||||
$this->server->httpResponse = $this->response;
|
||||
file_put_contents(SABRE_TEMPDIR . '/test.txt', 'Test contents');
|
||||
file_put_contents(SABRE_TEMPDIR . '/test2.txt', 'Test contents2');
|
||||
mkdir(SABRE_TEMPDIR . '/col');
|
||||
file_put_contents(SABRE_TEMPDIR . 'col/test.txt', 'Test contents');
|
||||
|
||||
}
|
||||
|
||||
function tearDown() {
|
||||
|
||||
$cleanUp = array('test.txt','testput.txt','testcol','test2.txt','test3.txt','col/test.txt','col','col2/test.txt','col2');
|
||||
foreach($cleanUp as $file) {
|
||||
$tmpFile = SABRE_TEMPDIR . '/' . $file;
|
||||
if (file_exists($tmpFile)) {
|
||||
|
||||
if (is_dir($tmpFile)) {
|
||||
rmdir($tmpFile);
|
||||
} else {
|
||||
unlink($tmpFile);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
function testCopyOverWrite() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'COPY',
|
||||
'HTTP_DESTINATION' => '/test2.txt',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 204 No Content',$this->response->status,'Received an incorrect HTTP status. Full body inspection: ' . $this->response->body);
|
||||
$this->assertEquals(array(
|
||||
'Content-Length' => '0',
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('Test contents',file_get_contents(SABRE_TEMPDIR. '/test2.txt'));
|
||||
|
||||
}
|
||||
|
||||
function testCopyToSelf() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'COPY',
|
||||
'HTTP_DESTINATION' => '/test.txt',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 403 Forbidden',$this->response->status,'Received an incorrect HTTP status. Full body inspection: ' . $this->response->body);
|
||||
$this->assertEquals('Test contents',file_get_contents(SABRE_TEMPDIR. '/test.txt'));
|
||||
|
||||
}
|
||||
|
||||
function testMoveToSelf() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'MOVE',
|
||||
'HTTP_DESTINATION' => '/test.txt',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 403 Forbidden',$this->response->status,'Received an incorrect HTTP status. Full body inspection: ' . $this->response->body);
|
||||
$this->assertEquals('Test contents',file_get_contents(SABRE_TEMPDIR. '/test.txt'));
|
||||
|
||||
}
|
||||
|
||||
function testMoveOverWrite() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'MOVE',
|
||||
'HTTP_DESTINATION' => '/test2.txt',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Length' => 0,
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 204 No Content',$this->response->status);
|
||||
$this->assertEquals('Test contents',file_get_contents(SABRE_TEMPDIR . '/test2.txt'));
|
||||
$this->assertFalse(file_exists(SABRE_TEMPDIR . '/test.txt'),'The sourcefile test.txt should no longer exist at this point');
|
||||
|
||||
}
|
||||
|
||||
function testBlockedOverWrite() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'COPY',
|
||||
'HTTP_DESTINATION' => '/test2.txt',
|
||||
'HTTP_OVERWRITE' => 'F',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 412 Precondition failed',$this->response->status);
|
||||
$this->assertEquals('Test contents2',file_get_contents(SABRE_TEMPDIR . '/test2.txt'));
|
||||
|
||||
|
||||
}
|
||||
|
||||
function testNonExistantParent() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'COPY',
|
||||
'HTTP_DESTINATION' => '/testcol2/test2.txt',
|
||||
'HTTP_OVERWRITE' => 'F',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 409 Conflict',$this->response->status);
|
||||
|
||||
}
|
||||
|
||||
function testRandomOverwriteHeader() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'COPY',
|
||||
'HTTP_DESTINATION' => '/testcol2/test2.txt',
|
||||
'HTTP_OVERWRITE' => 'SURE!',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 400 Bad request',$this->response->status);
|
||||
|
||||
}
|
||||
|
||||
function testCopyDirectory() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/col',
|
||||
'REQUEST_METHOD' => 'COPY',
|
||||
'HTTP_DESTINATION' => '/col2',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Length' => '0',
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
|
||||
$this->assertEquals('Test contents',file_get_contents(SABRE_TEMPDIR . '/col2/test.txt'));
|
||||
|
||||
}
|
||||
|
||||
function testSimpleCopyFile() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'COPY',
|
||||
'HTTP_DESTINATION' => '/test3.txt',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Length' => '0',
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
|
||||
$this->assertEquals('Test contents',file_get_contents(SABRE_TEMPDIR . '/test3.txt'));
|
||||
|
||||
}
|
||||
|
||||
function testSimpleCopyCollection() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/col',
|
||||
'REQUEST_METHOD' => 'COPY',
|
||||
'HTTP_DESTINATION' => '/col2',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status,'Incorrect status received. Full response body: ' . $this->response->body);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Length' => '0',
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
|
||||
$this->assertEquals('Test contents',file_get_contents(SABRE_TEMPDIR . '/col2/test.txt'));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
73
dav/SabreDAV/tests/Sabre/DAV/ServerEventsTest.php
Normal file
73
dav/SabreDAV/tests/Sabre/DAV/ServerEventsTest.php
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/DAV/AbstractServer.php';
|
||||
|
||||
class Sabre_DAV_ServerEventsTest extends Sabre_DAV_AbstractServer {
|
||||
|
||||
private $tempPath;
|
||||
|
||||
private $exception;
|
||||
|
||||
function testAfterBind() {
|
||||
|
||||
$this->server->subscribeEvent('afterBind',array($this,'afterBindHandler'));
|
||||
$newPath = 'afterBind';
|
||||
|
||||
$this->tempPath = '';
|
||||
$this->server->createFile($newPath,'body');
|
||||
$this->assertEquals($newPath, $this->tempPath);
|
||||
|
||||
}
|
||||
|
||||
function afterBindHandler($path) {
|
||||
|
||||
$this->tempPath = $path;
|
||||
|
||||
}
|
||||
|
||||
function testBeforeBindCancel() {
|
||||
|
||||
$this->server->subscribeEvent('beforeBind', array($this,'beforeBindCancelHandler'));
|
||||
$this->assertFalse($this->server->createFile('bla','body'));
|
||||
|
||||
// Also testing put()
|
||||
$req = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'REQUEST_URI' => '/foobar',
|
||||
));
|
||||
|
||||
$this->server->httpRequest = $req;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('',$this->server->httpResponse->status);
|
||||
|
||||
}
|
||||
|
||||
function beforeBindCancelHandler() {
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
function testException() {
|
||||
|
||||
$this->server->subscribeEvent('exception', array($this, 'exceptionHandler'));
|
||||
|
||||
$req = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
'REQUEST_URI' => '/not/exisitng',
|
||||
));
|
||||
$this->server->httpRequest = $req;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertInstanceOf('Sabre_DAV_Exception_NotFound', $this->exception);
|
||||
|
||||
}
|
||||
|
||||
function exceptionHandler(Exception $exception) {
|
||||
|
||||
$this->exception = $exception;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
50
dav/SabreDAV/tests/Sabre/DAV/ServerFinderBlockTest.php
Normal file
50
dav/SabreDAV/tests/Sabre/DAV/ServerFinderBlockTest.php
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
require_once 'Sabre/DAV/AbstractServer.php';
|
||||
require_once 'Sabre/DAV/Exception.php';
|
||||
|
||||
class Sabre_DAV_ServerFinderBlockTest extends Sabre_DAV_AbstractServer{
|
||||
|
||||
function testPut() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/testput.txt',
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'HTTP_X_EXPECTED_ENTITY_LENGTH' => '20',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('Testing finder');
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('', $this->response->body);
|
||||
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
|
||||
$this->assertEquals('0', $this->response->headers['Content-Length']);
|
||||
|
||||
$this->assertEquals('Testing finder',file_get_contents(SABRE_TEMPDIR . '/testput.txt'));
|
||||
|
||||
}
|
||||
|
||||
function testPutFail() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/testput.txt',
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'HTTP_X_EXPECTED_ENTITY_LENGTH' => '20',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('');
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 403 Forbidden',$this->response->status);
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertFalse(file_exists(SABRE_TEMPDIR . '/testput.txt'));
|
||||
}
|
||||
}
|
||||
367
dav/SabreDAV/tests/Sabre/DAV/ServerMKCOLTest.php
Normal file
367
dav/SabreDAV/tests/Sabre/DAV/ServerMKCOLTest.php
Normal file
|
|
@ -0,0 +1,367 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
require_once 'Sabre/DAV/AbstractServer.php';
|
||||
require_once 'Sabre/DAV/Exception.php';
|
||||
|
||||
class Sabre_DAV_ServerMKCOLTest extends Sabre_DAV_AbstractServer {
|
||||
|
||||
function testMkcol() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/testcol',
|
||||
'REQUEST_METHOD' => 'MKCOL',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody("");
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Length' => '0',
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
|
||||
$this->assertEquals('', $this->response->body);
|
||||
$this->assertTrue(is_dir($this->tempDir . '/testcol'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testMkcol
|
||||
*/
|
||||
function testMKCOLUnknownBody() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/testcol',
|
||||
'REQUEST_METHOD' => 'MKCOL',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody("Hello");
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 415 Unsupported Media Type',$this->response->status);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testMkcol
|
||||
*/
|
||||
function testMKCOLBrokenXML() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/testcol',
|
||||
'REQUEST_METHOD' => 'MKCOL',
|
||||
'HTTP_CONTENT_TYPE' => 'application/xml',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody("Hello");
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 400 Bad request',$this->response->status);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testMkcol
|
||||
*/
|
||||
function testMKCOLUnknownXML() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/testcol',
|
||||
'REQUEST_METHOD' => 'MKCOL',
|
||||
'HTTP_CONTENT_TYPE' => 'application/xml',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('<?xml version="1.0"?><html></html>');
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 415 Unsupported Media Type',$this->response->status);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testMkcol
|
||||
*/
|
||||
function testMKCOLNoResourceType() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/testcol',
|
||||
'REQUEST_METHOD' => 'MKCOL',
|
||||
'HTTP_CONTENT_TYPE' => 'application/xml',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('<?xml version="1.0"?>
|
||||
<mkcol xmlns="DAV:">
|
||||
<set>
|
||||
<prop>
|
||||
<displayname>Evert</displayname>
|
||||
</prop>
|
||||
</set>
|
||||
</mkcol>');
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 400 Bad request',$this->response->status,'Wrong statuscode received. Full response body: ' .$this->response->body);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testMKCOLNoResourceType
|
||||
*/
|
||||
function testMKCOLIncorrectResourceType() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/testcol',
|
||||
'REQUEST_METHOD' => 'MKCOL',
|
||||
'HTTP_CONTENT_TYPE' => 'application/xml',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('<?xml version="1.0"?>
|
||||
<mkcol xmlns="DAV:">
|
||||
<set>
|
||||
<prop>
|
||||
<resourcetype><blabla /></resourcetype>
|
||||
</prop>
|
||||
</set>
|
||||
</mkcol>');
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 403 Forbidden',$this->response->status,'Wrong statuscode received. Full response body: ' .$this->response->body);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testMKCOLIncorrectResourceType
|
||||
*/
|
||||
function testMKCOLIncorrectResourceType2() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/testcol',
|
||||
'REQUEST_METHOD' => 'MKCOL',
|
||||
'HTTP_CONTENT_TYPE' => 'application/xml',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('<?xml version="1.0"?>
|
||||
<mkcol xmlns="DAV:">
|
||||
<set>
|
||||
<prop>
|
||||
<resourcetype><collection /><blabla /></resourcetype>
|
||||
</prop>
|
||||
</set>
|
||||
</mkcol>');
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 403 Forbidden',$this->response->status,'Wrong statuscode received. Full response body: ' .$this->response->body);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testMKCOLIncorrectResourceType2
|
||||
*/
|
||||
function testMKCOLSuccess() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/testcol',
|
||||
'REQUEST_METHOD' => 'MKCOL',
|
||||
'HTTP_CONTENT_TYPE' => 'application/xml',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('<?xml version="1.0"?>
|
||||
<mkcol xmlns="DAV:">
|
||||
<set>
|
||||
<prop>
|
||||
<resourcetype><collection /></resourcetype>
|
||||
</prop>
|
||||
</set>
|
||||
</mkcol>');
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Length' => '0',
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status,'Wrong statuscode received. Full response body: ' .$this->response->body);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testMKCOLIncorrectResourceType2
|
||||
*/
|
||||
function testMKCOLWhiteSpaceResourceType() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/testcol',
|
||||
'REQUEST_METHOD' => 'MKCOL',
|
||||
'HTTP_CONTENT_TYPE' => 'application/xml',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('<?xml version="1.0"?>
|
||||
<mkcol xmlns="DAV:">
|
||||
<set>
|
||||
<prop>
|
||||
<resourcetype>
|
||||
<collection />
|
||||
</resourcetype>
|
||||
</prop>
|
||||
</set>
|
||||
</mkcol>');
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Length' => '0',
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status,'Wrong statuscode received. Full response body: ' .$this->response->body);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testMKCOLIncorrectResourceType2
|
||||
*/
|
||||
function testMKCOLNoParent() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/testnoparent/409me',
|
||||
'REQUEST_METHOD' => 'MKCOL',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('');
|
||||
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 409 Conflict',$this->response->status,'Wrong statuscode received. Full response body: ' .$this->response->body);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testMKCOLIncorrectResourceType2
|
||||
*/
|
||||
function testMKCOLParentIsNoCollection() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt/409me',
|
||||
'REQUEST_METHOD' => 'MKCOL',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('');
|
||||
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 409 Conflict',$this->response->status,'Wrong statuscode received. Full response body: ' .$this->response->body);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testMKCOLIncorrectResourceType2
|
||||
*/
|
||||
function testMKCOLAlreadyExists() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'MKCOL',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('');
|
||||
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
'Allow' => 'OPTIONS, GET, HEAD, DELETE, PROPFIND, PUT, PROPPATCH, COPY, MOVE, REPORT',
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 405 Method Not Allowed',$this->response->status,'Wrong statuscode received. Full response body: ' .$this->response->body);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testMKCOLSuccess
|
||||
* @depends testMKCOLAlreadyExists
|
||||
*/
|
||||
function testMKCOLAndProps() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/testcol',
|
||||
'REQUEST_METHOD' => 'MKCOL',
|
||||
'HTTP_CONTENT_TYPE' => 'application/xml',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('<?xml version="1.0"?>
|
||||
<mkcol xmlns="DAV:">
|
||||
<set>
|
||||
<prop>
|
||||
<resourcetype><collection /></resourcetype>
|
||||
<displayname>my new collection</displayname>
|
||||
</prop>
|
||||
</set>
|
||||
</mkcol>');
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status',$this->response->status,'Wrong statuscode received. Full response body: ' .$this->response->body);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
),$this->response->headers);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
95
dav/SabreDAV/tests/Sabre/DAV/ServerPluginTest.php
Normal file
95
dav/SabreDAV/tests/Sabre/DAV/ServerPluginTest.php
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/DAV/AbstractServer.php';
|
||||
require_once 'Sabre/DAV/TestPlugin.php';
|
||||
|
||||
class Sabre_DAV_ServerPluginTest extends Sabre_DAV_AbstractServer {
|
||||
|
||||
/**
|
||||
* @var Sabre_DAV_TestPlugin
|
||||
*/
|
||||
protected $testPlugin;
|
||||
|
||||
function setUp() {
|
||||
|
||||
parent::setUp();
|
||||
|
||||
$testPlugin = new Sabre_DAV_TestPlugin();
|
||||
$this->server->addPlugin($testPlugin);
|
||||
$this->testPlugin = $testPlugin;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Sabre_DAV_ServerPlugin
|
||||
*/
|
||||
function testBaseClass() {
|
||||
|
||||
$p = new Sabre_DAV_ServerPluginMock();
|
||||
$this->assertEquals(array(),$p->getFeatures());
|
||||
$this->assertEquals(array(),$p->getHTTPMethods(''));
|
||||
|
||||
}
|
||||
|
||||
function testOptions() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/',
|
||||
'REQUEST_METHOD' => 'OPTIONS',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'DAV' => '1, 3, extended-mkcol, drinking',
|
||||
'MS-Author-Via' => 'DAV',
|
||||
'Allow' => 'OPTIONS, GET, HEAD, DELETE, PROPFIND, PUT, PROPPATCH, COPY, MOVE, REPORT, BEER, WINE',
|
||||
'Accept-Ranges' => 'bytes',
|
||||
'Content-Length' => '0',
|
||||
'X-Sabre-Version' => Sabre_DAV_Version::VERSION,
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status);
|
||||
$this->assertEquals('', $this->response->body);
|
||||
$this->assertEquals('OPTIONS',$this->testPlugin->beforeMethod);
|
||||
|
||||
|
||||
}
|
||||
|
||||
function testGetPlugin() {
|
||||
|
||||
$this->assertEquals($this->testPlugin,$this->server->getPlugin(get_class($this->testPlugin)));
|
||||
|
||||
}
|
||||
|
||||
function testUnknownPlugin() {
|
||||
|
||||
$this->assertNull($this->server->getPlugin('SomeRandomClassName'));
|
||||
|
||||
}
|
||||
|
||||
function testGetSupportedReportSet() {
|
||||
|
||||
$this->assertEquals(array(), $this->testPlugin->getSupportedReportSet('/'));
|
||||
|
||||
}
|
||||
|
||||
function testGetPlugins() {
|
||||
|
||||
$this->assertEquals(
|
||||
array(get_class($this->testPlugin) => $this->testPlugin),
|
||||
$this->server->getPlugins()
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
class Sabre_DAV_ServerPluginMock extends Sabre_DAV_ServerPlugin {
|
||||
|
||||
function initialize(Sabre_DAV_Server $s) { }
|
||||
|
||||
}
|
||||
391
dav/SabreDAV/tests/Sabre/DAV/ServerPreconditionTest.php
Normal file
391
dav/SabreDAV/tests/Sabre/DAV/ServerPreconditionTest.php
Normal file
|
|
@ -0,0 +1,391 @@
|
|||
<?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';
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
393
dav/SabreDAV/tests/Sabre/DAV/ServerPropsTest.php
Normal file
393
dav/SabreDAV/tests/Sabre/DAV/ServerPropsTest.php
Normal file
|
|
@ -0,0 +1,393 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
require_once 'Sabre/DAV/AbstractServer.php';
|
||||
|
||||
class Sabre_DAV_ServerPropsTest extends Sabre_DAV_AbstractServer {
|
||||
|
||||
protected function getRootNode() {
|
||||
|
||||
return new Sabre_DAV_FSExt_Directory(SABRE_TEMPDIR);
|
||||
|
||||
}
|
||||
|
||||
function setUp() {
|
||||
|
||||
if (file_exists(SABRE_TEMPDIR.'../.sabredav')) unlink(SABRE_TEMPDIR.'../.sabredav');
|
||||
parent::setUp();
|
||||
file_put_contents(SABRE_TEMPDIR . '/test2.txt', 'Test contents2');
|
||||
mkdir(SABRE_TEMPDIR . '/col');
|
||||
file_put_contents(SABRE_TEMPDIR . 'col/test.txt', 'Test contents');
|
||||
$this->server->addPlugin(new Sabre_DAV_Locks_Plugin(new Sabre_DAV_Locks_Backend_File(SABRE_TEMPDIR . '/.locksdb')));
|
||||
|
||||
}
|
||||
|
||||
function tearDown() {
|
||||
|
||||
parent::tearDown();
|
||||
if (file_exists(SABRE_TEMPDIR.'../.locksdb')) unlink(SABRE_TEMPDIR.'../.locksdb');
|
||||
|
||||
}
|
||||
|
||||
private function sendRequest($body) {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/',
|
||||
'REQUEST_METHOD' => 'PROPFIND',
|
||||
'HTTP_DEPTH' => '0',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody($body);
|
||||
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
}
|
||||
|
||||
public function testPropFindEmptyBody() {
|
||||
|
||||
$this->sendRequest("");
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status',$this->response->status);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
'DAV' => '1, 3, extended-mkcol, 2',
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$body = preg_replace("/xmlns(:[A-Za-z0-9_])?=(\"|\')DAV:(\"|\')/","xmlns\\1=\"DAV:\"",$this->response->body);
|
||||
$xml = simplexml_load_string($body);
|
||||
$xml->registerXPathNamespace('d','DAV:');
|
||||
|
||||
list($data) = $xml->xpath('/d:multistatus/d:response/d:href');
|
||||
$this->assertEquals('/',(string)$data,'href element should have been /');
|
||||
|
||||
$data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:resourcetype');
|
||||
$this->assertEquals(1,count($data));
|
||||
|
||||
}
|
||||
|
||||
function testSupportedLocks() {
|
||||
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:propfind xmlns:d="DAV:">
|
||||
<d:prop>
|
||||
<d:supportedlock />
|
||||
</d:prop>
|
||||
</d:propfind>';
|
||||
|
||||
$this->sendRequest($xml);
|
||||
|
||||
$body = preg_replace("/xmlns(:[A-Za-z0-9_])?=(\"|\')DAV:(\"|\')/","xmlns\\1=\"DAV:\"",$this->response->body);
|
||||
$xml = simplexml_load_string($body);
|
||||
$xml->registerXPathNamespace('d','DAV:');
|
||||
|
||||
$data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:supportedlock/d:lockentry');
|
||||
$this->assertEquals(2,count($data),'We expected two \'d:lockentry\' tags');
|
||||
|
||||
$data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:supportedlock/d:lockentry/d:lockscope');
|
||||
$this->assertEquals(2,count($data),'We expected two \'d:lockscope\' tags');
|
||||
|
||||
$data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:supportedlock/d:lockentry/d:locktype');
|
||||
$this->assertEquals(2,count($data),'We expected two \'d:locktype\' tags');
|
||||
|
||||
$data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:supportedlock/d:lockentry/d:lockscope/d:shared');
|
||||
$this->assertEquals(1,count($data),'We expected a \'d:shared\' tag');
|
||||
|
||||
$data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:supportedlock/d:lockentry/d:lockscope/d:exclusive');
|
||||
$this->assertEquals(1,count($data),'We expected a \'d:exclusive\' tag');
|
||||
|
||||
$data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:supportedlock/d:lockentry/d:locktype/d:write');
|
||||
$this->assertEquals(2,count($data),'We expected two \'d:write\' tags');
|
||||
}
|
||||
|
||||
function testLockDiscovery() {
|
||||
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:propfind xmlns:d="DAV:">
|
||||
<d:prop>
|
||||
<d:lockdiscovery />
|
||||
</d:prop>
|
||||
</d:propfind>';
|
||||
|
||||
$this->sendRequest($xml);
|
||||
|
||||
$body = preg_replace("/xmlns(:[A-Za-z0-9_])?=(\"|\')DAV:(\"|\')/","xmlns\\1=\"DAV:\"",$this->response->body);
|
||||
$xml = simplexml_load_string($body);
|
||||
$xml->registerXPathNamespace('d','DAV:');
|
||||
|
||||
$data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:lockdiscovery');
|
||||
$this->assertEquals(1,count($data),'We expected a \'d:lockdiscovery\' tag');
|
||||
|
||||
}
|
||||
|
||||
function testUnknownProperty() {
|
||||
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:propfind xmlns:d="DAV:">
|
||||
<d:prop>
|
||||
<d:macaroni />
|
||||
</d:prop>
|
||||
</d:propfind>';
|
||||
|
||||
$this->sendRequest($xml);
|
||||
$body = preg_replace("/xmlns(:[A-Za-z0-9_])?=(\"|\')DAV:(\"|\')/","xmlns\\1=\"DAV:\"",$this->response->body);
|
||||
$xml = simplexml_load_string($body);
|
||||
$xml->registerXPathNamespace('d','DAV:');
|
||||
$pathTests = array(
|
||||
'/d:multistatus',
|
||||
'/d:multistatus/d:response',
|
||||
'/d:multistatus/d:response/d:propstat',
|
||||
'/d:multistatus/d:response/d:propstat/d:status',
|
||||
'/d:multistatus/d:response/d:propstat/d:prop',
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/d:macaroni',
|
||||
);
|
||||
foreach($pathTests as $test) {
|
||||
$this->assertTrue(count($xml->xpath($test))==true,'We expected the ' . $test . ' element to appear in the response, we got: ' . $body);
|
||||
}
|
||||
|
||||
$val = $xml->xpath('/d:multistatus/d:response/d:propstat/d:status');
|
||||
$this->assertEquals(1,count($val),$body);
|
||||
$this->assertEquals('HTTP/1.1 404 Not Found',(string)$val[0]);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Sabre_DAV_Server::parsePropPatchRequest
|
||||
*/
|
||||
public function testParsePropPatchRequest() {
|
||||
|
||||
$body = '<?xml version="1.0"?>
|
||||
<d:propertyupdate xmlns:d="DAV:" xmlns:s="http://sabredav.org/NS/test">
|
||||
<d:set><d:prop><s:someprop>somevalue</s:someprop></d:prop></d:set>
|
||||
<d:remove><d:prop><s:someprop2 /></d:prop></d:remove>
|
||||
<d:set><d:prop><s:someprop3>removeme</s:someprop3></d:prop></d:set>
|
||||
<d:remove><d:prop><s:someprop3 /></d:prop></d:remove>
|
||||
</d:propertyupdate>';
|
||||
|
||||
$result = $this->server->parsePropPatchRequest($body);
|
||||
$this->assertEquals(array(
|
||||
'{http://sabredav.org/NS/test}someprop' => 'somevalue',
|
||||
'{http://sabredav.org/NS/test}someprop2' => null,
|
||||
'{http://sabredav.org/NS/test}someprop3' => null,
|
||||
), $result);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Sabre_DAV_Server::updateProperties
|
||||
*/
|
||||
public function testUpdateProperties() {
|
||||
|
||||
$props = array(
|
||||
'{http://sabredav.org/NS/test}someprop' => 'somevalue',
|
||||
);
|
||||
|
||||
$result = $this->server->updateProperties('/test2.txt',$props);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'200' => array('{http://sabredav.org/NS/test}someprop' => null),
|
||||
'href' => '/test2.txt',
|
||||
), $result);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Sabre_DAV_Server::updateProperties
|
||||
* @depends testUpdateProperties
|
||||
*/
|
||||
public function testUpdatePropertiesProtected() {
|
||||
|
||||
$props = array(
|
||||
'{http://sabredav.org/NS/test}someprop' => 'somevalue',
|
||||
'{DAV:}getcontentlength' => 50,
|
||||
);
|
||||
|
||||
$result = $this->server->updateProperties('/test2.txt',$props);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'424' => array('{http://sabredav.org/NS/test}someprop' => null),
|
||||
'403' => array('{DAV:}getcontentlength' => null),
|
||||
'href' => '/test2.txt',
|
||||
), $result);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Sabre_DAV_Server::updateProperties
|
||||
* @depends testUpdateProperties
|
||||
*/
|
||||
public function testUpdatePropertiesFail1() {
|
||||
|
||||
$dir = new Sabre_DAV_PropTestDirMock('updatepropsfalse');
|
||||
$objectTree = new Sabre_DAV_ObjectTree($dir);
|
||||
$this->server->tree = $objectTree;
|
||||
|
||||
$props = array(
|
||||
'{http://sabredav.org/NS/test}someprop' => 'somevalue',
|
||||
);
|
||||
|
||||
$result = $this->server->updateProperties('/',$props);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'403' => array('{http://sabredav.org/NS/test}someprop' => null),
|
||||
'href' => '/',
|
||||
), $result);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Sabre_DAV_Server::updateProperties
|
||||
* @depends testUpdateProperties
|
||||
*/
|
||||
public function testUpdatePropertiesFail2() {
|
||||
|
||||
$dir = new Sabre_DAV_PropTestDirMock('updatepropsarray');
|
||||
$objectTree = new Sabre_DAV_ObjectTree($dir);
|
||||
$this->server->tree = $objectTree;
|
||||
|
||||
$props = array(
|
||||
'{http://sabredav.org/NS/test}someprop' => 'somevalue',
|
||||
);
|
||||
|
||||
$result = $this->server->updateProperties('/',$props);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'402' => array('{http://sabredav.org/NS/test}someprop' => null),
|
||||
'href' => '/',
|
||||
), $result);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Sabre_DAV_Server::updateProperties
|
||||
* @depends testUpdateProperties
|
||||
* @expectedException Sabre_DAV_Exception
|
||||
*/
|
||||
public function testUpdatePropertiesFail3() {
|
||||
|
||||
$dir = new Sabre_DAV_PropTestDirMock('updatepropsobj');
|
||||
$objectTree = new Sabre_DAV_ObjectTree($dir);
|
||||
$this->server->tree = $objectTree;
|
||||
|
||||
$props = array(
|
||||
'{http://sabredav.org/NS/test}someprop' => 'somevalue',
|
||||
);
|
||||
|
||||
$result = $this->server->updateProperties('/',$props);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testParsePropPatchRequest
|
||||
* @depends testUpdateProperties
|
||||
* @covers Sabre_DAV_Server::httpPropPatch
|
||||
*/
|
||||
public function testPropPatch() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/',
|
||||
'REQUEST_METHOD' => 'PROPPATCH',
|
||||
);
|
||||
|
||||
$body = '<?xml version="1.0"?>
|
||||
<d:propertyupdate xmlns:d="DAV:" xmlns:s="http://www.rooftopsolutions.nl/testnamespace">
|
||||
<d:set><d:prop><s:someprop>somevalue</s:someprop></d:prop></d:set>
|
||||
</d:propertyupdate>';
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody($body);
|
||||
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status',$this->response->status,'We got the wrong status. Full XML response: ' . $this->response->body);
|
||||
|
||||
$body = preg_replace("/xmlns(:[A-Za-z0-9_])?=(\"|\')DAV:(\"|\')/","xmlns\\1=\"DAV:\"",$this->response->body);
|
||||
$xml = simplexml_load_string($body);
|
||||
$xml->registerXPathNamespace('d','DAV:');
|
||||
$xml->registerXPathNamespace('bla','http://www.rooftopsolutions.nl/testnamespace');
|
||||
|
||||
$data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop');
|
||||
$this->assertEquals(1,count($data),'We expected one \'d:prop\' element. Response body: ' . $body);
|
||||
|
||||
$data = $xml->xpath('//bla:someprop');
|
||||
$this->assertEquals(1,count($data),'We expected one \'s:someprop\' element. Response body: ' . $body);
|
||||
|
||||
$data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:status');
|
||||
$this->assertEquals(1,count($data),'We expected one \'s:status\' element. Response body: ' . $body);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',(string)$data[0]);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testPropPatch
|
||||
*/
|
||||
public function testPropPatchAndFetch() {
|
||||
|
||||
$this->testPropPatch();
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:propfind xmlns:d="DAV:" xmlns:s="http://www.rooftopsolutions.nl/testnamespace">
|
||||
<d:prop>
|
||||
<s:someprop />
|
||||
</d:prop>
|
||||
</d:propfind>';
|
||||
|
||||
$this->sendRequest($xml);
|
||||
|
||||
$body = preg_replace("/xmlns(:[A-Za-z0-9_])?=(\"|\')DAV:(\"|\')/","xmlns\\1=\"DAV:\"",$this->response->body);
|
||||
$xml = simplexml_load_string($body);
|
||||
$xml->registerXPathNamespace('d','DAV:');
|
||||
$xml->registerXPathNamespace('bla','http://www.rooftopsolutions.nl/testnamespace');
|
||||
|
||||
$xpath='//bla:someprop';
|
||||
$result = $xml->xpath($xpath);
|
||||
$this->assertEquals(1,count($result),'We couldn\'t find our new property in the response. Full response body:' . "\n" . $body);
|
||||
$this->assertEquals('somevalue',(string)$result[0],'We couldn\'t find our new property in the response. Full response body:' . "\n" . $body);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class Sabre_DAV_PropTestDirMock extends Sabre_DAV_SimpleCollection implements Sabre_DAV_IProperties {
|
||||
|
||||
public $type;
|
||||
|
||||
function __construct($type) {
|
||||
|
||||
$this->type =$type;
|
||||
parent::__construct('root');
|
||||
|
||||
}
|
||||
|
||||
function updateProperties($updateProperties) {
|
||||
|
||||
switch($this->type) {
|
||||
case 'updatepropsfalse' : return false;
|
||||
case 'updatepropsarray' :
|
||||
$r = array(402 => array());
|
||||
foreach($updateProperties as $k=>$v) $r[402][$k] = null;
|
||||
return $r;
|
||||
case 'updatepropsobj' :
|
||||
return new STDClass();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function getProperties($requestedPropeties) {
|
||||
|
||||
return array();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
271
dav/SabreDAV/tests/Sabre/DAV/ServerRangeTest.php
Normal file
271
dav/SabreDAV/tests/Sabre/DAV/ServerRangeTest.php
Normal file
|
|
@ -0,0 +1,271 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/DAV/AbstractServer.php';
|
||||
|
||||
class Sabre_DAV_ServerRangeTest extends Sabre_DAV_AbstractServer{
|
||||
|
||||
protected function getRootNode() {
|
||||
|
||||
return new Sabre_DAV_FSExt_Directory(SABRE_TEMPDIR);
|
||||
|
||||
}
|
||||
|
||||
function testRange() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
'HTTP_RANGE' => 'bytes=2-5',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/octet-stream',
|
||||
'Content-Length' => 4,
|
||||
'Content-Range' => 'bytes 2-5/13',
|
||||
'Last-Modified' => Sabre_HTTP_Util::toHTTPDate(new DateTime('@' . filemtime($this->tempDir . '/test.txt'))),
|
||||
'ETag' => '"' . md5(file_get_contents(SABRE_TEMPDIR . '/test.txt')). '"',
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 206 Partial Content',$this->response->status);
|
||||
$this->assertEquals('st c', stream_get_contents($this->response->body));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testRange
|
||||
*/
|
||||
function testStartRange() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
'HTTP_RANGE' => 'bytes=2-',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/octet-stream',
|
||||
'Content-Length' => 11,
|
||||
'Content-Range' => 'bytes 2-12/13',
|
||||
'Last-Modified' => Sabre_HTTP_Util::toHTTPDate(new DateTime('@' . filemtime($this->tempDir . '/test.txt'))),
|
||||
'ETag' => '"' . md5(file_get_contents(SABRE_TEMPDIR . '/test.txt')) . '"',
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 206 Partial Content',$this->response->status);
|
||||
$this->assertEquals('st contents', stream_get_contents($this->response->body));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testRange
|
||||
*/
|
||||
function testEndRange() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
'HTTP_RANGE' => 'bytes=-8',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/octet-stream',
|
||||
'Content-Length' => 8,
|
||||
'Content-Range' => 'bytes 5-12/13',
|
||||
'Last-Modified' => Sabre_HTTP_Util::toHTTPDate(new DateTime('@' . filemtime($this->tempDir . '/test.txt'))),
|
||||
'ETag' => '"' . md5(file_get_contents(SABRE_TEMPDIR . '/test.txt')). '"',
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 206 Partial Content',$this->response->status);
|
||||
$this->assertEquals('contents', stream_get_contents($this->response->body));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testRange
|
||||
*/
|
||||
function testTooHighRange() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
'HTTP_RANGE' => 'bytes=100-200',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 416 Requested Range Not Satisfiable',$this->response->status);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testRange
|
||||
*/
|
||||
function testCrazyRange() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
'HTTP_RANGE' => 'bytes=8-4',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 416 Requested Range Not Satisfiable',$this->response->status);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testRange
|
||||
* @covers Sabre_DAV_Server::httpGet
|
||||
*/
|
||||
function testIfRangeEtag() {
|
||||
|
||||
$node = $this->server->tree->getNodeForPath('test.txt');
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
'HTTP_RANGE' => 'bytes=2-5',
|
||||
'HTTP_IF_RANGE' => $node->getETag(),
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/octet-stream',
|
||||
'Content-Length' => 4,
|
||||
'Content-Range' => 'bytes 2-5/13',
|
||||
'Last-Modified' => Sabre_HTTP_Util::toHTTPDate(new DateTime('@' . filemtime($this->tempDir . '/test.txt'))),
|
||||
'ETag' => '"' . md5(file_get_contents(SABRE_TEMPDIR . '/test.txt')) . '"',
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 206 Partial Content',$this->response->status);
|
||||
$this->assertEquals('st c', stream_get_contents($this->response->body));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testRange
|
||||
* @covers Sabre_DAV_Server::httpGet
|
||||
*/
|
||||
function testIfRangeEtagIncorrect() {
|
||||
|
||||
$node = $this->server->tree->getNodeForPath('test.txt');
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
'HTTP_RANGE' => 'bytes=2-5',
|
||||
'HTTP_IF_RANGE' => $node->getETag() . 'blabla',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/octet-stream',
|
||||
'Content-Length' => 13,
|
||||
'Last-Modified' => Sabre_HTTP_Util::toHTTPDate(new DateTime('@' . filemtime($this->tempDir . '/test.txt'))),
|
||||
'ETag' => '"' . md5(file_get_contents(SABRE_TEMPDIR . '/test.txt')) . '"',
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status);
|
||||
$this->assertEquals('Test contents', stream_get_contents($this->response->body));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testRange
|
||||
* @covers Sabre_DAV_Server::httpGet
|
||||
*/
|
||||
function testIfRangeModificationDate() {
|
||||
|
||||
$node = $this->server->tree->getNodeForPath('test.txt');
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
'HTTP_RANGE' => 'bytes=2-5',
|
||||
'HTTP_IF_RANGE' => 'tomorrow',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/octet-stream',
|
||||
'Content-Length' => 4,
|
||||
'Content-Range' => 'bytes 2-5/13',
|
||||
'Last-Modified' => Sabre_HTTP_Util::toHTTPDate(new DateTime('@' . filemtime($this->tempDir . '/test.txt'))),
|
||||
'ETag' => '"' . md5(file_get_contents(SABRE_TEMPDIR . '/test.txt')) . '"',
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 206 Partial Content',$this->response->status);
|
||||
$this->assertEquals('st c', stream_get_contents($this->response->body));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testRange
|
||||
* @covers Sabre_DAV_Server::httpGet
|
||||
*/
|
||||
function testIfRangeModificationDateModified() {
|
||||
|
||||
$node = $this->server->tree->getNodeForPath('test.txt');
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
'HTTP_RANGE' => 'bytes=2-5',
|
||||
'HTTP_IF_RANGE' => '-2 years',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/octet-stream',
|
||||
'Content-Length' => 13,
|
||||
'Last-Modified' => Sabre_HTTP_Util::toHTTPDate(new DateTime('@' . filemtime($this->tempDir . '/test.txt'))),
|
||||
'ETag' => '"' . md5(file_get_contents(SABRE_TEMPDIR . '/test.txt')) . '"',
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status);
|
||||
$this->assertEquals('Test contents', stream_get_contents($this->response->body));
|
||||
|
||||
}
|
||||
}
|
||||
696
dav/SabreDAV/tests/Sabre/DAV/ServerSimpleTest.php
Normal file
696
dav/SabreDAV/tests/Sabre/DAV/ServerSimpleTest.php
Normal file
|
|
@ -0,0 +1,696 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
require_once 'Sabre/DAV/AbstractServer.php';
|
||||
require_once 'Sabre/DAV/Exception.php';
|
||||
|
||||
class Sabre_DAV_ServerSimpleTest extends Sabre_DAV_AbstractServer{
|
||||
|
||||
function testConstructArray() {
|
||||
|
||||
$nodes = array(
|
||||
new Sabre_DAV_SimpleCollection('hello')
|
||||
);
|
||||
|
||||
$server = new Sabre_DAV_Server($nodes);
|
||||
$this->assertEquals($nodes[0], $server->tree->getNodeForPath('hello'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception
|
||||
*/
|
||||
function testConstructIncorrectObj() {
|
||||
|
||||
$nodes = array(
|
||||
new Sabre_DAV_SimpleCollection('hello'),
|
||||
new STDClass(),
|
||||
);
|
||||
|
||||
$server = new Sabre_DAV_Server($nodes);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception
|
||||
*/
|
||||
function testConstructInvalidArg() {
|
||||
|
||||
$server = new Sabre_DAV_Server(1);
|
||||
|
||||
}
|
||||
|
||||
function testGet() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/octet-stream',
|
||||
'Content-Length' => 13,
|
||||
'Last-Modified' => Sabre_HTTP_Util::toHTTPDate(new DateTime('@' . filemtime($this->tempDir . '/test.txt'))),
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status);
|
||||
$this->assertEquals('Test contents', stream_get_contents($this->response->body));
|
||||
|
||||
}
|
||||
|
||||
function testGetDoesntExist() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt_randomblbla',
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
$this->assertEquals('HTTP/1.1 404 Not Found',$this->response->status);
|
||||
|
||||
}
|
||||
|
||||
function testGetDoesntExist2() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt/randomblbla',
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
$this->assertEquals('HTTP/1.1 404 Not Found',$this->response->status);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* This test should have the exact same result as testGet.
|
||||
*
|
||||
* The idea is that double slashes // are converted to single ones /
|
||||
*
|
||||
*/
|
||||
function testGetDoubleSlash() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '//test.txt',
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/octet-stream',
|
||||
'Content-Length' => 13,
|
||||
'Last-Modified' => Sabre_HTTP_Util::toHTTPDate(new DateTime('@' . filemtime($this->tempDir . '/test.txt'))),
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status);
|
||||
$this->assertEquals('Test contents', stream_get_contents($this->response->body));
|
||||
|
||||
}
|
||||
|
||||
|
||||
function testHEAD() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'HEAD',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/octet-stream',
|
||||
'Content-Length' => 13,
|
||||
'Last-Modified' => Sabre_HTTP_Util::toHTTPDate(new DateTime('@' . filemtime($this->tempDir . '/test.txt'))),
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status);
|
||||
$this->assertEquals('', $this->response->body);
|
||||
|
||||
}
|
||||
|
||||
function testPut() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/testput.txt',
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('Testing new file');
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('', $this->response->body);
|
||||
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
|
||||
$this->assertEquals(array(
|
||||
"Content-Length" => "0",
|
||||
), $this->response->headers);
|
||||
|
||||
$this->assertEquals('Testing new file',file_get_contents($this->tempDir . '/testput.txt'));
|
||||
|
||||
}
|
||||
|
||||
function testPutAlreadyExists() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'HTTP_IF_NONE_MATCH' => '*',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('Testing new file');
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 412 Precondition failed',$this->response->status);
|
||||
$this->assertNotEquals('Testing new file',file_get_contents($this->tempDir . '/test.txt'));
|
||||
|
||||
}
|
||||
|
||||
function testPutUpdate() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('Testing updated file');
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('0', $this->response->headers['Content-Length']);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 204 No Content',$this->response->status);
|
||||
$this->assertEquals('', $this->response->body);
|
||||
$this->assertEquals('Testing updated file',file_get_contents($this->tempDir . '/test.txt'));
|
||||
|
||||
}
|
||||
|
||||
function testPutContentRange() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/testput.txt',
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'HTTP_CONTENT_RANGE' => 'bytes/100-200',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('Testing new file');
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 501 Not Implemented',$this->response->status);
|
||||
|
||||
}
|
||||
|
||||
|
||||
function testDelete() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/test.txt',
|
||||
'REQUEST_METHOD' => 'DELETE',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Length' => '0',
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 204 No Content',$this->response->status);
|
||||
$this->assertEquals('', $this->response->body);
|
||||
$this->assertFalse(file_exists($this->tempDir . '/test.txt'));
|
||||
|
||||
}
|
||||
|
||||
function testDeleteDirectory() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/testcol',
|
||||
'REQUEST_METHOD' => 'DELETE',
|
||||
);
|
||||
|
||||
mkdir($this->tempDir.'/testcol');
|
||||
file_put_contents($this->tempDir.'/testcol/test.txt','Hi! I\'m a file with a short lifespan');
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Length' => '0',
|
||||
),$this->response->headers);
|
||||
$this->assertEquals('HTTP/1.1 204 No Content',$this->response->status);
|
||||
$this->assertEquals('', $this->response->body);
|
||||
$this->assertFalse(file_exists($this->tempDir . '/col'));
|
||||
|
||||
}
|
||||
|
||||
function testOptions() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/',
|
||||
'REQUEST_METHOD' => 'OPTIONS',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'DAV' => '1, 3, extended-mkcol',
|
||||
'MS-Author-Via' => 'DAV',
|
||||
'Allow' => 'OPTIONS, GET, HEAD, DELETE, PROPFIND, PUT, PROPPATCH, COPY, MOVE, REPORT',
|
||||
'Accept-Ranges' => 'bytes',
|
||||
'Content-Length' => '0',
|
||||
'X-Sabre-Version' => Sabre_DAV_Version::VERSION,
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status);
|
||||
$this->assertEquals('', $this->response->body);
|
||||
|
||||
|
||||
}
|
||||
function testNonExistantMethod() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/',
|
||||
'REQUEST_METHOD' => 'BLABLA',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 501 Not Implemented',$this->response->status);
|
||||
|
||||
|
||||
}
|
||||
|
||||
function testGETOnCollection() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/',
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 501 Not Implemented',$this->response->status);
|
||||
|
||||
}
|
||||
|
||||
function testHEADOnCollection() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/',
|
||||
'REQUEST_METHOD' => 'HEAD',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status);
|
||||
|
||||
}
|
||||
|
||||
function testBaseUri() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/blabla/test.txt',
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->setBaseUri('/blabla/');
|
||||
$this->assertEquals('/blabla/',$this->server->getBaseUri());
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/octet-stream',
|
||||
'Content-Length' => 13,
|
||||
'Last-Modified' => Sabre_HTTP_Util::toHTTPDate(new DateTime('@' . filemtime($this->tempDir . '/test.txt'))),
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status);
|
||||
$this->assertEquals('Test contents', stream_get_contents($this->response->body));
|
||||
|
||||
}
|
||||
|
||||
function testBaseUriAddSlash() {
|
||||
|
||||
$tests = array(
|
||||
'/' => '/',
|
||||
'/foo' => '/foo/',
|
||||
'/foo/' => '/foo/',
|
||||
'/foo/bar' => '/foo/bar/',
|
||||
'/foo/bar/' => '/foo/bar/',
|
||||
);
|
||||
|
||||
foreach($tests as $test=>$result) {
|
||||
$this->server->setBaseUri($test);
|
||||
|
||||
$this->assertEquals($result, $this->server->getBaseUri());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function testCalculateUri() {
|
||||
|
||||
$uris = array(
|
||||
'http://www.example.org/root/somepath',
|
||||
'/root/somepath',
|
||||
'/root/somepath/',
|
||||
);
|
||||
|
||||
$this->server->setBaseUri('/root/');
|
||||
|
||||
foreach($uris as $uri) {
|
||||
|
||||
$this->assertEquals('somepath',$this->server->calculateUri($uri));
|
||||
|
||||
}
|
||||
|
||||
$this->server->setBaseUri('/root');
|
||||
|
||||
foreach($uris as $uri) {
|
||||
|
||||
$this->assertEquals('somepath',$this->server->calculateUri($uri));
|
||||
|
||||
}
|
||||
|
||||
$this->assertEquals('', $this->server->calculateUri('/root'));
|
||||
|
||||
}
|
||||
|
||||
function testCalculateUriSpecialChars() {
|
||||
|
||||
$uris = array(
|
||||
'http://www.example.org/root/%C3%A0fo%C3%B3',
|
||||
'/root/%C3%A0fo%C3%B3',
|
||||
'/root/%C3%A0fo%C3%B3/'
|
||||
);
|
||||
|
||||
$this->server->setBaseUri('/root/');
|
||||
|
||||
foreach($uris as $uri) {
|
||||
|
||||
$this->assertEquals("\xc3\xa0fo\xc3\xb3",$this->server->calculateUri($uri));
|
||||
|
||||
}
|
||||
|
||||
$this->server->setBaseUri('/root');
|
||||
|
||||
foreach($uris as $uri) {
|
||||
|
||||
$this->assertEquals("\xc3\xa0fo\xc3\xb3",$this->server->calculateUri($uri));
|
||||
|
||||
}
|
||||
|
||||
$this->server->setBaseUri('/');
|
||||
|
||||
foreach($uris as $uri) {
|
||||
|
||||
$this->assertEquals("root/\xc3\xa0fo\xc3\xb3",$this->server->calculateUri($uri));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function testBaseUriCheck() {
|
||||
|
||||
$uris = array(
|
||||
'http://www.example.org/root/somepath',
|
||||
'/root/somepath',
|
||||
'/root/somepath/'
|
||||
);
|
||||
|
||||
try {
|
||||
|
||||
$this->server->setBaseUri('root/');
|
||||
$this->server->calculateUri('/root/testuri');
|
||||
|
||||
$this->fail('Expected an exception');
|
||||
|
||||
} catch (Sabre_DAV_Exception_Forbidden $e) {
|
||||
|
||||
// This was expected
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Sabre_DAV_Server::guessBaseUri
|
||||
*/
|
||||
function testGuessBaseUri() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/index.php/root',
|
||||
'PATH_INFO' => '/root',
|
||||
);
|
||||
|
||||
$httpRequest = new Sabre_HTTP_Request($serverVars);
|
||||
$server = new Sabre_DAV_Server();
|
||||
$server->httpRequest = $httpRequest;
|
||||
|
||||
$this->assertEquals('/index.php/', $server->guessBaseUri());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testGuessBaseUri
|
||||
* @covers Sabre_DAV_Server::guessBaseUri
|
||||
*/
|
||||
function testGuessBaseUriPercentEncoding() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/index.php/dir/path2/path%20with%20spaces',
|
||||
'PATH_INFO' => '/dir/path2/path with spaces',
|
||||
);
|
||||
|
||||
$httpRequest = new Sabre_HTTP_Request($serverVars);
|
||||
$server = new Sabre_DAV_Server();
|
||||
$server->httpRequest = $httpRequest;
|
||||
|
||||
$this->assertEquals('/index.php/', $server->guessBaseUri());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testGuessBaseUri
|
||||
* @covers Sabre_DAV_Server::guessBaseUri
|
||||
*/
|
||||
/*
|
||||
function testGuessBaseUriPercentEncoding2() {
|
||||
|
||||
$this->markTestIncomplete('This behaviour is not yet implemented');
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/some%20directory+mixed/index.php/dir/path2/path%20with%20spaces',
|
||||
'PATH_INFO' => '/dir/path2/path with spaces',
|
||||
);
|
||||
|
||||
$httpRequest = new Sabre_HTTP_Request($serverVars);
|
||||
$server = new Sabre_DAV_Server();
|
||||
$server->httpRequest = $httpRequest;
|
||||
|
||||
$this->assertEquals('/some%20directory+mixed/index.php/', $server->guessBaseUri());
|
||||
|
||||
}*/
|
||||
|
||||
function testGuessBaseUri2() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/index.php/root/',
|
||||
'PATH_INFO' => '/root/',
|
||||
);
|
||||
|
||||
$httpRequest = new Sabre_HTTP_Request($serverVars);
|
||||
$server = new Sabre_DAV_Server();
|
||||
$server->httpRequest = $httpRequest;
|
||||
|
||||
$this->assertEquals('/index.php/', $server->guessBaseUri());
|
||||
|
||||
}
|
||||
|
||||
function testGuessBaseUriNoPathInfo() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/index.php/root',
|
||||
);
|
||||
|
||||
$httpRequest = new Sabre_HTTP_Request($serverVars);
|
||||
$server = new Sabre_DAV_Server();
|
||||
$server->httpRequest = $httpRequest;
|
||||
|
||||
$this->assertEquals('/', $server->guessBaseUri());
|
||||
|
||||
}
|
||||
|
||||
function testGuessBaseUriNoPathInfo2() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/a/b/c/test.php',
|
||||
);
|
||||
|
||||
$httpRequest = new Sabre_HTTP_Request($serverVars);
|
||||
$server = new Sabre_DAV_Server();
|
||||
$server->httpRequest = $httpRequest;
|
||||
|
||||
$this->assertEquals('/', $server->guessBaseUri());
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @covers Sabre_DAV_Server::guessBaseUri
|
||||
* @depends testGuessBaseUri
|
||||
*/
|
||||
function testGuessBaseUriQueryString() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/index.php/root?query_string=blabla',
|
||||
'PATH_INFO' => '/root',
|
||||
);
|
||||
|
||||
$httpRequest = new Sabre_HTTP_Request($serverVars);
|
||||
$server = new Sabre_DAV_Server();
|
||||
$server->httpRequest = $httpRequest;
|
||||
|
||||
$this->assertEquals('/index.php/', $server->guessBaseUri());
|
||||
|
||||
}
|
||||
|
||||
function testTriggerException() {
|
||||
|
||||
$this->server->subscribeEvent('beforeMethod',array($this,'exceptionTrigger'));
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 500 Internal Server Error',$this->response->status);
|
||||
|
||||
}
|
||||
|
||||
function exceptionTrigger() {
|
||||
|
||||
throw new Sabre_DAV_Exception('Hola');
|
||||
|
||||
}
|
||||
|
||||
function testReportNotFound() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/',
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->httpRequest->setBody('<?xml version="1.0"?><bla:myreport xmlns:bla="http://www.rooftopsolutions.nl/NS"></bla:myreport>');
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 501 Not Implemented',$this->response->status,'We got an incorrect status back. Full response body follows: ' . $this->response->body);
|
||||
|
||||
}
|
||||
|
||||
function testReportIntercepted() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/',
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->httpRequest->setBody('<?xml version="1.0"?><bla:myreport xmlns:bla="http://www.rooftopsolutions.nl/NS"></bla:myreport>');
|
||||
$this->server->subscribeEvent('report',array($this,'reportHandler'));
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals(array(
|
||||
'testheader' => 'testvalue',
|
||||
),
|
||||
$this->response->headers
|
||||
);
|
||||
|
||||
$this->assertEquals('HTTP/1.1 418 I\'m a teapot',$this->response->status,'We got an incorrect status back. Full response body follows: ' . $this->response->body);
|
||||
|
||||
}
|
||||
|
||||
function reportHandler($reportName) {
|
||||
|
||||
if ($reportName=='{http://www.rooftopsolutions.nl/NS}myreport') {
|
||||
$this->server->httpResponse->sendStatus(418);
|
||||
$this->server->httpResponse->setHeader('testheader','testvalue');
|
||||
return false;
|
||||
}
|
||||
else return;
|
||||
|
||||
}
|
||||
|
||||
function testGetPropertiesForChildren() {
|
||||
|
||||
$result = $this->server->getPropertiesForChildren('',array(
|
||||
'{DAV:}getcontentlength',
|
||||
));
|
||||
|
||||
$expected = array(
|
||||
'test.txt' => array('{DAV:}getcontentlength' => 13),
|
||||
'dir/' => array(),
|
||||
);
|
||||
|
||||
$this->assertEquals($expected,$result);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
127
dav/SabreDAV/tests/Sabre/DAV/ServerUpdatePropertiesTest.php
Normal file
127
dav/SabreDAV/tests/Sabre/DAV/ServerUpdatePropertiesTest.php
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAV_ServerUpdatePropertiesTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testUpdatePropertiesFail() {
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAV_SimpleCollection('foo'),
|
||||
);
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
|
||||
$result = $server->updateProperties('foo', array(
|
||||
'{DAV:}foo' => 'bar'
|
||||
));
|
||||
|
||||
$expected = array(
|
||||
'href' => 'foo',
|
||||
'403' => array(
|
||||
'{DAV:}foo' => null,
|
||||
),
|
||||
);
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
}
|
||||
|
||||
function testUpdatePropertiesProtected() {
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAV_SimpleCollection('foo'),
|
||||
);
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
|
||||
$result = $server->updateProperties('foo', array(
|
||||
'{DAV:}getetag' => 'bla',
|
||||
'{DAV:}foo' => 'bar'
|
||||
));
|
||||
|
||||
$expected = array(
|
||||
'href' => 'foo',
|
||||
'403' => array(
|
||||
'{DAV:}getetag' => null,
|
||||
),
|
||||
'424' => array(
|
||||
'{DAV:}foo' => null,
|
||||
),
|
||||
);
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
}
|
||||
|
||||
function testUpdatePropertiesEventFail() {
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAV_SimpleCollection('foo'),
|
||||
);
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->subscribeEvent('updateProperties', array($this,'updatepropfail'));
|
||||
|
||||
$result = $server->updateProperties('foo', array(
|
||||
'{DAV:}foo' => 'bar',
|
||||
'{DAV:}foo2' => 'bla',
|
||||
));
|
||||
|
||||
$expected = array(
|
||||
'href' => 'foo',
|
||||
'404' => array(
|
||||
'{DAV:}foo' => null,
|
||||
),
|
||||
'424' => array(
|
||||
'{DAV:}foo2' => null,
|
||||
),
|
||||
);
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
}
|
||||
|
||||
function updatePropFail(&$propertyDelta, &$result, $node) {
|
||||
|
||||
$result[404] = array(
|
||||
'{DAV:}foo' => null,
|
||||
);
|
||||
unset($propertyDelta['{DAV:}foo']);
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
|
||||
function testUpdatePropertiesEventSuccess() {
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAV_SimpleCollection('foo'),
|
||||
);
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->subscribeEvent('updateProperties', array($this,'updatepropsuccess'));
|
||||
|
||||
$result = $server->updateProperties('foo', array(
|
||||
'{DAV:}foo' => 'bar',
|
||||
'{DAV:}foo2' => 'bla',
|
||||
));
|
||||
|
||||
$expected = array(
|
||||
'href' => 'foo',
|
||||
'200' => array(
|
||||
'{DAV:}foo' => null,
|
||||
),
|
||||
'201' => array(
|
||||
'{DAV:}foo2' => null,
|
||||
),
|
||||
);
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
}
|
||||
|
||||
function updatePropSuccess(&$propertyDelta, &$result, $node) {
|
||||
|
||||
$result[200] = array(
|
||||
'{DAV:}foo' => null,
|
||||
);
|
||||
$result[201] = array(
|
||||
'{DAV:}foo2' => null,
|
||||
);
|
||||
unset($propertyDelta['{DAV:}foo']);
|
||||
unset($propertyDelta['{DAV:}foo2']);
|
||||
return;
|
||||
|
||||
}
|
||||
}
|
||||
17
dav/SabreDAV/tests/Sabre/DAV/SimpleFileTest.php
Normal file
17
dav/SabreDAV/tests/Sabre/DAV/SimpleFileTest.php
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAV_SimpleFileTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testAll() {
|
||||
|
||||
$file = new Sabre_DAV_SimpleFile('filename.txt','contents','text/plain');
|
||||
|
||||
$this->assertEquals('filename.txt', $file->getName());
|
||||
$this->assertEquals('contents', $file->get());
|
||||
$this->assertEquals('8', $file->getSize());
|
||||
$this->assertEquals('"' . md5('contents') . '"', $file->getETag());
|
||||
$this->assertEquals('text/plain', $file->getContentType());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
120
dav/SabreDAV/tests/Sabre/DAV/StringUtilTest.php
Normal file
120
dav/SabreDAV/tests/Sabre/DAV/StringUtilTest.php
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAV_StringUtilTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @dataProvider dataset
|
||||
*/
|
||||
function testTextMatch($haystack, $needle, $collation, $matchType, $result) {
|
||||
|
||||
$this->assertEquals($result, Sabre_DAV_StringUtil::textMatch($haystack, $needle, $collation, $matchType));
|
||||
|
||||
}
|
||||
|
||||
function dataset() {
|
||||
|
||||
return array(
|
||||
array('FOOBAR', 'FOO', 'i;octet', 'contains', true),
|
||||
array('FOOBAR', 'foo', 'i;octet', 'contains', false),
|
||||
array('FÖÖBAR', 'FÖÖ', 'i;octet', 'contains', true),
|
||||
array('FÖÖBAR', 'föö', 'i;octet', 'contains', false),
|
||||
array('FOOBAR', 'FOOBAR', 'i;octet', 'equals', true),
|
||||
array('FOOBAR', 'fooBAR', 'i;octet', 'equals', false),
|
||||
array('FOOBAR', 'FOO', 'i;octet', 'starts-with', true),
|
||||
array('FOOBAR', 'foo', 'i;octet', 'starts-with', false),
|
||||
array('FOOBAR', 'BAR', 'i;octet', 'starts-with', false),
|
||||
array('FOOBAR', 'bar', 'i;octet', 'starts-with', false),
|
||||
array('FOOBAR', 'FOO', 'i;octet', 'ends-with', false),
|
||||
array('FOOBAR', 'foo', 'i;octet', 'ends-with', false),
|
||||
array('FOOBAR', 'BAR', 'i;octet', 'ends-with', true),
|
||||
array('FOOBAR', 'bar', 'i;octet', 'ends-with', false),
|
||||
|
||||
array('FOOBAR', 'FOO', 'i;ascii-casemap', 'contains', true),
|
||||
array('FOOBAR', 'foo', 'i;ascii-casemap', 'contains', true),
|
||||
array('FÖÖBAR', 'FÖÖ', 'i;ascii-casemap', 'contains', true),
|
||||
array('FÖÖBAR', 'föö', 'i;ascii-casemap', 'contains', false),
|
||||
array('FOOBAR', 'FOOBAR', 'i;ascii-casemap', 'equals', true),
|
||||
array('FOOBAR', 'fooBAR', 'i;ascii-casemap', 'equals', true),
|
||||
array('FOOBAR', 'FOO', 'i;ascii-casemap', 'starts-with', true),
|
||||
array('FOOBAR', 'foo', 'i;ascii-casemap', 'starts-with', true),
|
||||
array('FOOBAR', 'BAR', 'i;ascii-casemap', 'starts-with', false),
|
||||
array('FOOBAR', 'bar', 'i;ascii-casemap', 'starts-with', false),
|
||||
array('FOOBAR', 'FOO', 'i;ascii-casemap', 'ends-with', false),
|
||||
array('FOOBAR', 'foo', 'i;ascii-casemap', 'ends-with', false),
|
||||
array('FOOBAR', 'BAR', 'i;ascii-casemap', 'ends-with', true),
|
||||
array('FOOBAR', 'bar', 'i;ascii-casemap', 'ends-with', true),
|
||||
|
||||
array('FOOBAR', 'FOO', 'i;unicode-casemap', 'contains', true),
|
||||
array('FOOBAR', 'foo', 'i;unicode-casemap', 'contains', true),
|
||||
array('FÖÖBAR', 'FÖÖ', 'i;unicode-casemap', 'contains', true),
|
||||
array('FÖÖBAR', 'föö', 'i;unicode-casemap', 'contains', true),
|
||||
array('FOOBAR', 'FOOBAR', 'i;unicode-casemap', 'equals', true),
|
||||
array('FOOBAR', 'fooBAR', 'i;unicode-casemap', 'equals', true),
|
||||
array('FOOBAR', 'FOO', 'i;unicode-casemap', 'starts-with', true),
|
||||
array('FOOBAR', 'foo', 'i;unicode-casemap', 'starts-with', true),
|
||||
array('FOOBAR', 'BAR', 'i;unicode-casemap', 'starts-with', false),
|
||||
array('FOOBAR', 'bar', 'i;unicode-casemap', 'starts-with', false),
|
||||
array('FOOBAR', 'FOO', 'i;unicode-casemap', 'ends-with', false),
|
||||
array('FOOBAR', 'foo', 'i;unicode-casemap', 'ends-with', false),
|
||||
array('FOOBAR', 'BAR', 'i;unicode-casemap', 'ends-with', true),
|
||||
array('FOOBAR', 'bar', 'i;unicode-casemap', 'ends-with', true),
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_BadRequest
|
||||
*/
|
||||
public function testBadCollation() {
|
||||
|
||||
Sabre_DAV_StringUtil::textMatch('foobar','foo','blabla','contains');
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_BadRequest
|
||||
*/
|
||||
public function testBadMatchType() {
|
||||
|
||||
Sabre_DAV_StringUtil::textMatch('foobar','foo','i;octet','booh');
|
||||
|
||||
}
|
||||
|
||||
public function testEnsureUTF8_ascii() {
|
||||
|
||||
$inputString = "harkema";
|
||||
$outputString = "harkema";
|
||||
|
||||
$this->assertEquals(
|
||||
$outputString,
|
||||
Sabre_DAV_StringUtil::ensureUTF8($inputString)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
public function testEnsureUTF8_latin1() {
|
||||
|
||||
$inputString = "m\xfcnster";
|
||||
$outputString = "münster";
|
||||
|
||||
$this->assertEquals(
|
||||
$outputString,
|
||||
Sabre_DAV_StringUtil::ensureUTF8($inputString)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
public function testEnsureUTF8_utf8() {
|
||||
|
||||
$inputString = "m\xc3\xbcnster";
|
||||
$outputString = "münster";
|
||||
|
||||
$this->assertEquals(
|
||||
$outputString,
|
||||
Sabre_DAV_StringUtil::ensureUTF8($inputString)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
248
dav/SabreDAV/tests/Sabre/DAV/TemporaryFileFilterTest.php
Normal file
248
dav/SabreDAV/tests/Sabre/DAV/TemporaryFileFilterTest.php
Normal file
|
|
@ -0,0 +1,248 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAV_TemporaryFileFilterTest extends Sabre_DAV_AbstractServer {
|
||||
|
||||
function setUp() {
|
||||
|
||||
parent::setUp();
|
||||
$plugin = new Sabre_DAV_TemporaryFileFilterPlugin(SABRE_TEMPDIR . '/tff');
|
||||
$this->server->addPlugin($plugin);
|
||||
|
||||
}
|
||||
|
||||
function testPutNormal() {
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/testput.txt',
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('Testing new file');
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('', $this->response->body);
|
||||
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
|
||||
$this->assertEquals('0', $this->response->headers['Content-Length']);
|
||||
|
||||
$this->assertEquals('Testing new file',file_get_contents(SABRE_TEMPDIR . '/testput.txt'));
|
||||
|
||||
}
|
||||
|
||||
function testPutTemp() {
|
||||
|
||||
// mimicking an OS/X resource fork
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/._testput.txt',
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('Testing new file');
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('', $this->response->body);
|
||||
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
|
||||
$this->assertEquals(array(
|
||||
'X-Sabre-Temp' => 'true',
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertFalse(file_exists(SABRE_TEMPDIR . '/._testput.txt'),'._testput.txt should not exist in the regular file structure.');
|
||||
|
||||
}
|
||||
|
||||
function testPutTempIfNoneMatch() {
|
||||
|
||||
// mimicking an OS/X resource fork
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/._testput.txt',
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'HTTP_IF_NONE_MATCH' => '*',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('Testing new file');
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('', $this->response->body);
|
||||
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
|
||||
$this->assertEquals(array(
|
||||
'X-Sabre-Temp' => 'true',
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertFalse(file_exists(SABRE_TEMPDIR . '/._testput.txt'),'._testput.txt should not exist in the regular file structure.');
|
||||
|
||||
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 412 Precondition failed',$this->response->status);
|
||||
$this->assertEquals(array(
|
||||
'X-Sabre-Temp' => 'true',
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
),$this->response->headers);
|
||||
|
||||
}
|
||||
|
||||
function testPutGet() {
|
||||
|
||||
// mimicking an OS/X resource fork
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/._testput.txt',
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('Testing new file');
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('', $this->response->body);
|
||||
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
|
||||
$this->assertEquals(array(
|
||||
'X-Sabre-Temp' => 'true',
|
||||
),$this->response->headers);
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/._testput.txt',
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$this->response->status);
|
||||
$this->assertEquals(array(
|
||||
'X-Sabre-Temp' => 'true',
|
||||
'Content-Length' => 16,
|
||||
'Content-Type' => 'application/octet-stream',
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertEquals('Testing new file',stream_get_contents($this->response->body));
|
||||
|
||||
}
|
||||
|
||||
function testLockNonExistant() {
|
||||
|
||||
mkdir(SABRE_TEMPDIR . '/locksdir');
|
||||
$locksBackend = new Sabre_DAV_Locks_Backend_FS(SABRE_TEMPDIR . '/locksdir');
|
||||
$locksPlugin = new Sabre_DAV_Locks_Plugin($locksBackend);
|
||||
$this->server->addPlugin($locksPlugin);
|
||||
|
||||
// mimicking an OS/X resource fork
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/._testlock.txt',
|
||||
'REQUEST_METHOD' => 'LOCK',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
|
||||
$request->setBody('<?xml version="1.0"?>
|
||||
<D:lockinfo xmlns:D="DAV:">
|
||||
<D:lockscope><D:exclusive/></D:lockscope>
|
||||
<D:locktype><D:write/></D:locktype>
|
||||
<D:owner>
|
||||
<D:href>http://example.org/~ejw/contact.html</D:href>
|
||||
</D:owner>
|
||||
</D:lockinfo>');
|
||||
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
|
||||
$this->assertEquals('application/xml; charset=utf-8',$this->response->headers['Content-Type']);
|
||||
$this->assertTrue(preg_match('/^<opaquelocktoken:(.*)>$/',$this->response->headers['Lock-Token'])===1,'We did not get a valid Locktoken back (' . $this->response->headers['Lock-Token'] . ')');
|
||||
$this->assertEquals('true',$this->response->headers['X-Sabre-Temp']);
|
||||
|
||||
$this->assertFalse(file_exists(SABRE_TEMPDIR . '/._testlock.txt'),'._testlock.txt should not exist in the regular file structure.');
|
||||
|
||||
}
|
||||
|
||||
function testPutDelete() {
|
||||
|
||||
// mimicking an OS/X resource fork
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/._testput.txt',
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('Testing new file');
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('', $this->response->body);
|
||||
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
|
||||
$this->assertEquals(array(
|
||||
'X-Sabre-Temp' => 'true',
|
||||
),$this->response->headers);
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/._testput.txt',
|
||||
'REQUEST_METHOD' => 'DELETE',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 204 No Content',$this->response->status, "Incorrect status code received. Full body:\n". $this->response->body);
|
||||
$this->assertEquals(array(
|
||||
'X-Sabre-Temp' => 'true',
|
||||
),$this->response->headers);
|
||||
|
||||
$this->assertEquals('',$this->response->body);
|
||||
|
||||
}
|
||||
|
||||
function testPutPropfind() {
|
||||
|
||||
// mimicking an OS/X resource fork
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/._testput.txt',
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('Testing new file');
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('', $this->response->body);
|
||||
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
|
||||
$this->assertEquals(array(
|
||||
'X-Sabre-Temp' => 'true',
|
||||
),$this->response->headers);
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_URI' => '/._testput.txt',
|
||||
'REQUEST_METHOD' => 'PROPFIND',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody('');
|
||||
$this->server->httpRequest = ($request);
|
||||
$this->server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status',$this->response->status,'Incorrect status code returned. Body: ' . $this->response->body);
|
||||
$this->assertEquals(array(
|
||||
'X-Sabre-Temp' => 'true',
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
),$this->response->headers);
|
||||
|
||||
$body = preg_replace("/xmlns(:[A-Za-z0-9_])?=(\"|\')DAV:(\"|\')/","xmlns\\1=\"DAV:\"",$this->response->body);
|
||||
$xml = simplexml_load_string($body);
|
||||
$xml->registerXPathNamespace('d','DAV:');
|
||||
|
||||
list($data) = $xml->xpath('/d:multistatus/d:response/d:href');
|
||||
$this->assertEquals('/._testput.txt',(string)$data,'href element should have been /._testput.txt');
|
||||
|
||||
$data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:resourcetype');
|
||||
$this->assertEquals(1,count($data));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
32
dav/SabreDAV/tests/Sabre/DAV/TestPlugin.php
Normal file
32
dav/SabreDAV/tests/Sabre/DAV/TestPlugin.php
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAV_TestPlugin extends Sabre_DAV_ServerPlugin {
|
||||
|
||||
public $beforeMethod;
|
||||
|
||||
function getFeatures() {
|
||||
|
||||
return array('drinking');
|
||||
|
||||
}
|
||||
|
||||
function getHTTPMethods($uri) {
|
||||
|
||||
return array('BEER','WINE');
|
||||
|
||||
}
|
||||
|
||||
function initialize(Sabre_DAV_Server $server) {
|
||||
|
||||
$server->subscribeEvent('beforeMethod',array($this,'beforeMethod'));
|
||||
|
||||
}
|
||||
|
||||
function beforeMethod($method) {
|
||||
|
||||
$this->beforeMethod = $method;
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
74
dav/SabreDAV/tests/Sabre/DAV/Tree/FilesystemTest.php
Normal file
74
dav/SabreDAV/tests/Sabre/DAV/Tree/FilesystemTest.php
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @covers Sabre_DAV_Tree
|
||||
* @covers Sabre_DAV_Tree_Filesystem
|
||||
* @covers Sabre_DAV_FS_Node
|
||||
* @covers Sabre_DAV_FS_File
|
||||
* @covers Sabre_DAV_FS_Directory
|
||||
*/
|
||||
class Sabre_DAV_Tree_FilesystemTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function setUp() {
|
||||
|
||||
Sabre_TestUtil::clearTempDir();
|
||||
file_put_contents(SABRE_TEMPDIR. '/file.txt','Body');
|
||||
mkdir(SABRE_TEMPDIR.'/dir');
|
||||
file_put_contents(SABRE_TEMPDIR.'/dir/subfile.txt','Body');
|
||||
|
||||
}
|
||||
|
||||
function tearDown() {
|
||||
|
||||
Sabre_TestUtil::clearTempDir();
|
||||
|
||||
}
|
||||
|
||||
function testGetNodeForPath_File() {
|
||||
|
||||
$fs = new Sabre_DAV_Tree_Filesystem(SABRE_TEMPDIR);
|
||||
$node = $fs->getNodeForPath('file.txt');
|
||||
$this->assertTrue($node instanceof Sabre_DAV_FS_File);
|
||||
|
||||
}
|
||||
|
||||
function testGetNodeForPath_Directory() {
|
||||
|
||||
$fs = new Sabre_DAV_Tree_Filesystem(SABRE_TEMPDIR);
|
||||
$node = $fs->getNodeForPath('dir');
|
||||
$this->assertTrue($node instanceof Sabre_DAV_FS_Directory);
|
||||
$this->assertEquals('dir', $node->getName());
|
||||
$this->assertInternalType('array', $node->getChildren());
|
||||
|
||||
}
|
||||
|
||||
function testCopy() {
|
||||
|
||||
$fs = new Sabre_DAV_Tree_Filesystem(SABRE_TEMPDIR);
|
||||
$fs->copy('file.txt','file2.txt');
|
||||
$this->assertTrue(file_exists(SABRE_TEMPDIR . '/file2.txt'));
|
||||
$this->assertEquals('Body',file_get_contents(SABRE_TEMPDIR . '/file2.txt'));
|
||||
|
||||
}
|
||||
|
||||
function testCopyDir() {
|
||||
|
||||
$fs = new Sabre_DAV_Tree_Filesystem(SABRE_TEMPDIR);
|
||||
$fs->copy('dir','dir2');
|
||||
$this->assertTrue(file_exists(SABRE_TEMPDIR . '/dir2'));
|
||||
$this->assertEquals('Body',file_get_contents(SABRE_TEMPDIR . '/dir2/subfile.txt'));
|
||||
|
||||
}
|
||||
|
||||
function testMove() {
|
||||
|
||||
$fs = new Sabre_DAV_Tree_Filesystem(SABRE_TEMPDIR);
|
||||
$fs->move('file.txt','file2.txt');
|
||||
$this->assertTrue(file_exists(SABRE_TEMPDIR . '/file2.txt'));
|
||||
$this->assertTrue(!file_exists(SABRE_TEMPDIR . '/file.txt'));
|
||||
$this->assertEquals('Body',file_get_contents(SABRE_TEMPDIR . '/file2.txt'));
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
173
dav/SabreDAV/tests/Sabre/DAV/TreeTest.php
Normal file
173
dav/SabreDAV/tests/Sabre/DAV/TreeTest.php
Normal file
|
|
@ -0,0 +1,173 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @covers Sabre_DAV_Tree
|
||||
*/
|
||||
class Sabre_DAV_TreeTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testNodeExists() {
|
||||
|
||||
$tree = new Sabre_DAV_TreeMock();
|
||||
|
||||
$this->assertTrue($tree->nodeExists('hi'));
|
||||
$this->assertFalse($tree->nodeExists('hello'));
|
||||
|
||||
}
|
||||
|
||||
function testCopy() {
|
||||
|
||||
$tree = new Sabre_DAV_TreeMock();
|
||||
$tree->copy('hi','hi2');
|
||||
|
||||
$this->assertArrayHasKey('hi2', $tree->getNodeForPath('')->newDirectories);
|
||||
$this->assertEquals('foobar', $tree->getNodeForPath('hi/file')->get());
|
||||
$this->assertEquals(array('test1'=>'value'), $tree->getNodeForPath('hi/file')->getProperties(array()));
|
||||
|
||||
}
|
||||
|
||||
function testMove() {
|
||||
|
||||
$tree = new Sabre_DAV_TreeMock();
|
||||
$tree->move('hi','hi2');
|
||||
|
||||
$this->assertEquals('hi2', $tree->getNodeForPath('hi')->getName());
|
||||
$this->assertTrue($tree->getNodeForPath('hi')->isRenamed);
|
||||
|
||||
}
|
||||
|
||||
function testDeepMove() {
|
||||
|
||||
$tree = new Sabre_DAV_TreeMock();
|
||||
$tree->move('hi/sub','hi2');
|
||||
|
||||
$this->assertArrayHasKey('hi2', $tree->getNodeForPath('')->newDirectories);
|
||||
$this->assertTrue($tree->getNodeForPath('hi/sub')->isDeleted);
|
||||
|
||||
}
|
||||
|
||||
function testDelete() {
|
||||
|
||||
$tree = new Sabre_DAV_TreeMock();
|
||||
$tree->delete('hi');
|
||||
$this->assertTrue($tree->getNodeForPath('hi')->isDeleted);
|
||||
|
||||
}
|
||||
|
||||
function testGetChildren() {
|
||||
|
||||
$tree = new Sabre_DAV_TreeMock();
|
||||
$children = $tree->getChildren('');
|
||||
$this->assertEquals(1,count($children));
|
||||
$this->assertEquals('hi', $children[0]->getName());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class Sabre_DAV_TreeMock extends Sabre_DAV_Tree {
|
||||
|
||||
private $nodes = array();
|
||||
|
||||
function __construct() {
|
||||
|
||||
$this->nodes['hi/sub'] = new Sabre_DAV_TreeDirectoryTester('sub');
|
||||
$this->nodes['hi/file'] = new Sabre_DAV_TreeFileTester('file');
|
||||
$this->nodes['hi/file']->properties = array('test1' => 'value');
|
||||
$this->nodes['hi/file']->data = 'foobar';
|
||||
$this->nodes['hi'] = new Sabre_DAV_TreeDirectoryTester('hi',array($this->nodes['hi/sub'], $this->nodes['hi/file']));
|
||||
$this->nodes[''] = new Sabre_DAV_TreeDirectoryTester('hi', array($this->nodes['hi']));
|
||||
|
||||
}
|
||||
|
||||
function getNodeForPath($path) {
|
||||
|
||||
if (isset($this->nodes[$path])) return $this->nodes[$path];
|
||||
throw new Sabre_DAV_Exception_NotFound('item not found');
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class Sabre_DAV_TreeDirectoryTester extends Sabre_DAV_SimpleCollection {
|
||||
|
||||
public $newDirectories = array();
|
||||
public $newFiles = array();
|
||||
public $isDeleted = false;
|
||||
public $isRenamed = false;
|
||||
|
||||
function createDirectory($name) {
|
||||
|
||||
$this->newDirectories[$name] = true;
|
||||
|
||||
}
|
||||
|
||||
function createFile($name,$data = null) {
|
||||
|
||||
$this->newFiles[$name] = $data;
|
||||
|
||||
}
|
||||
|
||||
function getChild($name) {
|
||||
|
||||
if (isset($this->newDirectories[$name])) return new Sabre_DAV_TreeDirectoryTester($name);
|
||||
if (isset($this->newFiles[$name])) return new Sabre_DAV_TreeFileTester($name, $this->newFiles[$name]);
|
||||
return parent::getChild($name);
|
||||
|
||||
}
|
||||
|
||||
function delete() {
|
||||
|
||||
$this->isDeleted = true;
|
||||
|
||||
}
|
||||
|
||||
function setName($name) {
|
||||
|
||||
$this->isRenamed = true;
|
||||
$this->name = $name;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class Sabre_DAV_TreeFileTester extends Sabre_DAV_File implements Sabre_DAV_IProperties {
|
||||
|
||||
public $name;
|
||||
public $data;
|
||||
public $properties;
|
||||
|
||||
function __construct($name, $data = null) {
|
||||
|
||||
$this->name = $name;
|
||||
if (is_null($data)) $data = 'bla';
|
||||
$this->data = $data;
|
||||
|
||||
}
|
||||
|
||||
function getName() {
|
||||
|
||||
return $this->name;
|
||||
|
||||
}
|
||||
|
||||
function get() {
|
||||
|
||||
return $this->data;
|
||||
|
||||
}
|
||||
|
||||
function getProperties($properties) {
|
||||
|
||||
return $this->properties;
|
||||
|
||||
}
|
||||
|
||||
function updateProperties($properties) {
|
||||
|
||||
$this->properties = $properties;
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
129
dav/SabreDAV/tests/Sabre/DAV/URLUtilTest.php
Normal file
129
dav/SabreDAV/tests/Sabre/DAV/URLUtilTest.php
Normal file
|
|
@ -0,0 +1,129 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAV_URLUtilTest extends PHPUnit_Framework_TestCase{
|
||||
|
||||
function testEncodePath() {
|
||||
|
||||
$str = '';
|
||||
for($i=0;$i<128;$i++) $str.=chr($i);
|
||||
|
||||
$newStr = Sabre_DAV_URLUtil::encodePath($str);
|
||||
|
||||
$this->assertEquals(
|
||||
'%00%01%02%03%04%05%06%07%08%09%0a%0b%0c%0d%0e%0f'.
|
||||
'%10%11%12%13%14%15%16%17%18%19%1a%1b%1c%1d%1e%1f'.
|
||||
'%20%21%22%23%24%25%26%27()%2a%2b%2c-./'.
|
||||
'0123456789%3a%3b%3c%3d%3e%3f'.
|
||||
'%40ABCDEFGHIJKLMNO' .
|
||||
'PQRSTUVWXYZ%5b%5c%5d%5e_' .
|
||||
'%60abcdefghijklmno' .
|
||||
'pqrstuvwxyz%7b%7c%7d~%7f',
|
||||
$newStr);
|
||||
|
||||
$this->assertEquals($str,Sabre_DAV_URLUtil::decodePath($newStr));
|
||||
|
||||
}
|
||||
|
||||
function testEncodePathSegment() {
|
||||
|
||||
$str = '';
|
||||
for($i=0;$i<128;$i++) $str.=chr($i);
|
||||
|
||||
$newStr = Sabre_DAV_URLUtil::encodePathSegment($str);
|
||||
|
||||
// Note: almost exactly the same as the last test, with the
|
||||
// exception of the encoding of / (ascii code 2f)
|
||||
$this->assertEquals(
|
||||
'%00%01%02%03%04%05%06%07%08%09%0a%0b%0c%0d%0e%0f'.
|
||||
'%10%11%12%13%14%15%16%17%18%19%1a%1b%1c%1d%1e%1f'.
|
||||
'%20%21%22%23%24%25%26%27()%2a%2b%2c-.%2f'.
|
||||
'0123456789%3a%3b%3c%3d%3e%3f'.
|
||||
'%40ABCDEFGHIJKLMNO' .
|
||||
'PQRSTUVWXYZ%5b%5c%5d%5e_' .
|
||||
'%60abcdefghijklmno' .
|
||||
'pqrstuvwxyz%7b%7c%7d~%7f',
|
||||
$newStr);
|
||||
|
||||
$this->assertEquals($str,Sabre_DAV_URLUtil::decodePathSegment($newStr));
|
||||
|
||||
}
|
||||
|
||||
function testDecode() {
|
||||
|
||||
$str = 'Hello%20Test+Test2.txt';
|
||||
$newStr = Sabre_DAV_URLUtil::decodePath($str);
|
||||
$this->assertEquals('Hello Test+Test2.txt',$newStr);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testDecode
|
||||
*/
|
||||
function testDecodeUmlaut() {
|
||||
|
||||
$str = 'Hello%C3%BC.txt';
|
||||
$newStr = Sabre_DAV_URLUtil::decodePath($str);
|
||||
$this->assertEquals("Hello\xC3\xBC.txt",$newStr);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testDecodeUmlaut
|
||||
*/
|
||||
function testDecodeUmlautLatin1() {
|
||||
|
||||
$str = 'Hello%FC.txt';
|
||||
$newStr = Sabre_DAV_URLUtil::decodePath($str);
|
||||
$this->assertEquals("Hello\xC3\xBC.txt",$newStr);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* This testcase was sent by a bug reporter
|
||||
*
|
||||
* @depends testDecode
|
||||
*/
|
||||
function testDecodeAccentsWindows7() {
|
||||
|
||||
$str = '/webdav/%C3%A0fo%C3%B3';
|
||||
$newStr = Sabre_DAV_URLUtil::decodePath($str);
|
||||
$this->assertEquals(strtolower($str),Sabre_DAV_URLUtil::encodePath($newStr));
|
||||
|
||||
}
|
||||
|
||||
function testSplitPath() {
|
||||
|
||||
$strings = array(
|
||||
|
||||
// input // expected result
|
||||
'/foo/bar' => array('/foo','bar'),
|
||||
'/foo/bar/' => array('/foo','bar'),
|
||||
'foo/bar/' => array('foo','bar'),
|
||||
'foo/bar' => array('foo','bar'),
|
||||
'foo/bar/baz' => array('foo/bar','baz'),
|
||||
'foo/bar/baz/' => array('foo/bar','baz'),
|
||||
'foo' => array('','foo'),
|
||||
'foo/' => array('','foo'),
|
||||
'/foo/' => array('','foo'),
|
||||
'/foo' => array('','foo'),
|
||||
'' => array(null,null),
|
||||
|
||||
// UTF-8
|
||||
"/\xC3\xA0fo\xC3\xB3/bar" => array("/\xC3\xA0fo\xC3\xB3",'bar'),
|
||||
"/\xC3\xA0foo/b\xC3\xBCr/" => array("/\xC3\xA0foo","b\xC3\xBCr"),
|
||||
"foo/\xC3\xA0\xC3\xBCr" => array("foo","\xC3\xA0\xC3\xBCr"),
|
||||
|
||||
);
|
||||
|
||||
foreach($strings as $input => $expected) {
|
||||
|
||||
$output = Sabre_DAV_URLUtil::splitPath($input);
|
||||
$this->assertEquals($expected, $output, 'The expected output for \'' . $input . '\' was incorrect');
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
23
dav/SabreDAV/tests/Sabre/DAV/UUIDUtilTest.php
Normal file
23
dav/SabreDAV/tests/Sabre/DAV/UUIDUtilTest.php
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAV_UUIDUtilTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testValidateUUID() {
|
||||
|
||||
$this->assertTrue(
|
||||
Sabre_DAV_UUIDUtil::validateUUID('11111111-2222-3333-4444-555555555555')
|
||||
);
|
||||
$this->assertFalse(
|
||||
Sabre_DAV_UUIDUtil::validateUUID(' 11111111-2222-3333-4444-555555555555')
|
||||
);
|
||||
$this->assertTrue(
|
||||
Sabre_DAV_UUIDUtil::validateUUID('ffffffff-2222-3333-4444-555555555555')
|
||||
);
|
||||
$this->assertFalse(
|
||||
Sabre_DAV_UUIDUtil::validateUUID('fffffffg-2222-3333-4444-555555555555')
|
||||
);
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
228
dav/SabreDAV/tests/Sabre/DAV/XMLUtilTest.php
Normal file
228
dav/SabreDAV/tests/Sabre/DAV/XMLUtilTest.php
Normal file
|
|
@ -0,0 +1,228 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAV_XMLUtilTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testToClarkNotation() {
|
||||
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML('<?xml version="1.0"?><test1 xmlns="http://www.example.org/">Testdoc</test1>');
|
||||
|
||||
$this->assertEquals(
|
||||
'{http://www.example.org/}test1',
|
||||
Sabre_DAV_XMLUtil::toClarkNotation($dom->firstChild)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function testToClarkNotation2() {
|
||||
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML('<?xml version="1.0"?><s:test1 xmlns:s="http://www.example.org/">Testdoc</s:test1>');
|
||||
|
||||
$this->assertEquals(
|
||||
'{http://www.example.org/}test1',
|
||||
Sabre_DAV_XMLUtil::toClarkNotation($dom->firstChild)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function testToClarkNotationDAVNamespace() {
|
||||
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML('<?xml version="1.0"?><s:test1 xmlns:s="DAV:">Testdoc</s:test1>');
|
||||
|
||||
$this->assertEquals(
|
||||
'{DAV:}test1',
|
||||
Sabre_DAV_XMLUtil::toClarkNotation($dom->firstChild)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function testToClarkNotationNoElem() {
|
||||
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML('<?xml version="1.0"?><s:test1 xmlns:s="DAV:">Testdoc</s:test1>');
|
||||
|
||||
$this->assertNull(
|
||||
Sabre_DAV_XMLUtil::toClarkNotation($dom->firstChild->firstChild)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function testLoadDOMDocument() {
|
||||
|
||||
$xml='<?xml version="1.0"?><document></document>';
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
|
||||
$this->assertTrue($dom instanceof DOMDocument);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testLoadDOMDocument
|
||||
* @expectedException Sabre_DAV_Exception_BadRequest
|
||||
*/
|
||||
function testLoadDOMDocumentEmpty() {
|
||||
|
||||
Sabre_DAV_XMLUtil::loadDOMDocument('');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_BadRequest
|
||||
*/
|
||||
function testLoadDOMDocumentInvalid() {
|
||||
|
||||
$xml='<?xml version="1.0"?><document></docu';
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testLoadDOMDocument
|
||||
*/
|
||||
function testLoadDOMDocumentUTF16() {
|
||||
|
||||
$xml='<?xml version="1.0" encoding="UTF-16"?><root xmlns="DAV:">blabla</root>';
|
||||
$xml = iconv('UTF-8','UTF-16LE',$xml);
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
|
||||
$this->assertEquals('blabla',$dom->firstChild->nodeValue);
|
||||
|
||||
}
|
||||
|
||||
|
||||
function testParseProperties() {
|
||||
|
||||
$xml='<?xml version="1.0"?>
|
||||
<root xmlns="DAV:">
|
||||
<prop>
|
||||
<displayname>Calendars</displayname>
|
||||
</prop>
|
||||
</root>';
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
|
||||
$properties = Sabre_DAV_XMLUtil::parseProperties($dom->firstChild);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'{DAV:}displayname' => 'Calendars',
|
||||
), $properties);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testParseProperties
|
||||
*/
|
||||
function testParsePropertiesEmpty() {
|
||||
|
||||
$xml='<?xml version="1.0"?>
|
||||
<root xmlns="DAV:" xmlns:s="http://www.rooftopsolutions.nl/example">
|
||||
<prop>
|
||||
<displayname>Calendars</displayname>
|
||||
</prop>
|
||||
<prop>
|
||||
<s:example />
|
||||
</prop>
|
||||
</root>';
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
|
||||
$properties = Sabre_DAV_XMLUtil::parseProperties($dom->firstChild);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'{DAV:}displayname' => 'Calendars',
|
||||
'{http://www.rooftopsolutions.nl/example}example' => null
|
||||
), $properties);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @depends testParseProperties
|
||||
*/
|
||||
function testParsePropertiesComplex() {
|
||||
|
||||
$xml='<?xml version="1.0"?>
|
||||
<root xmlns="DAV:">
|
||||
<prop>
|
||||
<displayname>Calendars</displayname>
|
||||
</prop>
|
||||
<prop>
|
||||
<someprop>Complex value <b>right here</b></someprop>
|
||||
</prop>
|
||||
</root>';
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
|
||||
$properties = Sabre_DAV_XMLUtil::parseProperties($dom->firstChild);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'{DAV:}displayname' => 'Calendars',
|
||||
'{DAV:}someprop' => 'Complex value right here',
|
||||
), $properties);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @depends testParseProperties
|
||||
*/
|
||||
function testParsePropertiesNoProperties() {
|
||||
|
||||
$xml='<?xml version="1.0"?>
|
||||
<root xmlns="DAV:">
|
||||
<prop>
|
||||
</prop>
|
||||
</root>';
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
|
||||
$properties = Sabre_DAV_XMLUtil::parseProperties($dom->firstChild);
|
||||
|
||||
$this->assertEquals(array(), $properties);
|
||||
|
||||
}
|
||||
|
||||
function testParsePropertiesMapHref() {
|
||||
|
||||
$xml='<?xml version="1.0"?>
|
||||
<root xmlns="DAV:">
|
||||
<prop>
|
||||
<displayname>Calendars</displayname>
|
||||
</prop>
|
||||
<prop>
|
||||
<someprop><href>http://sabredav.org/</href></someprop>
|
||||
</prop>
|
||||
</root>';
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
|
||||
$properties = Sabre_DAV_XMLUtil::parseProperties($dom->firstChild,array('{DAV:}someprop'=>'Sabre_DAV_Property_Href'));
|
||||
|
||||
$this->assertEquals(array(
|
||||
'{DAV:}displayname' => 'Calendars',
|
||||
'{DAV:}someprop' => new Sabre_DAV_Property_Href('http://sabredav.org/',false),
|
||||
), $properties);
|
||||
|
||||
}
|
||||
|
||||
function testParseClarkNotation() {
|
||||
|
||||
$this->assertEquals(array(
|
||||
'DAV:',
|
||||
'foo',
|
||||
), Sabre_DAV_XMLUtil::parseClarkNotation('{DAV:}foo'));
|
||||
|
||||
$this->assertEquals(array(
|
||||
'http://example.org/ns/bla',
|
||||
'bar-soap',
|
||||
), Sabre_DAV_XMLUtil::parseClarkNotation('{http://example.org/ns/bla}bar-soap'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException InvalidArgumentException
|
||||
*/
|
||||
function testParseClarkNotationFail() {
|
||||
|
||||
Sabre_DAV_XMLUtil::parseClarkNotation('}foo');
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
326
dav/SabreDAV/tests/Sabre/DAVACL/ACLMethodTest.php
Normal file
326
dav/SabreDAV/tests/Sabre/DAVACL/ACLMethodTest.php
Normal file
|
|
@ -0,0 +1,326 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAVACL_ACLMethodTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_BadRequest
|
||||
*/
|
||||
function testCallback() {
|
||||
|
||||
$acl = new Sabre_DAVACL_Plugin();
|
||||
$server = new Sabre_DAV_Server();
|
||||
$server->addPlugin($acl);
|
||||
|
||||
$acl->unknownMethod('ACL','test');
|
||||
|
||||
}
|
||||
|
||||
function testCallbackPassthru() {
|
||||
|
||||
$acl = new Sabre_DAVACL_Plugin();
|
||||
$server = new Sabre_DAV_Server();
|
||||
$server->addPlugin($acl);
|
||||
|
||||
$this->assertNull($acl->unknownMethod('FOO','test'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_MethodNotAllowed
|
||||
*/
|
||||
function testNotSupportedByNode() {
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAV_SimpleCollection('test'),
|
||||
);
|
||||
$acl = new Sabre_DAVACL_Plugin();
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->httpRequest = new Sabre_HTTP_Request();
|
||||
$body = '<?xml version="1.0"?>
|
||||
<d:acl xmlns:d="DAV:">
|
||||
</d:acl>';
|
||||
$server->httpRequest->setBody($body);
|
||||
$server->addPlugin($acl);
|
||||
|
||||
$acl->httpACL('test');
|
||||
|
||||
}
|
||||
|
||||
function testSuccessSimple() {
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAVACL_MockACLNode('test',array()),
|
||||
);
|
||||
$acl = new Sabre_DAVACL_Plugin();
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->httpRequest = new Sabre_HTTP_Request();
|
||||
$body = '<?xml version="1.0"?>
|
||||
<d:acl xmlns:d="DAV:">
|
||||
</d:acl>';
|
||||
$server->httpRequest->setBody($body);
|
||||
$server->addPlugin($acl);
|
||||
|
||||
$this->assertNull($acl->httpACL('test'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAVACL_Exception_NotRecognizedPrincipal
|
||||
*/
|
||||
function testUnrecognizedPrincipal() {
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAVACL_MockACLNode('test',array()),
|
||||
);
|
||||
$acl = new Sabre_DAVACL_Plugin();
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->httpRequest = new Sabre_HTTP_Request();
|
||||
$body = '<?xml version="1.0"?>
|
||||
<d:acl xmlns:d="DAV:">
|
||||
<d:ace>
|
||||
<d:grant><d:privilege><d:read /></d:privilege></d:grant>
|
||||
<d:principal><d:href>/principals/notfound</d:href></d:principal>
|
||||
</d:ace>
|
||||
</d:acl>';
|
||||
$server->httpRequest->setBody($body);
|
||||
$server->addPlugin($acl);
|
||||
|
||||
$acl->httpACL('test');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAVACL_Exception_NotRecognizedPrincipal
|
||||
*/
|
||||
function testUnrecognizedPrincipal2() {
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAVACL_MockACLNode('test',array()),
|
||||
new Sabre_DAV_SimpleCollection('principals',array(
|
||||
new Sabre_DAV_SimpleCollection('notaprincipal'),
|
||||
)),
|
||||
);
|
||||
$acl = new Sabre_DAVACL_Plugin();
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->httpRequest = new Sabre_HTTP_Request();
|
||||
$body = '<?xml version="1.0"?>
|
||||
<d:acl xmlns:d="DAV:">
|
||||
<d:ace>
|
||||
<d:grant><d:privilege><d:read /></d:privilege></d:grant>
|
||||
<d:principal><d:href>/principals/notaprincipal</d:href></d:principal>
|
||||
</d:ace>
|
||||
</d:acl>';
|
||||
$server->httpRequest->setBody($body);
|
||||
$server->addPlugin($acl);
|
||||
|
||||
$acl->httpACL('test');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAVACL_Exception_NotSupportedPrivilege
|
||||
*/
|
||||
function testUnknownPrivilege() {
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAVACL_MockACLNode('test',array()),
|
||||
);
|
||||
$acl = new Sabre_DAVACL_Plugin();
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->httpRequest = new Sabre_HTTP_Request();
|
||||
$body = '<?xml version="1.0"?>
|
||||
<d:acl xmlns:d="DAV:">
|
||||
<d:ace>
|
||||
<d:grant><d:privilege><d:bananas /></d:privilege></d:grant>
|
||||
<d:principal><d:href>/principals/notfound</d:href></d:principal>
|
||||
</d:ace>
|
||||
</d:acl>';
|
||||
$server->httpRequest->setBody($body);
|
||||
$server->addPlugin($acl);
|
||||
|
||||
$acl->httpACL('test');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAVACL_Exception_NoAbstract
|
||||
*/
|
||||
function testAbstractPrivilege() {
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAVACL_MockACLNode('test',array()),
|
||||
);
|
||||
$acl = new Sabre_DAVACL_Plugin();
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->httpRequest = new Sabre_HTTP_Request();
|
||||
$body = '<?xml version="1.0"?>
|
||||
<d:acl xmlns:d="DAV:">
|
||||
<d:ace>
|
||||
<d:grant><d:privilege><d:read-acl /></d:privilege></d:grant>
|
||||
<d:principal><d:href>/principals/notfound</d:href></d:principal>
|
||||
</d:ace>
|
||||
</d:acl>';
|
||||
$server->httpRequest->setBody($body);
|
||||
$server->addPlugin($acl);
|
||||
|
||||
$acl->httpACL('test');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAVACL_Exception_AceConflict
|
||||
*/
|
||||
function testUpdateProtectedPrivilege() {
|
||||
|
||||
$oldACL = array(
|
||||
array(
|
||||
'principal' => 'principals/notfound',
|
||||
'privilege' => '{DAV:}write',
|
||||
'protected' => true,
|
||||
),
|
||||
);
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAVACL_MockACLNode('test',$oldACL),
|
||||
);
|
||||
$acl = new Sabre_DAVACL_Plugin();
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->httpRequest = new Sabre_HTTP_Request();
|
||||
$body = '<?xml version="1.0"?>
|
||||
<d:acl xmlns:d="DAV:">
|
||||
<d:ace>
|
||||
<d:grant><d:privilege><d:read /></d:privilege></d:grant>
|
||||
<d:principal><d:href>/principals/notfound</d:href></d:principal>
|
||||
</d:ace>
|
||||
</d:acl>';
|
||||
$server->httpRequest->setBody($body);
|
||||
$server->addPlugin($acl);
|
||||
|
||||
$acl->httpACL('test');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAVACL_Exception_AceConflict
|
||||
*/
|
||||
function testUpdateProtectedPrivilege2() {
|
||||
|
||||
$oldACL = array(
|
||||
array(
|
||||
'principal' => 'principals/notfound',
|
||||
'privilege' => '{DAV:}write',
|
||||
'protected' => true,
|
||||
),
|
||||
);
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAVACL_MockACLNode('test',$oldACL),
|
||||
);
|
||||
$acl = new Sabre_DAVACL_Plugin();
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->httpRequest = new Sabre_HTTP_Request();
|
||||
$body = '<?xml version="1.0"?>
|
||||
<d:acl xmlns:d="DAV:">
|
||||
<d:ace>
|
||||
<d:grant><d:privilege><d:write /></d:privilege></d:grant>
|
||||
<d:principal><d:href>/principals/foo</d:href></d:principal>
|
||||
</d:ace>
|
||||
</d:acl>';
|
||||
$server->httpRequest->setBody($body);
|
||||
$server->addPlugin($acl);
|
||||
|
||||
$acl->httpACL('test');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAVACL_Exception_AceConflict
|
||||
*/
|
||||
function testUpdateProtectedPrivilege3() {
|
||||
|
||||
$oldACL = array(
|
||||
array(
|
||||
'principal' => 'principals/notfound',
|
||||
'privilege' => '{DAV:}write',
|
||||
'protected' => true,
|
||||
),
|
||||
);
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAVACL_MockACLNode('test',$oldACL),
|
||||
);
|
||||
$acl = new Sabre_DAVACL_Plugin();
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->httpRequest = new Sabre_HTTP_Request();
|
||||
$body = '<?xml version="1.0"?>
|
||||
<d:acl xmlns:d="DAV:">
|
||||
<d:ace>
|
||||
<d:grant><d:privilege><d:write /></d:privilege></d:grant>
|
||||
<d:principal><d:href>/principals/notfound</d:href></d:principal>
|
||||
</d:ace>
|
||||
</d:acl>';
|
||||
$server->httpRequest->setBody($body);
|
||||
$server->addPlugin($acl);
|
||||
|
||||
$acl->httpACL('test');
|
||||
|
||||
}
|
||||
|
||||
function testSuccessComplex () {
|
||||
|
||||
$oldACL = array(
|
||||
array(
|
||||
'principal' => 'principals/foo',
|
||||
'privilege' => '{DAV:}write',
|
||||
'protected' => true,
|
||||
),
|
||||
array(
|
||||
'principal' => 'principals/bar',
|
||||
'privilege' => '{DAV:}read',
|
||||
),
|
||||
);
|
||||
|
||||
$tree = array(
|
||||
$node = new Sabre_DAVACL_MockACLNode('test',$oldACL),
|
||||
new Sabre_DAV_SimpleCollection('principals', array(
|
||||
new Sabre_DAVACL_MockPrincipal('foo','principals/foo'),
|
||||
new Sabre_DAVACL_MockPrincipal('baz','principals/baz'),
|
||||
)),
|
||||
);
|
||||
$acl = new Sabre_DAVACL_Plugin();
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->httpRequest = new Sabre_HTTP_Request();
|
||||
$body = '<?xml version="1.0"?>
|
||||
<d:acl xmlns:d="DAV:">
|
||||
<d:ace>
|
||||
<d:grant><d:privilege><d:write /></d:privilege></d:grant>
|
||||
<d:principal><d:href>/principals/foo</d:href></d:principal>
|
||||
<d:protected />
|
||||
</d:ace>
|
||||
<d:ace>
|
||||
<d:grant><d:privilege><d:write /></d:privilege></d:grant>
|
||||
<d:principal><d:href>/principals/baz</d:href></d:principal>
|
||||
</d:ace>
|
||||
</d:acl>';
|
||||
$server->httpRequest->setBody($body);
|
||||
$server->addPlugin($acl);
|
||||
|
||||
$this->assertFalse($acl->unknownMethod('ACL','test'));
|
||||
|
||||
$this->assertEquals(array(
|
||||
array(
|
||||
'principal' => 'principals/foo',
|
||||
'privilege' => '{DAV:}write',
|
||||
'protected' => true,
|
||||
),
|
||||
array(
|
||||
'principal' => 'principals/baz',
|
||||
'privilege' => '{DAV:}write',
|
||||
'protected' => false,
|
||||
),
|
||||
), $node->getACL());
|
||||
|
||||
}
|
||||
}
|
||||
134
dav/SabreDAV/tests/Sabre/DAVACL/AllowAccessTest.php
Normal file
134
dav/SabreDAV/tests/Sabre/DAVACL/AllowAccessTest.php
Normal file
|
|
@ -0,0 +1,134 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAVACL_AllowAccessTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @var Sabre_DAV_Server
|
||||
*/
|
||||
protected $server;
|
||||
|
||||
function setUp() {
|
||||
|
||||
$nodes = array(
|
||||
new Sabre_DAV_SimpleCollection('testdir'),
|
||||
);
|
||||
|
||||
$this->server = new Sabre_DAV_Server($nodes);
|
||||
$aclPlugin = new Sabre_DAVACL_Plugin();
|
||||
$aclPlugin->allowAccessToNodesWithoutACL = true;
|
||||
$this->server->addPlugin($aclPlugin);
|
||||
|
||||
}
|
||||
|
||||
function testGet() {
|
||||
|
||||
$this->assertTrue($this->server->broadcastEvent('beforeMethod',array('GET','testdir')));
|
||||
|
||||
}
|
||||
|
||||
function testGetDoesntExist() {
|
||||
|
||||
$r = $this->server->broadcastEvent('beforeMethod',array('GET','foo'));
|
||||
$this->assertTrue($r);
|
||||
|
||||
}
|
||||
|
||||
function testHEAD() {
|
||||
|
||||
$this->assertTrue($this->server->broadcastEvent('beforeMethod',array('HEAD','testdir')));
|
||||
|
||||
}
|
||||
|
||||
function testOPTIONS() {
|
||||
|
||||
$this->assertTrue($this->server->broadcastEvent('beforeMethod',array('OPTIONS','testdir')));
|
||||
|
||||
}
|
||||
|
||||
function testPUT() {
|
||||
|
||||
$this->assertTrue($this->server->broadcastEvent('beforeMethod',array('PUT','testdir')));
|
||||
|
||||
}
|
||||
|
||||
function testACL() {
|
||||
|
||||
$this->assertTrue($this->server->broadcastEvent('beforeMethod',array('ACL','testdir')));
|
||||
|
||||
}
|
||||
|
||||
function testPROPPATCH() {
|
||||
|
||||
$this->assertTrue($this->server->broadcastEvent('beforeMethod',array('PROPPATCH','testdir')));
|
||||
|
||||
}
|
||||
|
||||
function testCOPY() {
|
||||
|
||||
$this->assertTrue($this->server->broadcastEvent('beforeMethod',array('COPY','testdir')));
|
||||
|
||||
}
|
||||
|
||||
function testMOVE() {
|
||||
|
||||
$this->assertTrue($this->server->broadcastEvent('beforeMethod',array('MOVE','testdir')));
|
||||
|
||||
}
|
||||
|
||||
function testLOCK() {
|
||||
|
||||
$this->assertTrue($this->server->broadcastEvent('beforeMethod',array('LOCK','testdir')));
|
||||
|
||||
}
|
||||
|
||||
function testBeforeBind() {
|
||||
|
||||
$this->assertTrue($this->server->broadcastEvent('beforeBind',array('testdir/file')));
|
||||
|
||||
}
|
||||
|
||||
|
||||
function testBeforeUnbind() {
|
||||
|
||||
$this->assertTrue($this->server->broadcastEvent('beforeUnbind',array('testdir')));
|
||||
|
||||
}
|
||||
|
||||
function testAfterGetProperties() {
|
||||
|
||||
$properties = array(
|
||||
'href' => 'foo',
|
||||
'200' => array(
|
||||
'{DAV:}displayname' => 'foo',
|
||||
'{DAV:}getcontentlength' => 500,
|
||||
),
|
||||
'404' => array(
|
||||
'{DAV:}bar' => null,
|
||||
),
|
||||
'403' => array(
|
||||
'{DAV:}owner' => null,
|
||||
),
|
||||
);
|
||||
|
||||
$expected = array(
|
||||
'href' => 'foo',
|
||||
'200' => array(
|
||||
'{DAV:}displayname' => 'foo',
|
||||
'{DAV:}getcontentlength' => 500,
|
||||
),
|
||||
'404' => array(
|
||||
'{DAV:}bar' => null,
|
||||
),
|
||||
'403' => array(
|
||||
'{DAV:}owner' => null,
|
||||
),
|
||||
);
|
||||
|
||||
$r = $this->server->broadcastEvent('afterGetProperties',array('testdir',&$properties));
|
||||
$this->assertTrue($r);
|
||||
|
||||
$this->assertEquals($expected, $properties);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
185
dav/SabreDAV/tests/Sabre/DAVACL/BlockAccessTest.php
Normal file
185
dav/SabreDAV/tests/Sabre/DAVACL/BlockAccessTest.php
Normal file
|
|
@ -0,0 +1,185 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAVACL_BlockAccessTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @var Sabre_DAV_Server
|
||||
*/
|
||||
protected $server;
|
||||
protected $plugin;
|
||||
|
||||
function setUp() {
|
||||
|
||||
$nodes = array(
|
||||
new Sabre_DAV_SimpleCollection('testdir'),
|
||||
);
|
||||
|
||||
$this->server = new Sabre_DAV_Server($nodes);
|
||||
$this->plugin = new Sabre_DAVACL_Plugin();
|
||||
$this->plugin->allowAccessToNodesWithoutACL = false;
|
||||
$this->server->addPlugin($this->plugin);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAVACL_Exception_NeedPrivileges
|
||||
*/
|
||||
function testGet() {
|
||||
|
||||
$this->server->broadcastEvent('beforeMethod',array('GET','testdir'));
|
||||
|
||||
}
|
||||
|
||||
function testGetDoesntExist() {
|
||||
|
||||
$r = $this->server->broadcastEvent('beforeMethod',array('GET','foo'));
|
||||
$this->assertTrue($r);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAVACL_Exception_NeedPrivileges
|
||||
*/
|
||||
function testHEAD() {
|
||||
|
||||
$this->server->broadcastEvent('beforeMethod',array('HEAD','testdir'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAVACL_Exception_NeedPrivileges
|
||||
*/
|
||||
function testOPTIONS() {
|
||||
|
||||
$this->server->broadcastEvent('beforeMethod',array('OPTIONS','testdir'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAVACL_Exception_NeedPrivileges
|
||||
*/
|
||||
function testPUT() {
|
||||
|
||||
$this->server->broadcastEvent('beforeMethod',array('PUT','testdir'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAVACL_Exception_NeedPrivileges
|
||||
*/
|
||||
function testPROPPATCH() {
|
||||
|
||||
$this->server->broadcastEvent('beforeMethod',array('PROPPATCH','testdir'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAVACL_Exception_NeedPrivileges
|
||||
*/
|
||||
function testCOPY() {
|
||||
|
||||
$this->server->broadcastEvent('beforeMethod',array('COPY','testdir'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAVACL_Exception_NeedPrivileges
|
||||
*/
|
||||
function testMOVE() {
|
||||
|
||||
$this->server->broadcastEvent('beforeMethod',array('MOVE','testdir'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAVACL_Exception_NeedPrivileges
|
||||
*/
|
||||
function testACL() {
|
||||
|
||||
$this->server->broadcastEvent('beforeMethod',array('ACL','testdir'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAVACL_Exception_NeedPrivileges
|
||||
*/
|
||||
function testLOCK() {
|
||||
|
||||
$this->server->broadcastEvent('beforeMethod',array('LOCK','testdir'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAVACL_Exception_NeedPrivileges
|
||||
*/
|
||||
function testBeforeBind() {
|
||||
|
||||
$this->server->broadcastEvent('beforeBind',array('testdir/file'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAVACL_Exception_NeedPrivileges
|
||||
*/
|
||||
function testBeforeUnbind() {
|
||||
|
||||
$this->server->broadcastEvent('beforeUnbind',array('testdir'));
|
||||
|
||||
}
|
||||
|
||||
function testBeforeGetProperties() {
|
||||
|
||||
$requestedProperties = array(
|
||||
'{DAV:}displayname',
|
||||
'{DAV:}getcontentlength',
|
||||
'{DAV:}bar',
|
||||
'{DAV:}owner',
|
||||
);
|
||||
$returnedProperties = array();
|
||||
|
||||
$arguments = array(
|
||||
'testdir',
|
||||
new Sabre_DAV_SimpleCollection('testdir'),
|
||||
&$requestedProperties,
|
||||
&$returnedProperties
|
||||
);
|
||||
$r = $this->server->broadcastEvent('beforeGetProperties',$arguments);
|
||||
$this->assertTrue($r);
|
||||
|
||||
$expected = array(
|
||||
'403' => array(
|
||||
'{DAV:}displayname' => null,
|
||||
'{DAV:}getcontentlength' => null,
|
||||
'{DAV:}bar' => null,
|
||||
'{DAV:}owner' => null,
|
||||
),
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $returnedProperties);
|
||||
$this->assertEquals(array(), $requestedProperties);
|
||||
|
||||
}
|
||||
|
||||
function testBeforeGetPropertiesNoListing() {
|
||||
|
||||
$this->plugin->hideNodesFromListings = true;
|
||||
|
||||
$requestedProperties = array(
|
||||
'{DAV:}displayname',
|
||||
'{DAV:}getcontentlength',
|
||||
'{DAV:}bar',
|
||||
'{DAV:}owner',
|
||||
);
|
||||
$returnedProperties = array();
|
||||
|
||||
$arguments = array(
|
||||
'testdir',
|
||||
new Sabre_DAV_SimpleCollection('testdir'),
|
||||
&$requestedProperties,
|
||||
&$returnedProperties
|
||||
);
|
||||
$r = $this->server->broadcastEvent('beforeGetProperties',$arguments);
|
||||
$this->assertFalse($r);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAVACL_Exception_AceConflictTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testSerialize() {
|
||||
|
||||
$ex = new Sabre_DAVACL_Exception_AceConflict('message');
|
||||
|
||||
$server = new Sabre_DAV_Server();
|
||||
$dom = new DOMDocument('1.0','utf-8');
|
||||
$root = $dom->createElementNS('DAV:','d:root');
|
||||
$dom->appendChild($root);
|
||||
|
||||
$ex->serialize($server, $root);
|
||||
|
||||
$xpaths = array(
|
||||
'/d:root' => 1,
|
||||
'/d:root/d:no-ace-conflict' => 1,
|
||||
);
|
||||
|
||||
// Reloading because PHP DOM sucks
|
||||
$dom2 = new DOMDocument('1.0', 'utf-8');
|
||||
$dom2->loadXML($dom->saveXML());
|
||||
|
||||
$dxpath = new DOMXPath($dom2);
|
||||
$dxpath->registerNamespace('d','DAV:');
|
||||
foreach($xpaths as $xpath=>$count) {
|
||||
|
||||
$this->assertEquals($count, $dxpath->query($xpath)->length, 'Looking for : ' . $xpath . ', we could only find ' . $dxpath->query($xpath)->length . ' elements, while we expected ' . $count);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAVACL_Exception_NeedPrivilegesTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testSerialize() {
|
||||
|
||||
$uri = 'foo';
|
||||
$privileges = array(
|
||||
'{DAV:}read',
|
||||
'{DAV:}write',
|
||||
);
|
||||
$ex = new Sabre_DAVACL_Exception_NeedPrivileges($uri, $privileges);
|
||||
|
||||
$server = new Sabre_DAV_Server();
|
||||
$dom = new DOMDocument('1.0','utf-8');
|
||||
$root = $dom->createElementNS('DAV:','d:root');
|
||||
$dom->appendChild($root);
|
||||
|
||||
$ex->serialize($server, $root);
|
||||
|
||||
$xpaths = array(
|
||||
'/d:root' => 1,
|
||||
'/d:root/d:need-privileges' => 1,
|
||||
'/d:root/d:need-privileges/d:resource' => 2,
|
||||
'/d:root/d:need-privileges/d:resource/d:href' => 2,
|
||||
'/d:root/d:need-privileges/d:resource/d:privilege' => 2,
|
||||
'/d:root/d:need-privileges/d:resource/d:privilege/d:read' => 1,
|
||||
'/d:root/d:need-privileges/d:resource/d:privilege/d:write' => 1,
|
||||
);
|
||||
|
||||
// Reloading because PHP DOM sucks
|
||||
$dom2 = new DOMDocument('1.0', 'utf-8');
|
||||
$dom2->loadXML($dom->saveXML());
|
||||
|
||||
$dxpath = new DOMXPath($dom2);
|
||||
$dxpath->registerNamespace('d','DAV:');
|
||||
foreach($xpaths as $xpath=>$count) {
|
||||
|
||||
$this->assertEquals($count, $dxpath->query($xpath)->length, 'Looking for : ' . $xpath . ', we could only find ' . $dxpath->query($xpath)->length . ' elements, while we expected ' . $count);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
35
dav/SabreDAV/tests/Sabre/DAVACL/Exception/NoAbstractTest.php
Normal file
35
dav/SabreDAV/tests/Sabre/DAVACL/Exception/NoAbstractTest.php
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAVACL_Exception_NoAbstractTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testSerialize() {
|
||||
|
||||
$ex = new Sabre_DAVACL_Exception_NoAbstract('message');
|
||||
|
||||
$server = new Sabre_DAV_Server();
|
||||
$dom = new DOMDocument('1.0','utf-8');
|
||||
$root = $dom->createElementNS('DAV:','d:root');
|
||||
$dom->appendChild($root);
|
||||
|
||||
$ex->serialize($server, $root);
|
||||
|
||||
$xpaths = array(
|
||||
'/d:root' => 1,
|
||||
'/d:root/d:no-abstract' => 1,
|
||||
);
|
||||
|
||||
// Reloading because PHP DOM sucks
|
||||
$dom2 = new DOMDocument('1.0', 'utf-8');
|
||||
$dom2->loadXML($dom->saveXML());
|
||||
|
||||
$dxpath = new DOMXPath($dom2);
|
||||
$dxpath->registerNamespace('d','DAV:');
|
||||
foreach($xpaths as $xpath=>$count) {
|
||||
|
||||
$this->assertEquals($count, $dxpath->query($xpath)->length, 'Looking for : ' . $xpath . ', we could only find ' . $dxpath->query($xpath)->length . ' elements, while we expected ' . $count);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAVACL_Exception_NotRecognizedPrincipalTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testSerialize() {
|
||||
|
||||
$ex = new Sabre_DAVACL_Exception_NotRecognizedPrincipal('message');
|
||||
|
||||
$server = new Sabre_DAV_Server();
|
||||
$dom = new DOMDocument('1.0','utf-8');
|
||||
$root = $dom->createElementNS('DAV:','d:root');
|
||||
$dom->appendChild($root);
|
||||
|
||||
$ex->serialize($server, $root);
|
||||
|
||||
$xpaths = array(
|
||||
'/d:root' => 1,
|
||||
'/d:root/d:recognized-principal' => 1,
|
||||
);
|
||||
|
||||
// Reloading because PHP DOM sucks
|
||||
$dom2 = new DOMDocument('1.0', 'utf-8');
|
||||
$dom2->loadXML($dom->saveXML());
|
||||
|
||||
$dxpath = new DOMXPath($dom2);
|
||||
$dxpath->registerNamespace('d','DAV:');
|
||||
foreach($xpaths as $xpath=>$count) {
|
||||
|
||||
$this->assertEquals($count, $dxpath->query($xpath)->length, 'Looking for : ' . $xpath . ', we could only find ' . $dxpath->query($xpath)->length . ' elements, while we expected ' . $count);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAVACL_Exception_NotSupportedPrivilegeTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testSerialize() {
|
||||
|
||||
$ex = new Sabre_DAVACL_Exception_NotSupportedPrivilege('message');
|
||||
|
||||
$server = new Sabre_DAV_Server();
|
||||
$dom = new DOMDocument('1.0','utf-8');
|
||||
$root = $dom->createElementNS('DAV:','d:root');
|
||||
$dom->appendChild($root);
|
||||
|
||||
$ex->serialize($server, $root);
|
||||
|
||||
$xpaths = array(
|
||||
'/d:root' => 1,
|
||||
'/d:root/d:not-supported-privilege' => 1,
|
||||
);
|
||||
|
||||
// Reloading because PHP DOM sucks
|
||||
$dom2 = new DOMDocument('1.0', 'utf-8');
|
||||
$dom2->loadXML($dom->saveXML());
|
||||
|
||||
$dxpath = new DOMXPath($dom2);
|
||||
$dxpath->registerNamespace('d','DAV:');
|
||||
foreach($xpaths as $xpath=>$count) {
|
||||
|
||||
$this->assertEquals($count, $dxpath->query($xpath)->length, 'Looking for : ' . $xpath . ', we could only find ' . $dxpath->query($xpath)->length . ' elements, while we expected ' . $count);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
353
dav/SabreDAV/tests/Sabre/DAVACL/ExpandPropertiesTest.php
Normal file
353
dav/SabreDAV/tests/Sabre/DAVACL/ExpandPropertiesTest.php
Normal file
|
|
@ -0,0 +1,353 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
|
||||
class Sabre_DAVACL_ExpandPropertiesTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function getServer() {
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAVACL_MockPropertyNode('node1', array(
|
||||
'{http://sabredav.org/ns}simple' => 'foo',
|
||||
'{http://sabredav.org/ns}href' => new Sabre_DAV_Property_Href('node2'),
|
||||
'{DAV:}displayname' => 'Node 1',
|
||||
)),
|
||||
new Sabre_DAVACL_MockPropertyNode('node2', array(
|
||||
'{http://sabredav.org/ns}simple' => 'simple',
|
||||
'{http://sabredav.org/ns}hreflist' => new Sabre_DAV_Property_HrefList(array('node1','node3')),
|
||||
'{DAV:}displayname' => 'Node 2',
|
||||
)),
|
||||
new Sabre_DAVACL_MockPropertyNode('node3', array(
|
||||
'{http://sabredav.org/ns}simple' => 'simple',
|
||||
'{DAV:}displayname' => 'Node 3',
|
||||
)),
|
||||
);
|
||||
|
||||
$fakeServer = new Sabre_DAV_Server($tree);
|
||||
$fakeServer->debugExceptions = true;
|
||||
$fakeServer->httpResponse = new Sabre_HTTP_ResponseMock();
|
||||
$plugin = new Sabre_DAVACL_Plugin();
|
||||
$plugin->allowAccessToNodesWithoutACL = true;
|
||||
|
||||
$this->assertTrue($plugin instanceof Sabre_DAVACL_Plugin);
|
||||
$fakeServer->addPlugin($plugin);
|
||||
$this->assertEquals($plugin, $fakeServer->getPlugin('acl'));
|
||||
|
||||
return $fakeServer;
|
||||
|
||||
}
|
||||
|
||||
function testSimple() {
|
||||
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:expand-property xmlns:d="DAV:">
|
||||
<d:property name="displayname" />
|
||||
<d:property name="foo" namespace="http://www.sabredav.org/NS/2010/nonexistant" />
|
||||
<d:property name="simple" namespace="http://sabredav.org/ns" />
|
||||
<d:property name="href" namespace="http://sabredav.org/ns" />
|
||||
</d:expand-property>';
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'HTTP_DEPTH' => '0',
|
||||
'REQUEST_URI' => '/node1',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody($xml);
|
||||
|
||||
$server = $this->getServer();
|
||||
$server->httpRequest = $request;
|
||||
|
||||
$server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status', $server->httpResponse->status,'Incorrect status code received. Full body: ' . $server->httpResponse->body);
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
), $server->httpResponse->headers);
|
||||
|
||||
|
||||
$check = array(
|
||||
'/d:multistatus',
|
||||
'/d:multistatus/d:response' => 1,
|
||||
'/d:multistatus/d:response/d:href' => 1,
|
||||
'/d:multistatus/d:response/d:propstat' => 2,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop' => 2,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/d:displayname' => 1,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:simple' => 1,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:href' => 1,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:href/d:href' => 1,
|
||||
);
|
||||
|
||||
$xml = simplexml_load_string($server->httpResponse->body);
|
||||
$xml->registerXPathNamespace('d','DAV:');
|
||||
$xml->registerXPathNamespace('s','http://sabredav.org/ns');
|
||||
foreach($check as $v1=>$v2) {
|
||||
|
||||
$xpath = is_int($v1)?$v2:$v1;
|
||||
|
||||
$result = $xml->xpath($xpath);
|
||||
|
||||
$count = 1;
|
||||
if (!is_int($v1)) $count = $v2;
|
||||
|
||||
$this->assertEquals($count,count($result), 'we expected ' . $count . ' appearances of ' . $xpath . ' . We found ' . count($result) . '. Full response: ' . $server->httpResponse->body);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSimple
|
||||
*/
|
||||
function testExpand() {
|
||||
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:expand-property xmlns:d="DAV:">
|
||||
<d:property name="href" namespace="http://sabredav.org/ns">
|
||||
<d:property name="displayname" />
|
||||
</d:property>
|
||||
</d:expand-property>';
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'HTTP_DEPTH' => '0',
|
||||
'REQUEST_URI' => '/node1',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody($xml);
|
||||
|
||||
$server = $this->getServer();
|
||||
$server->httpRequest = $request;
|
||||
|
||||
$server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status', $server->httpResponse->status, 'Incorrect response status received. Full response body: ' . $server->httpResponse->body);
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
), $server->httpResponse->headers);
|
||||
|
||||
|
||||
$check = array(
|
||||
'/d:multistatus',
|
||||
'/d:multistatus/d:response' => 1,
|
||||
'/d:multistatus/d:response/d:href' => 1,
|
||||
'/d:multistatus/d:response/d:propstat' => 1,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop' => 1,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:href' => 1,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:href/d:response' => 1,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:href/d:response/d:href' => 1,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:href/d:response/d:propstat' => 1,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:href/d:response/d:propstat/d:prop' => 1,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:href/d:response/d:propstat/d:prop/d:displayname' => 1,
|
||||
);
|
||||
|
||||
$xml = simplexml_load_string($server->httpResponse->body);
|
||||
$xml->registerXPathNamespace('d','DAV:');
|
||||
$xml->registerXPathNamespace('s','http://sabredav.org/ns');
|
||||
foreach($check as $v1=>$v2) {
|
||||
|
||||
$xpath = is_int($v1)?$v2:$v1;
|
||||
|
||||
$result = $xml->xpath($xpath);
|
||||
|
||||
$count = 1;
|
||||
if (!is_int($v1)) $count = $v2;
|
||||
|
||||
$this->assertEquals($count,count($result), 'we expected ' . $count . ' appearances of ' . $xpath . ' . We found ' . count($result));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSimple
|
||||
*/
|
||||
function testExpandHrefList() {
|
||||
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:expand-property xmlns:d="DAV:">
|
||||
<d:property name="hreflist" namespace="http://sabredav.org/ns">
|
||||
<d:property name="displayname" />
|
||||
</d:property>
|
||||
</d:expand-property>';
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'HTTP_DEPTH' => '0',
|
||||
'REQUEST_URI' => '/node2',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody($xml);
|
||||
|
||||
$server = $this->getServer();
|
||||
$server->httpRequest = $request;
|
||||
|
||||
$server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status', $server->httpResponse->status);
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
), $server->httpResponse->headers);
|
||||
|
||||
|
||||
$check = array(
|
||||
'/d:multistatus',
|
||||
'/d:multistatus/d:response' => 1,
|
||||
'/d:multistatus/d:response/d:href' => 1,
|
||||
'/d:multistatus/d:response/d:propstat' => 1,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop' => 1,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:hreflist' => 1,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response' => 2,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:href' => 2,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat' => 2,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop' => 2,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop/d:displayname' => 2,
|
||||
);
|
||||
|
||||
$xml = simplexml_load_string($server->httpResponse->body);
|
||||
$xml->registerXPathNamespace('d','DAV:');
|
||||
$xml->registerXPathNamespace('s','http://sabredav.org/ns');
|
||||
foreach($check as $v1=>$v2) {
|
||||
|
||||
$xpath = is_int($v1)?$v2:$v1;
|
||||
|
||||
$result = $xml->xpath($xpath);
|
||||
|
||||
$count = 1;
|
||||
if (!is_int($v1)) $count = $v2;
|
||||
|
||||
$this->assertEquals($count,count($result), 'we expected ' . $count . ' appearances of ' . $xpath . ' . We found ' . count($result));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testExpand
|
||||
*/
|
||||
function testExpandDeep() {
|
||||
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:expand-property xmlns:d="DAV:">
|
||||
<d:property name="hreflist" namespace="http://sabredav.org/ns">
|
||||
<d:property name="href" namespace="http://sabredav.org/ns">
|
||||
<d:property name="displayname" />
|
||||
</d:property>
|
||||
<d:property name="displayname" />
|
||||
</d:property>
|
||||
</d:expand-property>';
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'HTTP_DEPTH' => '0',
|
||||
'REQUEST_URI' => '/node2',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody($xml);
|
||||
|
||||
$server = $this->getServer();
|
||||
$server->httpRequest = $request;
|
||||
|
||||
$server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status', $server->httpResponse->status);
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
), $server->httpResponse->headers);
|
||||
|
||||
|
||||
$check = array(
|
||||
'/d:multistatus',
|
||||
'/d:multistatus/d:response' => 1,
|
||||
'/d:multistatus/d:response/d:href' => 1,
|
||||
'/d:multistatus/d:response/d:propstat' => 1,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop' => 1,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:hreflist' => 1,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response' => 2,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:href' => 2,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat' => 3,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop' => 3,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop/d:displayname' => 2,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop/s:href' => 2,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop/s:href/d:response' => 1,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop/s:href/d:response/d:href' => 1,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop/s:href/d:response/d:propstat' => 1,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop/s:href/d:response/d:propstat/d:prop' => 1,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop/s:href/d:response/d:propstat/d:prop/d:displayname' => 1,
|
||||
);
|
||||
|
||||
$xml = simplexml_load_string($server->httpResponse->body);
|
||||
$xml->registerXPathNamespace('d','DAV:');
|
||||
$xml->registerXPathNamespace('s','http://sabredav.org/ns');
|
||||
foreach($check as $v1=>$v2) {
|
||||
|
||||
$xpath = is_int($v1)?$v2:$v1;
|
||||
|
||||
$result = $xml->xpath($xpath);
|
||||
|
||||
$count = 1;
|
||||
if (!is_int($v1)) $count = $v2;
|
||||
|
||||
$this->assertEquals($count,count($result), 'we expected ' . $count . ' appearances of ' . $xpath . ' . We found ' . count($result));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
class Sabre_DAVACL_MockPropertyNode implements Sabre_DAV_INode, Sabre_DAV_IProperties {
|
||||
|
||||
function __construct($name, array $properties) {
|
||||
|
||||
$this->name = $name;
|
||||
$this->properties = $properties;
|
||||
|
||||
}
|
||||
|
||||
function getName() {
|
||||
|
||||
return $this->name;
|
||||
|
||||
}
|
||||
|
||||
function getProperties($requestedProperties) {
|
||||
|
||||
$returnedProperties = array();
|
||||
foreach($requestedProperties as $requestedProperty) {
|
||||
if (isset($this->properties[$requestedProperty])) {
|
||||
$returnedProperties[$requestedProperty] =
|
||||
$this->properties[$requestedProperty];
|
||||
}
|
||||
}
|
||||
return $returnedProperties;
|
||||
|
||||
}
|
||||
|
||||
function delete() {
|
||||
|
||||
throw new Sabre_DAV_Exception('Not implemented');
|
||||
|
||||
}
|
||||
|
||||
function setName($name) {
|
||||
|
||||
throw new Sabre_DAV_Exception('Not implemented');
|
||||
|
||||
}
|
||||
|
||||
function getLastModified() {
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
function updateProperties($properties) {
|
||||
|
||||
throw new Sabre_DAV_Exception('Not implemented');
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
51
dav/SabreDAV/tests/Sabre/DAVACL/MockACLNode.php
Normal file
51
dav/SabreDAV/tests/Sabre/DAVACL/MockACLNode.php
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAVACL_MockACLNode extends Sabre_DAV_Node implements Sabre_DAVACL_IACL {
|
||||
|
||||
public $name;
|
||||
public $acl;
|
||||
|
||||
function __construct($name, array $acl = array()) {
|
||||
|
||||
$this->name = $name;
|
||||
$this->acl = $acl;
|
||||
|
||||
}
|
||||
|
||||
function getName() {
|
||||
|
||||
return $this->name;
|
||||
|
||||
}
|
||||
|
||||
function getOwner() {
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
function getGroup() {
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
function getACL() {
|
||||
|
||||
return $this->acl;
|
||||
|
||||
}
|
||||
|
||||
function setACL(array $acl) {
|
||||
|
||||
$this->acl = $acl;
|
||||
|
||||
}
|
||||
|
||||
function getSupportedPrivilegeSet() {
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
61
dav/SabreDAV/tests/Sabre/DAVACL/MockPrincipal.php
Normal file
61
dav/SabreDAV/tests/Sabre/DAVACL/MockPrincipal.php
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAVACL_MockPrincipal extends Sabre_DAV_Node implements Sabre_DAVACL_IPrincipal {
|
||||
|
||||
public $name;
|
||||
public $principalUrl;
|
||||
public $groupMembership = array();
|
||||
public $groupMemberSet = array();
|
||||
|
||||
function __construct($name,$principalUrl,array $groupMembership = array(), array $groupMemberSet = array()) {
|
||||
|
||||
$this->name = $name;
|
||||
$this->principalUrl = $principalUrl;
|
||||
$this->groupMembership = $groupMembership;
|
||||
$this->groupMemberSet = $groupMemberSet;
|
||||
|
||||
}
|
||||
|
||||
function getName() {
|
||||
|
||||
return $this->name;
|
||||
|
||||
}
|
||||
|
||||
function getDisplayName() {
|
||||
|
||||
return $this->getName();
|
||||
|
||||
}
|
||||
|
||||
function getAlternateUriSet() {
|
||||
|
||||
return array();
|
||||
|
||||
}
|
||||
|
||||
function getPrincipalUrl() {
|
||||
|
||||
return $this->principalUrl;
|
||||
|
||||
}
|
||||
|
||||
function getGroupMemberSet() {
|
||||
|
||||
return $this->groupMemberSet;
|
||||
|
||||
}
|
||||
|
||||
function getGroupMemberShip() {
|
||||
|
||||
return $this->groupMembership;
|
||||
|
||||
}
|
||||
|
||||
function setGroupMemberSet(array $groupMemberSet) {
|
||||
|
||||
$this->groupMemberSet = $groupMemberSet;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
182
dav/SabreDAV/tests/Sabre/DAVACL/MockPrincipalBackend.php
Normal file
182
dav/SabreDAV/tests/Sabre/DAVACL/MockPrincipalBackend.php
Normal file
|
|
@ -0,0 +1,182 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAVACL_MockPrincipalBackend implements Sabre_DAVACL_IPrincipalBackend {
|
||||
|
||||
public $groupMembers = array();
|
||||
public $principals;
|
||||
|
||||
function __construct() {
|
||||
|
||||
$this->principals = array(
|
||||
array(
|
||||
'uri' => 'principals/user1',
|
||||
'{DAV:}displayname' => 'User 1',
|
||||
'{http://sabredav.org/ns}email-address' => 'user1.sabredav@sabredav.org',
|
||||
'{http://sabredav.org/ns}vcard-url' => 'addressbooks/user1/book1/vcard1.vcf',
|
||||
),
|
||||
array(
|
||||
'uri' => 'principals/admin',
|
||||
'{DAV:}displayname' => 'Admin',
|
||||
),
|
||||
array(
|
||||
'uri' => 'principals/user2',
|
||||
'{DAV:}displayname' => 'User 2',
|
||||
'{http://sabredav.org/ns}email-address' => 'user2.sabredav@sabredav.org',
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
}
|
||||
|
||||
function getPrincipalsByPrefix($prefix) {
|
||||
|
||||
$prefix = trim($prefix,'/') . '/';
|
||||
$return = array();
|
||||
|
||||
foreach($this->principals as $principal) {
|
||||
|
||||
if (strpos($principal['uri'], $prefix)!==0) continue;
|
||||
|
||||
$return[] = $principal;
|
||||
|
||||
}
|
||||
|
||||
return $return;
|
||||
|
||||
}
|
||||
|
||||
function addPrincipal(array $principal) {
|
||||
|
||||
$this->principals[] = $principal;
|
||||
|
||||
}
|
||||
|
||||
function getPrincipalByPath($path) {
|
||||
|
||||
foreach($this->getPrincipalsByPrefix('principals') as $principal) {
|
||||
if ($principal['uri'] === $path) return $principal;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function searchPrincipals($prefixPath, array $searchProperties) {
|
||||
|
||||
$matches = array();
|
||||
foreach($this->getPrincipalsByPrefix($prefixPath) as $principal) {
|
||||
|
||||
foreach($searchProperties as $key=>$value) {
|
||||
|
||||
if (!isset($principal[$key])) {
|
||||
continue 2;
|
||||
}
|
||||
if (mb_stripos($principal[$key],$value, 0, 'UTF-8')===false) {
|
||||
continue 2;
|
||||
}
|
||||
|
||||
}
|
||||
$matches[] = $principal['uri'];
|
||||
|
||||
}
|
||||
return $matches;
|
||||
|
||||
}
|
||||
|
||||
function getGroupMemberSet($path) {
|
||||
|
||||
return isset($this->groupMembers[$path]) ? $this->groupMembers[$path] : array();
|
||||
|
||||
}
|
||||
|
||||
function getGroupMembership($path) {
|
||||
|
||||
$membership = array();
|
||||
foreach($this->groupMembers as $group=>$members) {
|
||||
if (in_array($path, $members)) $membership[] = $group;
|
||||
}
|
||||
return $membership;
|
||||
|
||||
}
|
||||
|
||||
function setGroupMemberSet($path, array $members) {
|
||||
|
||||
$this->groupMembers[$path] = $members;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates one ore more webdav properties on a principal.
|
||||
*
|
||||
* The list of mutations is supplied as an array. Each key in the array is
|
||||
* a propertyname, such as {DAV:}displayname.
|
||||
*
|
||||
* Each value is the actual value to be updated. If a value is null, it
|
||||
* must be deleted.
|
||||
*
|
||||
* This method should be atomic. It must either completely succeed, or
|
||||
* completely fail. Success and failure can simply be returned as 'true' or
|
||||
* 'false'.
|
||||
*
|
||||
* It is also possible to return detailed failure information. In that case
|
||||
* an array such as this should be returned:
|
||||
*
|
||||
* array(
|
||||
* 200 => array(
|
||||
* '{DAV:}prop1' => null,
|
||||
* ),
|
||||
* 201 => array(
|
||||
* '{DAV:}prop2' => null,
|
||||
* ),
|
||||
* 403 => array(
|
||||
* '{DAV:}prop3' => null,
|
||||
* ),
|
||||
* 424 => array(
|
||||
* '{DAV:}prop4' => null,
|
||||
* ),
|
||||
* );
|
||||
*
|
||||
* In this previous example prop1 was successfully updated or deleted, and
|
||||
* prop2 was succesfully created.
|
||||
*
|
||||
* prop3 failed to update due to '403 Forbidden' and because of this prop4
|
||||
* also could not be updated with '424 Failed dependency'.
|
||||
*
|
||||
* This last example was actually incorrect. While 200 and 201 could appear
|
||||
* in 1 response, if there's any error (403) the other properties should
|
||||
* always fail with 423 (failed dependency).
|
||||
*
|
||||
* But anyway, if you don't want to scratch your head over this, just
|
||||
* return true or false.
|
||||
*
|
||||
* @param string $path
|
||||
* @param array $mutations
|
||||
* @return array|bool
|
||||
*/
|
||||
public function updatePrincipal($path, $mutations) {
|
||||
|
||||
$value = null;
|
||||
foreach($this->principals as $principalIndex=>$value) {
|
||||
if ($value['uri'] === $path) {
|
||||
$principal = $value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$principal) return false;
|
||||
|
||||
foreach($mutations as $prop=>$value) {
|
||||
|
||||
if (is_null($value) && isset($principal[$prop])) {
|
||||
unset($principal[$prop]);
|
||||
} else {
|
||||
$principal[$prop] = $value;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$this->principals[$principalIndex] = $principal;
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
79
dav/SabreDAV/tests/Sabre/DAVACL/PluginAdminTest.php
Normal file
79
dav/SabreDAV/tests/Sabre/DAVACL/PluginAdminTest.php
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/DAVACL/MockACLNode.php';
|
||||
require_once 'Sabre/DAV/Auth/MockBackend.php';
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
require_once 'Sabre/DAVACL/MockPrincipalBackend.php';
|
||||
|
||||
class Sabre_DAVACL_PluginAdminTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testNoAdminAccess() {
|
||||
|
||||
$principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAVACL_MockACLNode('adminonly', array()),
|
||||
new Sabre_DAVACL_PrincipalCollection($principalBackend),
|
||||
);
|
||||
|
||||
$fakeServer = new Sabre_DAV_Server($tree);
|
||||
$plugin = new Sabre_DAV_Auth_Plugin(new Sabre_DAV_Auth_MockBackend(),'realm');
|
||||
$fakeServer->addPlugin($plugin);
|
||||
$plugin = new Sabre_DAVACL_Plugin();
|
||||
$fakeServer->addPlugin($plugin);
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'OPTIONS',
|
||||
'HTTP_DEPTH' => 1,
|
||||
'REQUEST_URI' => '/adminonly',
|
||||
));
|
||||
|
||||
$response = new Sabre_HTTP_ResponseMock();
|
||||
|
||||
$fakeServer->httpRequest = $request;
|
||||
$fakeServer->httpResponse = $response;
|
||||
|
||||
$fakeServer->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 403 Forbidden', $response->status);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testNoAdminAccess
|
||||
*/
|
||||
function testAdminAccess() {
|
||||
|
||||
$principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAVACL_MockACLNode('adminonly', array()),
|
||||
new Sabre_DAVACL_PrincipalCollection($principalBackend),
|
||||
);
|
||||
|
||||
$fakeServer = new Sabre_DAV_Server($tree);
|
||||
$plugin = new Sabre_DAV_Auth_Plugin(new Sabre_DAV_Auth_MockBackend(),'realm');
|
||||
$fakeServer->addPlugin($plugin);
|
||||
$plugin = new Sabre_DAVACL_Plugin();
|
||||
$plugin->adminPrincipals = array(
|
||||
'principals/admin',
|
||||
);
|
||||
$fakeServer->addPlugin($plugin);
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'OPTIONS',
|
||||
'HTTP_DEPTH' => 1,
|
||||
'REQUEST_URI' => '/adminonly',
|
||||
));
|
||||
|
||||
$response = new Sabre_HTTP_ResponseMock();
|
||||
|
||||
$fakeServer->httpRequest = $request;
|
||||
$fakeServer->httpResponse = $response;
|
||||
|
||||
$fakeServer->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK', $response->status);
|
||||
|
||||
}
|
||||
}
|
||||
404
dav/SabreDAV/tests/Sabre/DAVACL/PluginPropertiesTest.php
Normal file
404
dav/SabreDAV/tests/Sabre/DAVACL/PluginPropertiesTest.php
Normal file
|
|
@ -0,0 +1,404 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/DAV/Auth/MockBackend.php';
|
||||
require_once 'Sabre/DAVACL/MockPrincipal.php';
|
||||
|
||||
class Sabre_DAVACL_PluginPropertiesTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testPrincipalCollectionSet() {
|
||||
|
||||
$plugin = new Sabre_DAVACL_Plugin();
|
||||
$plugin->principalCollectionSet = array(
|
||||
'principals1',
|
||||
'principals2',
|
||||
);
|
||||
|
||||
$requestedProperties = array(
|
||||
'{DAV:}principal-collection-set',
|
||||
);
|
||||
|
||||
$returnedProperties = array(
|
||||
200 => array(),
|
||||
404 => array(),
|
||||
);
|
||||
|
||||
$server = new Sabre_DAV_Server();
|
||||
$server->addPlugin($plugin);
|
||||
|
||||
$this->assertNull($plugin->beforeGetProperties('', new Sabre_DAV_SimpleCollection('root'), $requestedProperties, $returnedProperties));
|
||||
|
||||
$this->assertEquals(1,count($returnedProperties[200]));
|
||||
$this->assertArrayHasKey('{DAV:}principal-collection-set',$returnedProperties[200]);
|
||||
$this->assertInstanceOf('Sabre_DAV_Property_HrefList', $returnedProperties[200]['{DAV:}principal-collection-set']);
|
||||
|
||||
$expected = array(
|
||||
'principals1/',
|
||||
'principals2/',
|
||||
);
|
||||
|
||||
|
||||
$this->assertEquals($expected, $returnedProperties[200]['{DAV:}principal-collection-set']->getHrefs());
|
||||
|
||||
|
||||
}
|
||||
|
||||
function testCurrentUserPrincipal() {
|
||||
|
||||
$fakeServer = new Sabre_DAV_Server();
|
||||
$plugin = new Sabre_DAV_Auth_Plugin(new Sabre_DAV_Auth_MockBackend(),'realm');
|
||||
$fakeServer->addPlugin($plugin);
|
||||
$plugin = new Sabre_DAVACL_Plugin();
|
||||
$fakeServer->addPlugin($plugin);
|
||||
|
||||
|
||||
$requestedProperties = array(
|
||||
'{DAV:}current-user-principal',
|
||||
);
|
||||
|
||||
$returnedProperties = array(
|
||||
200 => array(),
|
||||
404 => array(),
|
||||
);
|
||||
|
||||
$this->assertNull($plugin->beforeGetProperties('', new Sabre_DAV_SimpleCollection('root'), $requestedProperties, $returnedProperties));
|
||||
|
||||
$this->assertEquals(1,count($returnedProperties[200]));
|
||||
$this->assertArrayHasKey('{DAV:}current-user-principal',$returnedProperties[200]);
|
||||
$this->assertInstanceOf('Sabre_DAVACL_Property_Principal', $returnedProperties[200]['{DAV:}current-user-principal']);
|
||||
$this->assertEquals(Sabre_DAVACL_Property_Principal::UNAUTHENTICATED, $returnedProperties[200]['{DAV:}current-user-principal']->getType());
|
||||
|
||||
// This will force the login
|
||||
$fakeServer->broadCastEvent('beforeMethod',array('GET',''));
|
||||
|
||||
|
||||
$requestedProperties = array(
|
||||
'{DAV:}current-user-principal',
|
||||
);
|
||||
|
||||
$returnedProperties = array(
|
||||
200 => array(),
|
||||
404 => array(),
|
||||
);
|
||||
|
||||
|
||||
$this->assertNull($plugin->beforeGetProperties('', new Sabre_DAV_SimpleCollection('root'), $requestedProperties, $returnedProperties));
|
||||
|
||||
|
||||
$this->assertEquals(1,count($returnedProperties[200]));
|
||||
$this->assertArrayHasKey('{DAV:}current-user-principal',$returnedProperties[200]);
|
||||
$this->assertInstanceOf('Sabre_DAVACL_Property_Principal', $returnedProperties[200]['{DAV:}current-user-principal']);
|
||||
$this->assertEquals(Sabre_DAVACL_Property_Principal::HREF, $returnedProperties[200]['{DAV:}current-user-principal']->getType());
|
||||
$this->assertEquals('principals/admin/', $returnedProperties[200]['{DAV:}current-user-principal']->getHref());
|
||||
|
||||
}
|
||||
|
||||
function testSupportedPrivilegeSet() {
|
||||
|
||||
$plugin = new Sabre_DAVACL_Plugin();
|
||||
$server = new Sabre_DAV_Server();
|
||||
$server->addPlugin($plugin);
|
||||
|
||||
$requestedProperties = array(
|
||||
'{DAV:}supported-privilege-set',
|
||||
);
|
||||
|
||||
$returnedProperties = array(
|
||||
200 => array(),
|
||||
404 => array(),
|
||||
);
|
||||
|
||||
|
||||
$this->assertNull($plugin->beforeGetProperties('', new Sabre_DAV_SimpleCollection('root'), $requestedProperties, $returnedProperties));
|
||||
|
||||
$this->assertEquals(1,count($returnedProperties[200]));
|
||||
$this->assertArrayHasKey('{DAV:}supported-privilege-set',$returnedProperties[200]);
|
||||
$this->assertInstanceOf('Sabre_DAVACL_Property_SupportedPrivilegeSet', $returnedProperties[200]['{DAV:}supported-privilege-set']);
|
||||
|
||||
$server = new Sabre_DAV_Server();
|
||||
$prop = $returnedProperties[200]['{DAV:}supported-privilege-set'];
|
||||
|
||||
$dom = new DOMDocument('1.0', 'utf-8');
|
||||
$root = $dom->createElement('d:root');
|
||||
$root->setAttribute('xmlns:d','DAV:');
|
||||
$dom->appendChild($root);
|
||||
$prop->serialize($server, $root);
|
||||
|
||||
|
||||
$xpaths = array(
|
||||
'/d:root' => 1,
|
||||
'/d:root/d:supported-privilege' => 1,
|
||||
'/d:root/d:supported-privilege/d:privilege' => 1,
|
||||
'/d:root/d:supported-privilege/d:privilege/d:all' => 1,
|
||||
'/d:root/d:supported-privilege/d:abstract' => 1,
|
||||
'/d:root/d:supported-privilege/d:supported-privilege' => 2,
|
||||
'/d:root/d:supported-privilege/d:supported-privilege/d:privilege' => 2,
|
||||
'/d:root/d:supported-privilege/d:supported-privilege/d:privilege/d:read' => 1,
|
||||
'/d:root/d:supported-privilege/d:supported-privilege/d:privilege/d:write' => 1,
|
||||
'/d:root/d:supported-privilege/d:supported-privilege/d:supported-privilege' => 8,
|
||||
'/d:root/d:supported-privilege/d:supported-privilege/d:supported-privilege/d:privilege' => 8,
|
||||
'/d:root/d:supported-privilege/d:supported-privilege/d:supported-privilege/d:privilege/d:read-acl' => 1,
|
||||
'/d:root/d:supported-privilege/d:supported-privilege/d:supported-privilege/d:privilege/d:read-current-user-privilege-set' => 1,
|
||||
'/d:root/d:supported-privilege/d:supported-privilege/d:supported-privilege/d:privilege/d:write-content' => 1,
|
||||
'/d:root/d:supported-privilege/d:supported-privilege/d:supported-privilege/d:privilege/d:write-properties' => 1,
|
||||
'/d:root/d:supported-privilege/d:supported-privilege/d:supported-privilege/d:privilege/d:write-acl' => 1,
|
||||
'/d:root/d:supported-privilege/d:supported-privilege/d:supported-privilege/d:privilege/d:bind' => 1,
|
||||
'/d:root/d:supported-privilege/d:supported-privilege/d:supported-privilege/d:privilege/d:unbind' => 1,
|
||||
'/d:root/d:supported-privilege/d:supported-privilege/d:supported-privilege/d:privilege/d:unlock' => 1,
|
||||
'/d:root/d:supported-privilege/d:supported-privilege/d:supported-privilege/d:abstract' => 8,
|
||||
);
|
||||
|
||||
|
||||
// reloading because php dom sucks
|
||||
$dom2 = new DOMDocument('1.0', 'utf-8');
|
||||
$dom2->loadXML($dom->saveXML());
|
||||
|
||||
$dxpath = new DOMXPath($dom2);
|
||||
$dxpath->registerNamespace('d','DAV:');
|
||||
foreach($xpaths as $xpath=>$count) {
|
||||
|
||||
$this->assertEquals($count, $dxpath->query($xpath)->length, 'Looking for : ' . $xpath . ', we could only find ' . $dxpath->query($xpath)->length . ' elements, while we expected ' . $count);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function testACL() {
|
||||
|
||||
$plugin = new Sabre_DAVACL_Plugin();
|
||||
|
||||
$nodes = array(
|
||||
new Sabre_DAVACL_MockACLNode('foo', array(
|
||||
array(
|
||||
'principal' => 'principals/admin',
|
||||
'privilege' => '{DAV:}read',
|
||||
)
|
||||
)),
|
||||
new Sabre_DAV_SimpleCollection('principals', array(
|
||||
$principal = new Sabre_DAVACL_MockPrincipal('admin','principals/admin'),
|
||||
)),
|
||||
|
||||
);
|
||||
|
||||
$server = new Sabre_DAV_Server($nodes);
|
||||
$server->addPlugin($plugin);
|
||||
$authPlugin = new Sabre_DAV_Auth_Plugin(new Sabre_DAV_Auth_MockBackend(),'realm');
|
||||
$server->addPlugin($authPlugin);
|
||||
|
||||
// Force login
|
||||
$authPlugin->beforeMethod('BLA','foo');
|
||||
|
||||
$requestedProperties = array(
|
||||
'{DAV:}acl',
|
||||
);
|
||||
|
||||
$returnedProperties = array(
|
||||
200 => array(),
|
||||
404 => array(),
|
||||
);
|
||||
|
||||
|
||||
$this->assertNull($plugin->beforeGetProperties('foo', $nodes[0], $requestedProperties, $returnedProperties));
|
||||
|
||||
$this->assertEquals(1,count($returnedProperties[200]),'The {DAV:}acl property did not return from the list. Full list: ' . print_r($returnedProperties,true));
|
||||
$this->assertArrayHasKey('{DAV:}acl',$returnedProperties[200]);
|
||||
$this->assertInstanceOf('Sabre_DAVACL_Property_ACL', $returnedProperties[200]['{DAV:}acl']);
|
||||
|
||||
}
|
||||
|
||||
function testACLRestrictions() {
|
||||
|
||||
$plugin = new Sabre_DAVACL_Plugin();
|
||||
|
||||
$nodes = array(
|
||||
new Sabre_DAVACL_MockACLNode('foo', array(
|
||||
array(
|
||||
'principal' => 'principals/admin',
|
||||
'privilege' => '{DAV:}read',
|
||||
)
|
||||
)),
|
||||
new Sabre_DAV_SimpleCollection('principals', array(
|
||||
$principal = new Sabre_DAVACL_MockPrincipal('admin','principals/admin'),
|
||||
)),
|
||||
|
||||
);
|
||||
|
||||
$server = new Sabre_DAV_Server($nodes);
|
||||
$server->addPlugin($plugin);
|
||||
$authPlugin = new Sabre_DAV_Auth_Plugin(new Sabre_DAV_Auth_MockBackend(),'realm');
|
||||
$server->addPlugin($authPlugin);
|
||||
|
||||
// Force login
|
||||
$authPlugin->beforeMethod('BLA','foo');
|
||||
|
||||
$requestedProperties = array(
|
||||
'{DAV:}acl-restrictions',
|
||||
);
|
||||
|
||||
$returnedProperties = array(
|
||||
200 => array(),
|
||||
404 => array(),
|
||||
);
|
||||
|
||||
|
||||
$this->assertNull($plugin->beforeGetProperties('foo', $nodes[0], $requestedProperties, $returnedProperties));
|
||||
|
||||
$this->assertEquals(1,count($returnedProperties[200]),'The {DAV:}acl-restrictions property did not return from the list. Full list: ' . print_r($returnedProperties,true));
|
||||
$this->assertArrayHasKey('{DAV:}acl-restrictions',$returnedProperties[200]);
|
||||
$this->assertInstanceOf('Sabre_DAVACL_Property_ACLRestrictions', $returnedProperties[200]['{DAV:}acl-restrictions']);
|
||||
|
||||
}
|
||||
|
||||
function testAlternateUriSet() {
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAV_SimpleCollection('principals', array(
|
||||
$principal = new Sabre_DAVACL_MockPrincipal('user','principals/user'),
|
||||
)),
|
||||
);
|
||||
|
||||
$fakeServer = new Sabre_DAV_Server($tree);
|
||||
//$plugin = new Sabre_DAV_Auth_Plugin(new Sabre_DAV_Auth_MockBackend(),'realm');
|
||||
//$fakeServer->addPlugin($plugin);
|
||||
$plugin = new Sabre_DAVACL_Plugin();
|
||||
$fakeServer->addPlugin($plugin);
|
||||
|
||||
$requestedProperties = array(
|
||||
'{DAV:}alternate-URI-set',
|
||||
);
|
||||
$returnedProperties = array();
|
||||
|
||||
$result = $plugin->beforeGetProperties('principals/user',$principal,$requestedProperties,$returnedProperties);
|
||||
|
||||
$this->assertNull($result);
|
||||
|
||||
$this->assertTrue(isset($returnedProperties[200]));
|
||||
$this->assertTrue(isset($returnedProperties[200]['{DAV:}alternate-URI-set']));
|
||||
$this->assertInstanceOf('Sabre_DAV_Property_HrefList', $returnedProperties[200]['{DAV:}alternate-URI-set']);
|
||||
|
||||
$this->assertEquals(array(), $returnedProperties[200]['{DAV:}alternate-URI-set']->getHrefs());
|
||||
|
||||
}
|
||||
|
||||
function testPrincipalURL() {
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAV_SimpleCollection('principals', array(
|
||||
$principal = new Sabre_DAVACL_MockPrincipal('user','principals/user'),
|
||||
)),
|
||||
);
|
||||
|
||||
$fakeServer = new Sabre_DAV_Server($tree);
|
||||
//$plugin = new Sabre_DAV_Auth_Plugin(new Sabre_DAV_Auth_MockBackend(),'realm');
|
||||
//$fakeServer->addPlugin($plugin);
|
||||
$plugin = new Sabre_DAVACL_Plugin();
|
||||
$fakeServer->addPlugin($plugin);
|
||||
|
||||
$requestedProperties = array(
|
||||
'{DAV:}principal-URL',
|
||||
);
|
||||
$returnedProperties = array();
|
||||
|
||||
$result = $plugin->beforeGetProperties('principals/user',$principal,$requestedProperties,$returnedProperties);
|
||||
|
||||
$this->assertNull($result);
|
||||
|
||||
$this->assertTrue(isset($returnedProperties[200]));
|
||||
$this->assertTrue(isset($returnedProperties[200]['{DAV:}principal-URL']));
|
||||
$this->assertInstanceOf('Sabre_DAV_Property_Href', $returnedProperties[200]['{DAV:}principal-URL']);
|
||||
|
||||
$this->assertEquals('principals/user/', $returnedProperties[200]['{DAV:}principal-URL']->getHref());
|
||||
|
||||
}
|
||||
|
||||
function testGroupMemberSet() {
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAV_SimpleCollection('principals', array(
|
||||
$principal = new Sabre_DAVACL_MockPrincipal('user','principals/user'),
|
||||
)),
|
||||
);
|
||||
|
||||
$fakeServer = new Sabre_DAV_Server($tree);
|
||||
//$plugin = new Sabre_DAV_Auth_Plugin(new Sabre_DAV_Auth_MockBackend(),'realm');
|
||||
//$fakeServer->addPlugin($plugin);
|
||||
$plugin = new Sabre_DAVACL_Plugin();
|
||||
$fakeServer->addPlugin($plugin);
|
||||
|
||||
$requestedProperties = array(
|
||||
'{DAV:}group-member-set',
|
||||
);
|
||||
$returnedProperties = array();
|
||||
|
||||
$result = $plugin->beforeGetProperties('principals/user',$principal,$requestedProperties,$returnedProperties);
|
||||
|
||||
$this->assertNull($result);
|
||||
|
||||
$this->assertTrue(isset($returnedProperties[200]));
|
||||
$this->assertTrue(isset($returnedProperties[200]['{DAV:}group-member-set']));
|
||||
$this->assertInstanceOf('Sabre_DAV_Property_HrefList', $returnedProperties[200]['{DAV:}group-member-set']);
|
||||
|
||||
$this->assertEquals(array(), $returnedProperties[200]['{DAV:}group-member-set']->getHrefs());
|
||||
|
||||
}
|
||||
|
||||
function testGroupMemberShip() {
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAV_SimpleCollection('principals', array(
|
||||
$principal = new Sabre_DAVACL_MockPrincipal('user','principals/user'),
|
||||
)),
|
||||
);
|
||||
|
||||
$fakeServer = new Sabre_DAV_Server($tree);
|
||||
//$plugin = new Sabre_DAV_Auth_Plugin(new Sabre_DAV_Auth_MockBackend(),'realm');
|
||||
//$fakeServer->addPlugin($plugin);
|
||||
$plugin = new Sabre_DAVACL_Plugin();
|
||||
$fakeServer->addPlugin($plugin);
|
||||
|
||||
$requestedProperties = array(
|
||||
'{DAV:}group-membership',
|
||||
);
|
||||
$returnedProperties = array();
|
||||
|
||||
$result = $plugin->beforeGetProperties('principals/user',$principal,$requestedProperties,$returnedProperties);
|
||||
|
||||
$this->assertNull($result);
|
||||
|
||||
$this->assertTrue(isset($returnedProperties[200]));
|
||||
$this->assertTrue(isset($returnedProperties[200]['{DAV:}group-membership']));
|
||||
$this->assertInstanceOf('Sabre_DAV_Property_HrefList', $returnedProperties[200]['{DAV:}group-membership']);
|
||||
|
||||
$this->assertEquals(array(), $returnedProperties[200]['{DAV:}group-membership']->getHrefs());
|
||||
|
||||
}
|
||||
|
||||
function testGetDisplayName() {
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAV_SimpleCollection('principals', array(
|
||||
$principal = new Sabre_DAVACL_MockPrincipal('user','principals/user'),
|
||||
)),
|
||||
);
|
||||
|
||||
$fakeServer = new Sabre_DAV_Server($tree);
|
||||
//$plugin = new Sabre_DAV_Auth_Plugin(new Sabre_DAV_Auth_MockBackend(),'realm');
|
||||
//$fakeServer->addPlugin($plugin);
|
||||
$plugin = new Sabre_DAVACL_Plugin();
|
||||
$fakeServer->addPlugin($plugin);
|
||||
|
||||
$requestedProperties = array(
|
||||
'{DAV:}displayname',
|
||||
);
|
||||
$returnedProperties = array();
|
||||
|
||||
$result = $plugin->beforeGetProperties('principals/user',$principal,$requestedProperties,$returnedProperties);
|
||||
|
||||
$this->assertNull($result);
|
||||
|
||||
$this->assertTrue(isset($returnedProperties[200]));
|
||||
$this->assertTrue(isset($returnedProperties[200]['{DAV:}displayname']));
|
||||
|
||||
$this->assertEquals('user', $returnedProperties[200]['{DAV:}displayname']);
|
||||
|
||||
}
|
||||
}
|
||||
121
dav/SabreDAV/tests/Sabre/DAVACL/PluginUpdatePropertiesTest.php
Normal file
121
dav/SabreDAV/tests/Sabre/DAVACL/PluginUpdatePropertiesTest.php
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/DAVACL/MockPrincipal.php';
|
||||
|
||||
class Sabre_DAVACL_PluginUpdatePropertiesTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
public function testUpdatePropertiesPassthrough() {
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAV_SimpleCollection('foo'),
|
||||
);
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->addPlugin(new Sabre_DAVACL_Plugin());
|
||||
|
||||
$result = $server->updateProperties('foo', array(
|
||||
'{DAV:}foo' => 'bar',
|
||||
));
|
||||
|
||||
$expected = array(
|
||||
'href' => 'foo',
|
||||
'403' => array(
|
||||
'{DAV:}foo' => null,
|
||||
),
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
}
|
||||
|
||||
public function testRemoveGroupMembers() {
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAVACL_MockPrincipal('foo','foo'),
|
||||
);
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->addPlugin(new Sabre_DAVACL_Plugin());
|
||||
|
||||
$result = $server->updateProperties('foo', array(
|
||||
'{DAV:}group-member-set' => null,
|
||||
));
|
||||
|
||||
$expected = array(
|
||||
'href' => 'foo',
|
||||
'200' => array(
|
||||
'{DAV:}group-member-set' => null,
|
||||
),
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $result);
|
||||
$this->assertEquals(array(),$tree[0]->getGroupMemberSet());
|
||||
|
||||
}
|
||||
|
||||
public function testSetGroupMembers() {
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAVACL_MockPrincipal('foo','foo'),
|
||||
);
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->addPlugin(new Sabre_DAVACL_Plugin());
|
||||
|
||||
$result = $server->updateProperties('foo', array(
|
||||
'{DAV:}group-member-set' => new Sabre_DAV_Property_HrefList(array('bar','baz')),
|
||||
));
|
||||
|
||||
$expected = array(
|
||||
'href' => 'foo',
|
||||
'200' => array(
|
||||
'{DAV:}group-member-set' => null,
|
||||
),
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $result);
|
||||
$this->assertEquals(array('bar','baz'),$tree[0]->getGroupMemberSet());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException sabre_DAV_Exception
|
||||
*/
|
||||
public function testSetBadValue() {
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAVACL_MockPrincipal('foo','foo'),
|
||||
);
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->addPlugin(new Sabre_DAVACL_Plugin());
|
||||
|
||||
$result = $server->updateProperties('foo', array(
|
||||
'{DAV:}group-member-set' => new StdClass(),
|
||||
));
|
||||
|
||||
}
|
||||
|
||||
public function testSetBadNode() {
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAV_SimpleCollection('foo'),
|
||||
);
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->addPlugin(new Sabre_DAVACL_Plugin());
|
||||
|
||||
$result = $server->updateProperties('foo', array(
|
||||
'{DAV:}group-member-set' => new Sabre_DAV_Property_HrefList(array('bar','baz')),
|
||||
'{DAV:}bar' => 'baz',
|
||||
));
|
||||
|
||||
$expected = array(
|
||||
'href' => 'foo',
|
||||
'403' => array(
|
||||
'{DAV:}group-member-set' => null,
|
||||
),
|
||||
'424' => array(
|
||||
'{DAV:}bar' => null,
|
||||
),
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,172 @@
|
|||
<?php
|
||||
|
||||
abstract class Sabre_DAVACL_PrincipalBackend_AbstractPDOTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
abstract function getPDO();
|
||||
|
||||
function testConstruct() {
|
||||
|
||||
$pdo = $this->getPDO();
|
||||
$backend = new Sabre_DAVACL_PrincipalBackend_PDO($pdo);
|
||||
$this->assertTrue($backend instanceof Sabre_DAVACL_PrincipalBackend_PDO);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testConstruct
|
||||
*/
|
||||
function testGetPrincipalsByPrefix() {
|
||||
|
||||
$pdo = $this->getPDO();
|
||||
$backend = new Sabre_DAVACL_PrincipalBackend_PDO($pdo);
|
||||
|
||||
$expected = array(
|
||||
array(
|
||||
'uri' => 'principals/user',
|
||||
'{http://sabredav.org/ns}email-address' => 'user@example.org',
|
||||
'{DAV:}displayname' => 'User',
|
||||
),
|
||||
array(
|
||||
'uri' => 'principals/group',
|
||||
'{http://sabredav.org/ns}email-address' => 'group@example.org',
|
||||
'{DAV:}displayname' => 'Group',
|
||||
),
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $backend->getPrincipalsByPrefix('principals'));
|
||||
$this->assertEquals(array(), $backend->getPrincipalsByPrefix('foo'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testConstruct
|
||||
*/
|
||||
function testGetPrincipalByPath() {
|
||||
|
||||
$pdo = $this->getPDO();
|
||||
$backend = new Sabre_DAVACL_PrincipalBackend_PDO($pdo);
|
||||
|
||||
$expected = array(
|
||||
'id' => 1,
|
||||
'uri' => 'principals/user',
|
||||
'{http://sabredav.org/ns}email-address' => 'user@example.org',
|
||||
'{DAV:}displayname' => 'User',
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $backend->getPrincipalByPath('principals/user'));
|
||||
$this->assertEquals(null, $backend->getPrincipalByPath('foo'));
|
||||
|
||||
}
|
||||
|
||||
function testGetGroupMemberSet() {
|
||||
|
||||
$pdo = $this->getPDO();
|
||||
$backend = new Sabre_DAVACL_PrincipalBackend_PDO($pdo);
|
||||
$expected = array('principals/user');
|
||||
|
||||
$this->assertEquals($expected,$backend->getGroupMemberSet('principals/group'));
|
||||
|
||||
}
|
||||
|
||||
function testGetGroupMembership() {
|
||||
|
||||
$pdo = $this->getPDO();
|
||||
$backend = new Sabre_DAVACL_PrincipalBackend_PDO($pdo);
|
||||
$expected = array('principals/group');
|
||||
|
||||
$this->assertEquals($expected,$backend->getGroupMembership('principals/user'));
|
||||
|
||||
}
|
||||
|
||||
function testSetGroupMemberSet() {
|
||||
|
||||
$pdo = $this->getPDO();
|
||||
|
||||
// Start situation
|
||||
$backend = new Sabre_DAVACL_PrincipalBackend_PDO($pdo);
|
||||
$this->assertEquals(array('principals/user'), $backend->getGroupMemberSet('principals/group'));
|
||||
|
||||
// Removing all principals
|
||||
$backend->setGroupMemberSet('principals/group', array());
|
||||
$this->assertEquals(array(), $backend->getGroupMemberSet('principals/group'));
|
||||
|
||||
// Adding principals again
|
||||
$backend->setGroupMemberSet('principals/group', array('principals/user'));
|
||||
$this->assertEquals(array('principals/user'), $backend->getGroupMemberSet('principals/group'));
|
||||
|
||||
|
||||
}
|
||||
|
||||
function testSearchPrincipals() {
|
||||
|
||||
$pdo = $this->getPDO();
|
||||
|
||||
$backend = new Sabre_DAVACL_PrincipalBackend_PDO($pdo);
|
||||
|
||||
$result = $backend->searchPrincipals('principals', array('{DAV:}blabla' => 'foo'));
|
||||
$this->assertEquals(array(), $result);
|
||||
|
||||
$result = $backend->searchPrincipals('principals', array('{DAV:}displayname' => 'ou'));
|
||||
$this->assertEquals(array('principals/group'), $result);
|
||||
|
||||
$result = $backend->searchPrincipals('principals', array('{DAV:}displayname' => 'UsEr', '{http://sabredav.org/ns}email-address' => 'USER@EXAMPLE'));
|
||||
$this->assertEquals(array('principals/user'), $result);
|
||||
|
||||
$result = $backend->searchPrincipals('mom', array('{DAV:}displayname' => 'UsEr', '{http://sabredav.org/ns}email-address' => 'USER@EXAMPLE'));
|
||||
$this->assertEquals(array(), $result);
|
||||
|
||||
}
|
||||
|
||||
function testUpdatePrincipal() {
|
||||
|
||||
$pdo = $this->getPDO();
|
||||
$backend = new Sabre_DAVACL_PrincipalBackend_PDO($pdo);
|
||||
|
||||
$result = $backend->updatePrincipal('principals/user', array(
|
||||
'{DAV:}displayname' => 'pietje',
|
||||
'{http://sabredav.org/ns}vcard-url' => 'blabla',
|
||||
));
|
||||
|
||||
$this->assertTrue($result);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'id' => 1,
|
||||
'uri' => 'principals/user',
|
||||
'{DAV:}displayname' => 'pietje',
|
||||
'{http://sabredav.org/ns}vcard-url' => 'blabla',
|
||||
'{http://sabredav.org/ns}email-address' => 'user@example.org',
|
||||
), $backend->getPrincipalByPath('principals/user'));
|
||||
|
||||
}
|
||||
|
||||
function testUpdatePrincipalUnknownField() {
|
||||
|
||||
$pdo = $this->getPDO();
|
||||
$backend = new Sabre_DAVACL_PrincipalBackend_PDO($pdo);
|
||||
|
||||
$result = $backend->updatePrincipal('principals/user', array(
|
||||
'{DAV:}displayname' => 'pietje',
|
||||
'{http://sabredav.org/ns}vcard-url' => 'blabla',
|
||||
'{DAV:}unknown' => 'foo',
|
||||
));
|
||||
|
||||
$this->assertEquals(array(
|
||||
424 => array(
|
||||
'{DAV:}displayname' => null,
|
||||
'{http://sabredav.org/ns}vcard-url' => null,
|
||||
),
|
||||
403 => array(
|
||||
'{DAV:}unknown' => null,
|
||||
),
|
||||
), $result);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'id' => '1',
|
||||
'uri' => 'principals/user',
|
||||
'{DAV:}displayname' => 'User',
|
||||
'{http://sabredav.org/ns}email-address' => 'user@example.org',
|
||||
), $backend->getPrincipalByPath('principals/user'));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/TestUtil.php';
|
||||
|
||||
class Sabre_DAVACL_PrincipalBackend_PDOMySQLTest extends Sabre_DAVACL_PrincipalBackend_AbstractPDOTest {
|
||||
|
||||
function getPDO() {
|
||||
|
||||
if (!SABRE_HASMYSQL) $this->markTestSkipped('MySQL driver is not available, or not properly configured');
|
||||
$pdo = Sabre_TestUtil::getMySQLDB();
|
||||
if (!$pdo) $this->markTestSkipped('Could not connect to MySQL database');
|
||||
$pdo->query("DROP TABLE IF EXISTS principals");
|
||||
$pdo->query("
|
||||
create table principals (
|
||||
id integer unsigned not null primary key auto_increment,
|
||||
uri varchar(50),
|
||||
email varchar(80),
|
||||
displayname VARCHAR(80),
|
||||
vcardurl VARCHAR(80),
|
||||
unique(uri)
|
||||
);");
|
||||
|
||||
$pdo->query("INSERT INTO principals (uri,email,displayname) VALUES ('principals/user','user@example.org','User')");
|
||||
$pdo->query("INSERT INTO principals (uri,email,displayname) VALUES ('principals/group','group@example.org','Group')");
|
||||
$pdo->query("DROP TABLE IF EXISTS groupmembers");
|
||||
$pdo->query("CREATE TABLE groupmembers (
|
||||
id INTEGER UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
||||
principal_id INTEGER UNSIGNED NOT NULL,
|
||||
member_id INTEGER UNSIGNED NOT NULL,
|
||||
UNIQUE(principal_id, member_id)
|
||||
);");
|
||||
|
||||
$pdo->query("INSERT INTO groupmembers (principal_id,member_id) VALUES (2,1)");
|
||||
|
||||
return $pdo;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/DAV/Auth/Backend/AbstractPDOTest.php';
|
||||
|
||||
class Sabre_DAVACL_PrincipalBackend_PDOSQLiteTest extends Sabre_DAVACL_PrincipalBackend_AbstractPDOTest {
|
||||
|
||||
function tearDown() {
|
||||
|
||||
if (file_exists(SABRE_TEMPDIR . '/pdobackend')) unlink(SABRE_TEMPDIR . '/pdobackend');
|
||||
if (file_exists(SABRE_TEMPDIR . '/pdobackend2')) unlink(SABRE_TEMPDIR . '/pdobackend2');
|
||||
|
||||
}
|
||||
|
||||
function getPDO() {
|
||||
|
||||
if (!SABRE_HASSQLITE) $this->markTestSkipped('SQLite driver is not available');
|
||||
$pdo = new PDO('sqlite:'.SABRE_TEMPDIR.'/pdobackend');
|
||||
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
|
||||
$pdo->query('CREATE TABLE principals (id INTEGER PRIMARY KEY ASC, uri TEXT, email VARCHAR(80), displayname VARCHAR(80), vcardurl VARCHAR(80))');
|
||||
$pdo->query('INSERT INTO principals VALUES (1, "principals/user","user@example.org","User",null)');
|
||||
$pdo->query('INSERT INTO principals VALUES (2, "principals/group","group@example.org","Group",null)');
|
||||
|
||||
$pdo->query("CREATE TABLE groupmembers (
|
||||
id INTEGER PRIMARY KEY ASC,
|
||||
principal_id INT,
|
||||
member_id INT,
|
||||
UNIQUE(principal_id, member_id)
|
||||
);");
|
||||
|
||||
$pdo->query("INSERT INTO groupmembers (principal_id,member_id) VALUES (2,1)");
|
||||
|
||||
return $pdo;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
48
dav/SabreDAV/tests/Sabre/DAVACL/PrincipalCollectionTest.php
Normal file
48
dav/SabreDAV/tests/Sabre/DAVACL/PrincipalCollectionTest.php
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/DAVACL/MockPrincipalBackend.php';
|
||||
|
||||
class Sabre_DAVACL_PrincipalCollectionTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
public function testBasic() {
|
||||
|
||||
$backend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$pc = new Sabre_DAVACL_PrincipalCollection($backend);
|
||||
$this->assertTrue($pc instanceof Sabre_DAVACL_PrincipalCollection);
|
||||
|
||||
$this->assertEquals('principals',$pc->getName());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testBasic
|
||||
*/
|
||||
public function testGetChildren() {
|
||||
|
||||
$backend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$pc = new Sabre_DAVACL_PrincipalCollection($backend);
|
||||
|
||||
$children = $pc->getChildren();
|
||||
$this->assertTrue(is_array($children));
|
||||
|
||||
foreach($children as $child) {
|
||||
$this->assertTrue($child instanceof Sabre_DAVACL_IPrincipal);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testBasic
|
||||
* @expectedException Sabre_DAV_Exception_MethodNotAllowed
|
||||
*/
|
||||
public function testGetChildrenDisable() {
|
||||
|
||||
$backend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$pc = new Sabre_DAVACL_PrincipalCollection($backend);
|
||||
$pc->disableListing = true;
|
||||
|
||||
$children = $pc->getChildren();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
240
dav/SabreDAV/tests/Sabre/DAVACL/PrincipalPropertySearchTest.php
Normal file
240
dav/SabreDAV/tests/Sabre/DAVACL/PrincipalPropertySearchTest.php
Normal file
|
|
@ -0,0 +1,240 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
require_once 'Sabre/DAV/Auth/MockBackend.php';
|
||||
require_once 'Sabre/DAVACL/MockPrincipalBackend.php';
|
||||
|
||||
class Sabre_DAVACL_PrincipalPropertySearchTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function getServer() {
|
||||
|
||||
$backend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
|
||||
$dir = new Sabre_DAV_SimpleCollection('root');
|
||||
$principals = new Sabre_DAVACL_PrincipalCollection($backend);
|
||||
$dir->addChild($principals);
|
||||
|
||||
$fakeServer = new Sabre_DAV_Server(new Sabre_DAV_ObjectTree($dir));
|
||||
$fakeServer->httpResponse = new Sabre_HTTP_ResponseMock();
|
||||
$fakeServer->debugExceptions = true;
|
||||
$plugin = new Sabre_DAVACL_MockPlugin($backend,'realm');
|
||||
$plugin->allowAccessToNodesWithoutACL = true;
|
||||
|
||||
$this->assertTrue($plugin instanceof Sabre_DAVACL_Plugin);
|
||||
$fakeServer->addPlugin($plugin);
|
||||
$this->assertEquals($plugin, $fakeServer->getPlugin('acl'));
|
||||
|
||||
return $fakeServer;
|
||||
|
||||
}
|
||||
|
||||
function testDepth1() {
|
||||
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:principal-property-search xmlns:d="DAV:">
|
||||
<d:property-search>
|
||||
<d:prop>
|
||||
<d:displayname />
|
||||
</d:prop>
|
||||
<d:match>user</d:match>
|
||||
</d:property-search>
|
||||
<d:prop>
|
||||
<d:displayname />
|
||||
<d:getcontentlength />
|
||||
</d:prop>
|
||||
</d:principal-property-search>';
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'HTTP_DEPTH' => '1',
|
||||
'REQUEST_URI' => '/principals',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody($xml);
|
||||
|
||||
$server = $this->getServer();
|
||||
$server->httpRequest = $request;
|
||||
|
||||
$server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 400 Bad request', $server->httpResponse->status);
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
), $server->httpResponse->headers);
|
||||
|
||||
}
|
||||
|
||||
|
||||
function testUnknownSearchField() {
|
||||
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:principal-property-search xmlns:d="DAV:">
|
||||
<d:property-search>
|
||||
<d:prop>
|
||||
<d:yourmom />
|
||||
</d:prop>
|
||||
<d:match>user</d:match>
|
||||
</d:property-search>
|
||||
<d:prop>
|
||||
<d:displayname />
|
||||
<d:getcontentlength />
|
||||
</d:prop>
|
||||
</d:principal-property-search>';
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'HTTP_DEPTH' => '0',
|
||||
'REQUEST_URI' => '/principals',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody($xml);
|
||||
|
||||
$server = $this->getServer();
|
||||
$server->httpRequest = $request;
|
||||
|
||||
$server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status', $server->httpResponse->status);
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
), $server->httpResponse->headers);
|
||||
|
||||
}
|
||||
|
||||
function testCorrect() {
|
||||
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:principal-property-search xmlns:d="DAV:">
|
||||
<d:apply-to-principal-collection-set />
|
||||
<d:property-search>
|
||||
<d:prop>
|
||||
<d:displayname />
|
||||
</d:prop>
|
||||
<d:match>user</d:match>
|
||||
</d:property-search>
|
||||
<d:prop>
|
||||
<d:displayname />
|
||||
<d:getcontentlength />
|
||||
</d:prop>
|
||||
</d:principal-property-search>';
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'HTTP_DEPTH' => '0',
|
||||
'REQUEST_URI' => '/',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody($xml);
|
||||
|
||||
$server = $this->getServer();
|
||||
$server->httpRequest = $request;
|
||||
|
||||
$server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status', $server->httpResponse->status, $server->httpResponse->body);
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
), $server->httpResponse->headers);
|
||||
|
||||
|
||||
$check = array(
|
||||
'/d:multistatus',
|
||||
'/d:multistatus/d:response' => 2,
|
||||
'/d:multistatus/d:response/d:href' => 2,
|
||||
'/d:multistatus/d:response/d:propstat' => 4,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop' => 4,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/d:displayname' => 2,
|
||||
'/d:multistatus/d:response/d:propstat/d:prop/d:getcontentlength' => 2,
|
||||
'/d:multistatus/d:response/d:propstat/d:status' => 4,
|
||||
);
|
||||
|
||||
$xml = simplexml_load_string($server->httpResponse->body);
|
||||
$xml->registerXPathNamespace('d','DAV:');
|
||||
foreach($check as $v1=>$v2) {
|
||||
|
||||
$xpath = is_int($v1)?$v2:$v1;
|
||||
|
||||
$result = $xml->xpath($xpath);
|
||||
|
||||
$count = 1;
|
||||
if (!is_int($v1)) $count = $v2;
|
||||
|
||||
$this->assertEquals($count,count($result), 'we expected ' . $count . ' appearances of ' . $xpath . ' . We found ' . count($result) . '. Full response body: ' . $server->httpResponse->body);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
function testWrongUri() {
|
||||
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:principal-property-search xmlns:d="DAV:">
|
||||
<d:property-search>
|
||||
<d:prop>
|
||||
<d:displayname />
|
||||
</d:prop>
|
||||
<d:match>user</d:match>
|
||||
</d:property-search>
|
||||
<d:prop>
|
||||
<d:displayname />
|
||||
<d:getcontentlength />
|
||||
</d:prop>
|
||||
</d:principal-property-search>';
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'HTTP_DEPTH' => '0',
|
||||
'REQUEST_URI' => '/',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody($xml);
|
||||
|
||||
$server = $this->getServer();
|
||||
$server->httpRequest = $request;
|
||||
|
||||
$server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 207 Multi-Status', $server->httpResponse->status, $server->httpResponse->body);
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
), $server->httpResponse->headers);
|
||||
|
||||
|
||||
$check = array(
|
||||
'/d:multistatus',
|
||||
'/d:multistatus/d:response' => 0,
|
||||
);
|
||||
|
||||
$xml = simplexml_load_string($server->httpResponse->body);
|
||||
$xml->registerXPathNamespace('d','DAV:');
|
||||
foreach($check as $v1=>$v2) {
|
||||
|
||||
$xpath = is_int($v1)?$v2:$v1;
|
||||
|
||||
$result = $xml->xpath($xpath);
|
||||
|
||||
$count = 1;
|
||||
if (!is_int($v1)) $count = $v2;
|
||||
|
||||
$this->assertEquals($count,count($result), 'we expected ' . $count . ' appearances of ' . $xpath . ' . We found ' . count($result) . '. Full response body: ' . $server->httpResponse->body);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
class Sabre_DAVACL_MockPlugin extends Sabre_DAVACL_Plugin {
|
||||
|
||||
function getCurrentUserPrivilegeSet($node) {
|
||||
|
||||
return array(
|
||||
'{DAV:}read',
|
||||
'{DAV:}write',
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,131 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
require_once 'Sabre/DAVACL/MockPrincipalBackend.php';
|
||||
|
||||
class Sabre_DAVACL_PrincipalSearchPropertySetTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function getServer() {
|
||||
|
||||
$backend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
|
||||
$dir = new Sabre_DAV_SimpleCollection('root');
|
||||
$principals = new Sabre_DAVACL_PrincipalCollection($backend);
|
||||
$dir->addChild($principals);
|
||||
|
||||
$fakeServer = new Sabre_DAV_Server(new Sabre_DAV_ObjectTree($dir));
|
||||
$fakeServer->httpResponse = new Sabre_HTTP_ResponseMock();
|
||||
$plugin = new Sabre_DAVACL_Plugin($backend,'realm');
|
||||
$this->assertTrue($plugin instanceof Sabre_DAVACL_Plugin);
|
||||
$fakeServer->addPlugin($plugin);
|
||||
$this->assertEquals($plugin, $fakeServer->getPlugin('acl'));
|
||||
|
||||
return $fakeServer;
|
||||
|
||||
}
|
||||
|
||||
function testDepth1() {
|
||||
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:principal-search-property-set xmlns:d="DAV:" />';
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'HTTP_DEPTH' => '1',
|
||||
'REQUEST_URI' => '/principals',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody($xml);
|
||||
|
||||
$server = $this->getServer();
|
||||
$server->httpRequest = $request;
|
||||
|
||||
$server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 400 Bad request', $server->httpResponse->status);
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
), $server->httpResponse->headers);
|
||||
|
||||
}
|
||||
|
||||
function testDepthIncorrectXML() {
|
||||
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:principal-search-property-set xmlns:d="DAV:"><d:ohell /></d:principal-search-property-set>';
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'HTTP_DEPTH' => '0',
|
||||
'REQUEST_URI' => '/principals',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody($xml);
|
||||
|
||||
$server = $this->getServer();
|
||||
$server->httpRequest = $request;
|
||||
|
||||
$server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 400 Bad request', $server->httpResponse->status, $server->httpResponse->body);
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
), $server->httpResponse->headers);
|
||||
|
||||
}
|
||||
|
||||
function testCorrect() {
|
||||
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:principal-search-property-set xmlns:d="DAV:"/>';
|
||||
|
||||
$serverVars = array(
|
||||
'REQUEST_METHOD' => 'REPORT',
|
||||
'HTTP_DEPTH' => '0',
|
||||
'REQUEST_URI' => '/principals',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($serverVars);
|
||||
$request->setBody($xml);
|
||||
|
||||
$server = $this->getServer();
|
||||
$server->httpRequest = $request;
|
||||
|
||||
$server->exec();
|
||||
|
||||
$this->assertEquals('HTTP/1.1 200 OK', $server->httpResponse->status, $server->httpResponse->body);
|
||||
$this->assertEquals(array(
|
||||
'Content-Type' => 'application/xml; charset=utf-8',
|
||||
), $server->httpResponse->headers);
|
||||
|
||||
|
||||
$check = array(
|
||||
'/d:principal-search-property-set',
|
||||
'/d:principal-search-property-set/d:principal-search-property' => 2,
|
||||
'/d:principal-search-property-set/d:principal-search-property/d:prop' => 2,
|
||||
'/d:principal-search-property-set/d:principal-search-property/d:prop/d:displayname' => 1,
|
||||
'/d:principal-search-property-set/d:principal-search-property/d:prop/s:email-address' => 1,
|
||||
'/d:principal-search-property-set/d:principal-search-property/d:description' => 2,
|
||||
);
|
||||
|
||||
$xml = simplexml_load_string($server->httpResponse->body);
|
||||
$xml->registerXPathNamespace('d','DAV:');
|
||||
$xml->registerXPathNamespace('s','http://sabredav.org/ns');
|
||||
foreach($check as $v1=>$v2) {
|
||||
|
||||
$xpath = is_int($v1)?$v2:$v1;
|
||||
|
||||
$result = $xml->xpath($xpath);
|
||||
|
||||
$count = 1;
|
||||
if (!is_int($v1)) $count = $v2;
|
||||
|
||||
$this->assertEquals($count,count($result), 'we expected ' . $count . ' appearances of ' . $xpath . ' . We found ' . count($result) . '. Full response body: ' . $server->httpResponse->body);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
201
dav/SabreDAV/tests/Sabre/DAVACL/PrincipalTest.php
Normal file
201
dav/SabreDAV/tests/Sabre/DAVACL/PrincipalTest.php
Normal file
|
|
@ -0,0 +1,201 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/DAVACL/MockPrincipalBackend.php';
|
||||
|
||||
class Sabre_DAVACL_PrincipalTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
public function testConstruct() {
|
||||
|
||||
$principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$principal = new Sabre_DAVACL_Principal($principalBackend, array('uri' => 'principals/admin'));
|
||||
$this->assertTrue($principal instanceof Sabre_DAVACL_Principal);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception
|
||||
*/
|
||||
public function testConstructNoUri() {
|
||||
|
||||
$principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$principal = new Sabre_DAVACL_Principal($principalBackend, array());
|
||||
|
||||
}
|
||||
|
||||
public function testGetName() {
|
||||
|
||||
$principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$principal = new Sabre_DAVACL_Principal($principalBackend, array('uri' => 'principals/admin'));
|
||||
$this->assertEquals('admin',$principal->getName());
|
||||
|
||||
}
|
||||
|
||||
public function testGetDisplayName() {
|
||||
|
||||
$principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$principal = new Sabre_DAVACL_Principal($principalBackend, array('uri' => 'principals/admin'));
|
||||
$this->assertEquals('admin',$principal->getDisplayname());
|
||||
|
||||
$principal = new Sabre_DAVACL_Principal($principalBackend, array(
|
||||
'uri' => 'principals/admin',
|
||||
'{DAV:}displayname' => 'Mr. Admin'
|
||||
));
|
||||
$this->assertEquals('Mr. Admin',$principal->getDisplayname());
|
||||
|
||||
}
|
||||
|
||||
public function testGetProperties() {
|
||||
|
||||
$principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$principal = new Sabre_DAVACL_Principal($principalBackend, array(
|
||||
'uri' => 'principals/admin',
|
||||
'{DAV:}displayname' => 'Mr. Admin',
|
||||
'{http://www.example.org/custom}custom' => 'Custom',
|
||||
'{http://sabredav.org/ns}email-address' => 'admin@example.org',
|
||||
));
|
||||
|
||||
$keys = array(
|
||||
'{DAV:}displayname',
|
||||
'{http://www.example.org/custom}custom',
|
||||
'{http://sabredav.org/ns}email-address',
|
||||
);
|
||||
$props = $principal->getProperties($keys);
|
||||
|
||||
foreach($keys as $key) $this->assertArrayHasKey($key,$props);
|
||||
|
||||
$this->assertEquals('Mr. Admin',$props['{DAV:}displayname']);
|
||||
|
||||
$this->assertEquals('admin@example.org', $props['{http://sabredav.org/ns}email-address']);
|
||||
}
|
||||
|
||||
public function testUpdateProperties() {
|
||||
|
||||
$principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$principal = new Sabre_DAVACL_Principal($principalBackend, array('uri' => 'principals/admin'));
|
||||
$result = $principal->updateProperties(array('{DAV:}yourmom'=>'test'));
|
||||
$this->assertEquals(true,$result);
|
||||
|
||||
}
|
||||
|
||||
public function testGetPrincipalUrl() {
|
||||
|
||||
$principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$principal = new Sabre_DAVACL_Principal($principalBackend, array('uri' => 'principals/admin'));
|
||||
$this->assertEquals('principals/admin',$principal->getPrincipalUrl());
|
||||
|
||||
}
|
||||
|
||||
public function testGetAlternateUriSet() {
|
||||
|
||||
$principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$principal = new Sabre_DAVACL_Principal($principalBackend, array(
|
||||
'uri' => 'principals/admin',
|
||||
'{DAV:}displayname' => 'Mr. Admin',
|
||||
'{http://www.example.org/custom}custom' => 'Custom',
|
||||
'{http://sabredav.org/ns}email-address' => 'admin@example.org',
|
||||
'{DAV:}alternate-URI-set' => array(
|
||||
'mailto:admin+1@example.org',
|
||||
'mailto:admin+2@example.org',
|
||||
'mailto:admin@example.org',
|
||||
),
|
||||
));
|
||||
|
||||
$expected = array(
|
||||
'mailto:admin+1@example.org',
|
||||
'mailto:admin+2@example.org',
|
||||
'mailto:admin@example.org',
|
||||
);
|
||||
|
||||
$this->assertEquals($expected,$principal->getAlternateUriSet());
|
||||
|
||||
}
|
||||
public function testGetAlternateUriSetEmpty() {
|
||||
|
||||
$principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$principal = new Sabre_DAVACL_Principal($principalBackend, array(
|
||||
'uri' => 'principals/admin',
|
||||
));
|
||||
|
||||
$expected = array();
|
||||
|
||||
$this->assertEquals($expected,$principal->getAlternateUriSet());
|
||||
|
||||
}
|
||||
|
||||
public function testGetGroupMemberSet() {
|
||||
|
||||
$principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$principal = new Sabre_DAVACL_Principal($principalBackend, array('uri' => 'principals/admin'));
|
||||
$this->assertEquals(array(),$principal->getGroupMemberSet());
|
||||
|
||||
}
|
||||
public function testGetGroupMembership() {
|
||||
|
||||
$principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$principal = new Sabre_DAVACL_Principal($principalBackend, array('uri' => 'principals/admin'));
|
||||
$this->assertEquals(array(),$principal->getGroupMembership());
|
||||
|
||||
}
|
||||
|
||||
public function testSetGroupMemberSet() {
|
||||
|
||||
$principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$principal = new Sabre_DAVACL_Principal($principalBackend, array('uri' => 'principals/admin'));
|
||||
$principal->setGroupMemberSet(array('principals/foo'));
|
||||
|
||||
$this->assertEquals(array(
|
||||
'principals/admin' => array('principals/foo'),
|
||||
), $principalBackend->groupMembers);
|
||||
|
||||
}
|
||||
|
||||
public function testGetOwner() {
|
||||
|
||||
$principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$principal = new Sabre_DAVACL_Principal($principalBackend, array('uri' => 'principals/admin'));
|
||||
$this->assertEquals('principals/admin',$principal->getOwner());
|
||||
|
||||
}
|
||||
|
||||
public function testGetGroup() {
|
||||
|
||||
$principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$principal = new Sabre_DAVACL_Principal($principalBackend, array('uri' => 'principals/admin'));
|
||||
$this->assertNull($principal->getGroup());
|
||||
|
||||
}
|
||||
|
||||
public function testGetACl() {
|
||||
|
||||
$principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$principal = new Sabre_DAVACL_Principal($principalBackend, array('uri' => 'principals/admin'));
|
||||
$this->assertEquals(array(
|
||||
array(
|
||||
'privilege' => '{DAV:}read',
|
||||
'principal' => 'principals/admin',
|
||||
'protected' => true,
|
||||
)
|
||||
),$principal->getACL());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_MethodNotAllowed
|
||||
*/
|
||||
public function testSetACl() {
|
||||
|
||||
$principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$principal = new Sabre_DAVACL_Principal($principalBackend, array('uri' => 'principals/admin'));
|
||||
$principal->setACL(array());
|
||||
|
||||
}
|
||||
|
||||
public function testGetSupportedPrivilegeSet() {
|
||||
|
||||
$principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
$principal = new Sabre_DAVACL_Principal($principalBackend, array('uri' => 'principals/admin'));
|
||||
$this->assertNull($principal->getSupportedPrivilegeSet());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAVACL_Property_ACLRestrictionsTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testConstruct() {
|
||||
|
||||
$prop = new Sabre_DAVACL_Property_AclRestrictions();
|
||||
|
||||
}
|
||||
|
||||
function testSerializeEmpty() {
|
||||
|
||||
$dom = new DOMDocument('1.0');
|
||||
$root = $dom->createElementNS('DAV:','d:root');
|
||||
|
||||
$dom->appendChild($root);
|
||||
|
||||
$acl = new Sabre_DAVACL_Property_AclRestrictions();
|
||||
$acl->serialize(new Sabre_DAV_Server(), $root);
|
||||
|
||||
$xml = $dom->saveXML();
|
||||
$expected = '<?xml version="1.0"?>
|
||||
<d:root xmlns:d="DAV:"><d:grant-only/><d:no-invert/></d:root>
|
||||
';
|
||||
$this->assertEquals($expected, $xml);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
329
dav/SabreDAV/tests/Sabre/DAVACL/Property/ACLTest.php
Normal file
329
dav/SabreDAV/tests/Sabre/DAVACL/Property/ACLTest.php
Normal file
|
|
@ -0,0 +1,329 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAVACL_Property_ACLTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testConstruct() {
|
||||
|
||||
$acl = new Sabre_DAVACL_Property_Acl(array());
|
||||
|
||||
}
|
||||
|
||||
function testSerializeEmpty() {
|
||||
|
||||
$dom = new DOMDocument('1.0');
|
||||
$root = $dom->createElementNS('DAV:','d:root');
|
||||
|
||||
$dom->appendChild($root);
|
||||
|
||||
$acl = new Sabre_DAVACL_Property_Acl(array());
|
||||
$acl->serialize(new Sabre_DAV_Server(), $root);
|
||||
|
||||
$xml = $dom->saveXML();
|
||||
$expected = '<?xml version="1.0"?>
|
||||
<d:root xmlns:d="DAV:"/>
|
||||
';
|
||||
$this->assertEquals($expected, $xml);
|
||||
|
||||
}
|
||||
|
||||
function testSerialize() {
|
||||
|
||||
$dom = new DOMDocument('1.0');
|
||||
$root = $dom->createElementNS('DAV:','d:root');
|
||||
|
||||
$dom->appendChild($root);
|
||||
|
||||
$privileges = array(
|
||||
array(
|
||||
'principal' => 'principals/evert',
|
||||
'privilege' => '{DAV:}write',
|
||||
'uri' => 'articles',
|
||||
),
|
||||
array(
|
||||
'principal' => 'principals/foo',
|
||||
'privilege' => '{DAV:}read',
|
||||
'uri' => 'articles',
|
||||
'protected' => true,
|
||||
),
|
||||
);
|
||||
|
||||
$acl = new Sabre_DAVACL_Property_Acl($privileges);
|
||||
$acl->serialize(new Sabre_DAV_Server(), $root);
|
||||
|
||||
$dom->formatOutput = true;
|
||||
|
||||
$xml = $dom->saveXML();
|
||||
$expected = '<?xml version="1.0"?>
|
||||
<d:root xmlns:d="DAV:">
|
||||
<d:ace>
|
||||
<d:principal>
|
||||
<d:href>/principals/evert/</d:href>
|
||||
</d:principal>
|
||||
<d:grant>
|
||||
<d:privilege>
|
||||
<d:write/>
|
||||
</d:privilege>
|
||||
</d:grant>
|
||||
</d:ace>
|
||||
<d:ace>
|
||||
<d:principal>
|
||||
<d:href>/principals/foo/</d:href>
|
||||
</d:principal>
|
||||
<d:grant>
|
||||
<d:privilege>
|
||||
<d:read/>
|
||||
</d:privilege>
|
||||
</d:grant>
|
||||
<d:protected/>
|
||||
</d:ace>
|
||||
</d:root>
|
||||
';
|
||||
$this->assertEquals($expected, $xml);
|
||||
|
||||
}
|
||||
|
||||
function testSerializeSpecialPrincipals() {
|
||||
|
||||
$dom = new DOMDocument('1.0');
|
||||
$root = $dom->createElementNS('DAV:','d:root');
|
||||
|
||||
$dom->appendChild($root);
|
||||
|
||||
$privileges = array(
|
||||
array(
|
||||
'principal' => '{DAV:}authenticated',
|
||||
'privilege' => '{DAV:}write',
|
||||
'uri' => 'articles',
|
||||
),
|
||||
array(
|
||||
'principal' => '{DAV:}unauthenticated',
|
||||
'privilege' => '{DAV:}write',
|
||||
'uri' => 'articles',
|
||||
),
|
||||
array(
|
||||
'principal' => '{DAV:}all',
|
||||
'privilege' => '{DAV:}write',
|
||||
'uri' => 'articles',
|
||||
),
|
||||
|
||||
);
|
||||
|
||||
$acl = new Sabre_DAVACL_Property_Acl($privileges);
|
||||
$acl->serialize(new Sabre_DAV_Server(), $root);
|
||||
|
||||
$dom->formatOutput = true;
|
||||
|
||||
$xml = $dom->saveXML();
|
||||
$expected = '<?xml version="1.0"?>
|
||||
<d:root xmlns:d="DAV:">
|
||||
<d:ace>
|
||||
<d:principal>
|
||||
<d:authenticated/>
|
||||
</d:principal>
|
||||
<d:grant>
|
||||
<d:privilege>
|
||||
<d:write/>
|
||||
</d:privilege>
|
||||
</d:grant>
|
||||
</d:ace>
|
||||
<d:ace>
|
||||
<d:principal>
|
||||
<d:unauthenticated/>
|
||||
</d:principal>
|
||||
<d:grant>
|
||||
<d:privilege>
|
||||
<d:write/>
|
||||
</d:privilege>
|
||||
</d:grant>
|
||||
</d:ace>
|
||||
<d:ace>
|
||||
<d:principal>
|
||||
<d:all/>
|
||||
</d:principal>
|
||||
<d:grant>
|
||||
<d:privilege>
|
||||
<d:write/>
|
||||
</d:privilege>
|
||||
</d:grant>
|
||||
</d:ace>
|
||||
</d:root>
|
||||
';
|
||||
$this->assertEquals($expected, $xml);
|
||||
|
||||
}
|
||||
|
||||
function testUnserialize() {
|
||||
|
||||
$source = '<?xml version="1.0"?>
|
||||
<d:root xmlns:d="DAV:">
|
||||
<d:ace>
|
||||
<d:principal>
|
||||
<d:href>/principals/evert/</d:href>
|
||||
</d:principal>
|
||||
<d:grant>
|
||||
<d:privilege>
|
||||
<d:write/>
|
||||
</d:privilege>
|
||||
</d:grant>
|
||||
</d:ace>
|
||||
<d:ace>
|
||||
<d:principal>
|
||||
<d:href>/principals/foo/</d:href>
|
||||
</d:principal>
|
||||
<d:grant>
|
||||
<d:privilege>
|
||||
<d:read/>
|
||||
</d:privilege>
|
||||
</d:grant>
|
||||
<d:protected/>
|
||||
</d:ace>
|
||||
</d:root>
|
||||
';
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($source);
|
||||
$result = Sabre_DAVACL_Property_Acl::unserialize($dom->firstChild);
|
||||
|
||||
$this->assertInstanceOf('Sabre_DAVACL_Property_Acl', $result);
|
||||
|
||||
$expected = array(
|
||||
array(
|
||||
'principal' => '/principals/evert/',
|
||||
'protected' => false,
|
||||
'privilege' => '{DAV:}write',
|
||||
),
|
||||
array(
|
||||
'principal' => '/principals/foo/',
|
||||
'protected' => true,
|
||||
'privilege' => '{DAV:}read',
|
||||
),
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $result->getPrivileges());
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_BadRequest
|
||||
*/
|
||||
function testUnserializeNoPrincipal() {
|
||||
|
||||
$source = '<?xml version="1.0"?>
|
||||
<d:root xmlns:d="DAV:">
|
||||
<d:ace>
|
||||
<d:grant>
|
||||
<d:privilege>
|
||||
<d:write/>
|
||||
</d:privilege>
|
||||
</d:grant>
|
||||
</d:ace>
|
||||
</d:root>
|
||||
';
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($source);
|
||||
Sabre_DAVACL_Property_Acl::unserialize($dom->firstChild);
|
||||
|
||||
}
|
||||
|
||||
function testUnserializeOtherPrincipal() {
|
||||
|
||||
$source = '<?xml version="1.0"?>
|
||||
<d:root xmlns:d="DAV:">
|
||||
<d:ace>
|
||||
<d:grant>
|
||||
<d:privilege>
|
||||
<d:write/>
|
||||
</d:privilege>
|
||||
</d:grant>
|
||||
<d:principal><d:authenticated /></d:principal>
|
||||
</d:ace>
|
||||
<d:ace>
|
||||
<d:grant>
|
||||
<d:privilege>
|
||||
<d:write/>
|
||||
</d:privilege>
|
||||
</d:grant>
|
||||
<d:principal><d:unauthenticated /></d:principal>
|
||||
</d:ace>
|
||||
<d:ace>
|
||||
<d:grant>
|
||||
<d:privilege>
|
||||
<d:write/>
|
||||
</d:privilege>
|
||||
</d:grant>
|
||||
<d:principal><d:all /></d:principal>
|
||||
</d:ace>
|
||||
</d:root>
|
||||
';
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($source);
|
||||
$result = Sabre_DAVACL_Property_Acl::unserialize($dom->firstChild);
|
||||
|
||||
$this->assertInstanceOf('Sabre_DAVACL_Property_Acl', $result);
|
||||
|
||||
$expected = array(
|
||||
array(
|
||||
'principal' => '{DAV:}authenticated',
|
||||
'protected' => false,
|
||||
'privilege' => '{DAV:}write',
|
||||
),
|
||||
array(
|
||||
'principal' => '{DAV:}unauthenticated',
|
||||
'protected' => false,
|
||||
'privilege' => '{DAV:}write',
|
||||
),
|
||||
array(
|
||||
'principal' => '{DAV:}all',
|
||||
'protected' => false,
|
||||
'privilege' => '{DAV:}write',
|
||||
),
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $result->getPrivileges());
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_NotImplemented
|
||||
*/
|
||||
function testUnserializeDeny() {
|
||||
|
||||
$source = '<?xml version="1.0"?>
|
||||
<d:root xmlns:d="DAV:">
|
||||
<d:ace>
|
||||
<d:deny>
|
||||
<d:privilege>
|
||||
<d:write/>
|
||||
</d:privilege>
|
||||
</d:deny>
|
||||
<d:principal><d:href>/principals/evert</d:href></d:principal>
|
||||
</d:ace>
|
||||
</d:root>
|
||||
';
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($source);
|
||||
Sabre_DAVACL_Property_Acl::unserialize($dom->firstChild);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_BadRequest
|
||||
*/
|
||||
function testUnserializeMissingPriv() {
|
||||
|
||||
$source = '<?xml version="1.0"?>
|
||||
<d:root xmlns:d="DAV:">
|
||||
<d:ace>
|
||||
<d:grant>
|
||||
<d:privilege />
|
||||
</d:grant>
|
||||
<d:principal><d:href>/principals/evert</d:href></d:principal>
|
||||
</d:ace>
|
||||
</d:root>
|
||||
';
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($source);
|
||||
Sabre_DAVACL_Property_Acl::unserialize($dom->firstChild);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAVACL_Property_CurrentUserPrivilegeSetTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testSerialize() {
|
||||
|
||||
$privileges = array(
|
||||
'{DAV:}read',
|
||||
'{DAV:}write',
|
||||
);
|
||||
$prop = new Sabre_DAVACL_Property_CurrentUserPrivilegeSet($privileges);
|
||||
|
||||
$server = new Sabre_DAV_Server();
|
||||
$dom = new DOMDocument('1.0','utf-8');
|
||||
$root = $dom->createElementNS('DAV:','d:root');
|
||||
$dom->appendChild($root);
|
||||
|
||||
$prop->serialize($server, $root);
|
||||
|
||||
$xpaths = array(
|
||||
'/d:root' => 1,
|
||||
'/d:root/d:privilege' => 2,
|
||||
'/d:root/d:privilege/d:read' => 1,
|
||||
'/d:root/d:privilege/d:write' => 1,
|
||||
);
|
||||
|
||||
// Reloading because PHP DOM sucks
|
||||
$dom2 = new DOMDocument('1.0', 'utf-8');
|
||||
$dom2->loadXML($dom->saveXML());
|
||||
|
||||
$dxpath = new DOMXPath($dom2);
|
||||
$dxpath->registerNamespace('d','DAV:');
|
||||
foreach($xpaths as $xpath=>$count) {
|
||||
|
||||
$this->assertEquals($count, $dxpath->query($xpath)->length, 'Looking for : ' . $xpath . ', we could only find ' . $dxpath->query($xpath)->length . ' elements, while we expected ' . $count);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
176
dav/SabreDAV/tests/Sabre/DAVACL/Property/PrincipalTest.php
Normal file
176
dav/SabreDAV/tests/Sabre/DAVACL/Property/PrincipalTest.php
Normal file
|
|
@ -0,0 +1,176 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAVACL_Property_PrincipalTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testSimple() {
|
||||
|
||||
$principal = new Sabre_DAVACL_Property_Principal(Sabre_DAVACL_Property_Principal::UNAUTHENTICATED);
|
||||
$this->assertEquals(Sabre_DAVACL_Property_Principal::UNAUTHENTICATED, $principal->getType());
|
||||
$this->assertNull($principal->getHref());
|
||||
|
||||
$principal = new Sabre_DAVACL_Property_Principal(Sabre_DAVACL_Property_Principal::AUTHENTICATED);
|
||||
$this->assertEquals(Sabre_DAVACL_Property_Principal::AUTHENTICATED, $principal->getType());
|
||||
$this->assertNull($principal->getHref());
|
||||
|
||||
$principal = new Sabre_DAVACL_Property_Principal(Sabre_DAVACL_Property_Principal::HREF,'admin');
|
||||
$this->assertEquals(Sabre_DAVACL_Property_Principal::HREF, $principal->getType());
|
||||
$this->assertEquals('admin',$principal->getHref());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSimple
|
||||
* @expectedException Sabre_DAV_Exception
|
||||
*/
|
||||
function testNoHref() {
|
||||
|
||||
$principal = new Sabre_DAVACL_Property_Principal(Sabre_DAVACL_Property_Principal::HREF);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSimple
|
||||
*/
|
||||
function testSerializeUnAuthenticated() {
|
||||
|
||||
$prin = new Sabre_DAVACL_Property_Principal(Sabre_DAVACL_Property_Principal::UNAUTHENTICATED);
|
||||
|
||||
$doc = new DOMDocument();
|
||||
$root = $doc->createElement('d:principal');
|
||||
$root->setAttribute('xmlns:d','DAV:');
|
||||
|
||||
$doc->appendChild($root);
|
||||
$objectTree = new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('rootdir'));
|
||||
$server = new Sabre_DAV_Server($objectTree);
|
||||
|
||||
$prin->serialize($server, $root);
|
||||
|
||||
$xml = $doc->saveXML();
|
||||
|
||||
$this->assertEquals(
|
||||
'<?xml version="1.0"?>
|
||||
<d:principal xmlns:d="DAV:">' .
|
||||
'<d:unauthenticated/>' .
|
||||
'</d:principal>
|
||||
', $xml);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @depends testSerializeUnAuthenticated
|
||||
*/
|
||||
function testSerializeAuthenticated() {
|
||||
|
||||
$prin = new Sabre_DAVACL_Property_Principal(Sabre_DAVACL_Property_Principal::AUTHENTICATED);
|
||||
|
||||
$doc = new DOMDocument();
|
||||
$root = $doc->createElement('d:principal');
|
||||
$root->setAttribute('xmlns:d','DAV:');
|
||||
|
||||
$doc->appendChild($root);
|
||||
$objectTree = new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('rootdir'));
|
||||
$server = new Sabre_DAV_Server($objectTree);
|
||||
|
||||
$prin->serialize($server, $root);
|
||||
|
||||
$xml = $doc->saveXML();
|
||||
|
||||
$this->assertEquals(
|
||||
'<?xml version="1.0"?>
|
||||
<d:principal xmlns:d="DAV:">' .
|
||||
'<d:authenticated/>' .
|
||||
'</d:principal>
|
||||
', $xml);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @depends testSerializeUnAuthenticated
|
||||
*/
|
||||
function testSerializeHref() {
|
||||
|
||||
$prin = new Sabre_DAVACL_Property_Principal(Sabre_DAVACL_Property_Principal::HREF,'principals/admin');
|
||||
|
||||
$doc = new DOMDocument();
|
||||
$root = $doc->createElement('d:principal');
|
||||
$root->setAttribute('xmlns:d','DAV:');
|
||||
|
||||
$doc->appendChild($root);
|
||||
$objectTree = new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleCollection('rootdir'));
|
||||
$server = new Sabre_DAV_Server($objectTree);
|
||||
|
||||
$prin->serialize($server, $root);
|
||||
|
||||
$xml = $doc->saveXML();
|
||||
|
||||
$this->assertEquals(
|
||||
'<?xml version="1.0"?>
|
||||
<d:principal xmlns:d="DAV:">' .
|
||||
'<d:href>/principals/admin</d:href>' .
|
||||
'</d:principal>
|
||||
', $xml);
|
||||
|
||||
}
|
||||
|
||||
function testUnserializeHref() {
|
||||
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:principal xmlns:d="DAV:">' .
|
||||
'<d:href>/principals/admin</d:href>' .
|
||||
'</d:principal>';
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
|
||||
|
||||
$principal = Sabre_DAVACL_Property_Principal::unserialize($dom->firstChild);
|
||||
$this->assertEquals(Sabre_DAVACL_Property_Principal::HREF, $principal->getType());
|
||||
$this->assertEquals('/principals/admin', $principal->getHref());
|
||||
|
||||
}
|
||||
|
||||
function testUnserializeAuthenticated() {
|
||||
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:principal xmlns:d="DAV:">' .
|
||||
' <d:authenticated />' .
|
||||
'</d:principal>';
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
|
||||
|
||||
$principal = Sabre_DAVACL_Property_Principal::unserialize($dom->firstChild);
|
||||
$this->assertEquals(Sabre_DAVACL_Property_Principal::AUTHENTICATED, $principal->getType());
|
||||
|
||||
}
|
||||
|
||||
function testUnserializeUnauthenticated() {
|
||||
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:principal xmlns:d="DAV:">' .
|
||||
' <d:unauthenticated />' .
|
||||
'</d:principal>';
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
|
||||
|
||||
$principal = Sabre_DAVACL_Property_Principal::unserialize($dom->firstChild);
|
||||
$this->assertEquals(Sabre_DAVACL_Property_Principal::UNAUTHENTICATED, $principal->getType());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Sabre_DAV_Exception_BadRequest
|
||||
*/
|
||||
function testUnserializeUnknown() {
|
||||
|
||||
$xml = '<?xml version="1.0"?>
|
||||
<d:principal xmlns:d="DAV:">' .
|
||||
' <d:foo />' .
|
||||
'</d:principal>';
|
||||
|
||||
$dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
|
||||
|
||||
Sabre_DAVACL_Property_Principal::unserialize($dom->firstChild);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,99 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAVACL_Property_SupportedPrivilegeSetTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testSimple() {
|
||||
|
||||
$prop = new Sabre_DAVACL_Property_SupportedPrivilegeSet(array(
|
||||
'privilege' => '{DAV:}all',
|
||||
));
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @depends testSimple
|
||||
*/
|
||||
function testSerializeSimple() {
|
||||
|
||||
$prop = new Sabre_DAVACL_Property_SupportedPrivilegeSet(array(
|
||||
'privilege' => '{DAV:}all',
|
||||
));
|
||||
|
||||
$doc = new DOMDocument();
|
||||
$root = $doc->createElementNS('DAV:', 'd:supported-privilege-set');
|
||||
|
||||
$doc->appendChild($root);
|
||||
|
||||
$server = new Sabre_DAV_Server();
|
||||
$prop->serialize($server, $root);
|
||||
|
||||
$xml = $doc->saveXML();
|
||||
|
||||
$this->assertEquals(
|
||||
'<?xml version="1.0"?>
|
||||
<d:supported-privilege-set xmlns:d="DAV:">' .
|
||||
'<d:supported-privilege>' .
|
||||
'<d:privilege>' .
|
||||
'<d:all/>' .
|
||||
'</d:privilege>' .
|
||||
'</d:supported-privilege>' .
|
||||
'</d:supported-privilege-set>
|
||||
', $xml);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testSimple
|
||||
*/
|
||||
function testSerializeAggregate() {
|
||||
|
||||
$prop = new Sabre_DAVACL_Property_SupportedPrivilegeSet(array(
|
||||
'privilege' => '{DAV:}all',
|
||||
'abstract' => true,
|
||||
'aggregates' => array(
|
||||
array(
|
||||
'privilege' => '{DAV:}read',
|
||||
),
|
||||
array(
|
||||
'privilege' => '{DAV:}write',
|
||||
'description' => 'booh',
|
||||
),
|
||||
),
|
||||
));
|
||||
|
||||
$doc = new DOMDocument();
|
||||
$root = $doc->createElementNS('DAV:', 'd:supported-privilege-set');
|
||||
|
||||
$doc->appendChild($root);
|
||||
|
||||
$server = new Sabre_DAV_Server();
|
||||
$prop->serialize($server, $root);
|
||||
|
||||
$xml = $doc->saveXML();
|
||||
|
||||
$this->assertEquals(
|
||||
'<?xml version="1.0"?>
|
||||
<d:supported-privilege-set xmlns:d="DAV:">' .
|
||||
'<d:supported-privilege>' .
|
||||
'<d:privilege>' .
|
||||
'<d:all/>' .
|
||||
'</d:privilege>' .
|
||||
'<d:abstract/>' .
|
||||
'<d:supported-privilege>' .
|
||||
'<d:privilege>' .
|
||||
'<d:read/>' .
|
||||
'</d:privilege>' .
|
||||
'</d:supported-privilege>' .
|
||||
'<d:supported-privilege>' .
|
||||
'<d:privilege>' .
|
||||
'<d:write/>' .
|
||||
'</d:privilege>' .
|
||||
'<d:description>booh</d:description>' .
|
||||
'</d:supported-privilege>' .
|
||||
'</d:supported-privilege>' .
|
||||
'</d:supported-privilege-set>
|
||||
', $xml);
|
||||
|
||||
}
|
||||
}
|
||||
311
dav/SabreDAV/tests/Sabre/DAVACL/SimplePluginTest.php
Normal file
311
dav/SabreDAV/tests/Sabre/DAVACL/SimplePluginTest.php
Normal file
|
|
@ -0,0 +1,311 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/DAV/Auth/MockBackend.php';
|
||||
require_once 'Sabre/DAVACL/MockPrincipal.php';
|
||||
require_once 'Sabre/DAVACL/MockACLNode.php';
|
||||
|
||||
class Sabre_DAVACL_SimplePluginTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testValues() {
|
||||
|
||||
$aclPlugin = new Sabre_DAVACL_Plugin();
|
||||
$this->assertEquals('acl',$aclPlugin->getPluginName());
|
||||
$this->assertEquals(array('access-control'), $aclPlugin->getFeatures());
|
||||
|
||||
$this->assertEquals(
|
||||
array(
|
||||
'{DAV:}expand-property',
|
||||
'{DAV:}principal-property-search',
|
||||
'{DAV:}principal-search-property-set'
|
||||
),
|
||||
$aclPlugin->getSupportedReportSet(''));
|
||||
|
||||
$this->assertEquals(array('ACL'), $aclPlugin->getMethods(''));
|
||||
|
||||
}
|
||||
|
||||
function testGetFlatPrivilegeSet() {
|
||||
|
||||
$expected = array(
|
||||
'{DAV:}all' => array(
|
||||
'privilege' => '{DAV:}all',
|
||||
'abstract' => true,
|
||||
'aggregates' => array(
|
||||
'{DAV:}read',
|
||||
'{DAV:}write',
|
||||
),
|
||||
'concrete' => null,
|
||||
),
|
||||
'{DAV:}read' => array(
|
||||
'privilege' => '{DAV:}read',
|
||||
'abstract' => false,
|
||||
'aggregates' => array(
|
||||
'{DAV:}read-acl',
|
||||
'{DAV:}read-current-user-privilege-set',
|
||||
),
|
||||
'concrete' => '{DAV:}read',
|
||||
),
|
||||
'{DAV:}read-acl' => array(
|
||||
'privilege' => '{DAV:}read-acl',
|
||||
'abstract' => true,
|
||||
'aggregates' => array(),
|
||||
'concrete' => '{DAV:}read',
|
||||
),
|
||||
'{DAV:}read-current-user-privilege-set' => array(
|
||||
'privilege' => '{DAV:}read-current-user-privilege-set',
|
||||
'abstract' => true,
|
||||
'aggregates' => array(),
|
||||
'concrete' => '{DAV:}read',
|
||||
),
|
||||
'{DAV:}write' => array(
|
||||
'privilege' => '{DAV:}write',
|
||||
'abstract' => false,
|
||||
'aggregates' => array(
|
||||
'{DAV:}write-acl',
|
||||
'{DAV:}write-properties',
|
||||
'{DAV:}write-content',
|
||||
'{DAV:}bind',
|
||||
'{DAV:}unbind',
|
||||
'{DAV:}unlock',
|
||||
),
|
||||
'concrete' => '{DAV:}write',
|
||||
),
|
||||
'{DAV:}write-acl' => array(
|
||||
'privilege' => '{DAV:}write-acl',
|
||||
'abstract' => true,
|
||||
'aggregates' => array(),
|
||||
'concrete' => '{DAV:}write',
|
||||
),
|
||||
'{DAV:}write-properties' => array(
|
||||
'privilege' => '{DAV:}write-properties',
|
||||
'abstract' => true,
|
||||
'aggregates' => array(),
|
||||
'concrete' => '{DAV:}write',
|
||||
),
|
||||
'{DAV:}write-content' => array(
|
||||
'privilege' => '{DAV:}write-content',
|
||||
'abstract' => true,
|
||||
'aggregates' => array(),
|
||||
'concrete' => '{DAV:}write',
|
||||
),
|
||||
'{DAV:}unlock' => array(
|
||||
'privilege' => '{DAV:}unlock',
|
||||
'abstract' => true,
|
||||
'aggregates' => array(),
|
||||
'concrete' => '{DAV:}write',
|
||||
),
|
||||
'{DAV:}bind' => array(
|
||||
'privilege' => '{DAV:}bind',
|
||||
'abstract' => true,
|
||||
'aggregates' => array(),
|
||||
'concrete' => '{DAV:}write',
|
||||
),
|
||||
'{DAV:}unbind' => array(
|
||||
'privilege' => '{DAV:}unbind',
|
||||
'abstract' => true,
|
||||
'aggregates' => array(),
|
||||
'concrete' => '{DAV:}write',
|
||||
),
|
||||
|
||||
);
|
||||
|
||||
$plugin = new Sabre_DAVACL_Plugin();
|
||||
$server = new Sabre_DAV_Server();
|
||||
$server->addPlugin($plugin);
|
||||
$this->assertEquals($expected, $plugin->getFlatPrivilegeSet(''));
|
||||
|
||||
}
|
||||
|
||||
function testCurrentUserPrincipalsNotLoggedIn() {
|
||||
|
||||
$acl = new Sabre_DAVACL_Plugin();
|
||||
$server = new Sabre_DAV_Server();
|
||||
$server->addPlugin($acl);
|
||||
|
||||
$this->assertEquals(array(),$acl->getCurrentUserPrincipals());
|
||||
|
||||
}
|
||||
|
||||
function testCurrentUserPrincipalsSimple() {
|
||||
|
||||
$tree = array(
|
||||
|
||||
new Sabre_DAV_SimpleCollection('principals', array(
|
||||
new Sabre_DAVACL_MockPrincipal('admin','principals/admin'),
|
||||
))
|
||||
|
||||
);
|
||||
|
||||
$acl = new Sabre_DAVACL_Plugin();
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->addPlugin($acl);
|
||||
|
||||
$auth = new Sabre_DAV_Auth_Plugin(new Sabre_DAV_Auth_MockBackend(),'SabreDAV');
|
||||
$server->addPlugin($auth);
|
||||
|
||||
//forcing login
|
||||
$auth->beforeMethod('GET','/');
|
||||
|
||||
$this->assertEquals(array('principals/admin'),$acl->getCurrentUserPrincipals());
|
||||
|
||||
}
|
||||
|
||||
function testCurrentUserPrincipalsGroups() {
|
||||
|
||||
$tree = array(
|
||||
|
||||
new Sabre_DAV_SimpleCollection('principals', array(
|
||||
new Sabre_DAVACL_MockPrincipal('admin','principals/admin',array('principals/administrators', 'principals/everyone')),
|
||||
new Sabre_DAVACL_MockPrincipal('administrators','principals/administrators',array('principals/groups'), array('principals/admin')),
|
||||
new Sabre_DAVACL_MockPrincipal('everyone','principals/everyone',array(), array('principals/admin')),
|
||||
new Sabre_DAVACL_MockPrincipal('groups','principals/groups',array(), array('principals/administrators')),
|
||||
))
|
||||
|
||||
);
|
||||
|
||||
$acl = new Sabre_DAVACL_Plugin();
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$server->addPlugin($acl);
|
||||
|
||||
$auth = new Sabre_DAV_Auth_Plugin(new Sabre_DAV_Auth_MockBackend(),'SabreDAV');
|
||||
$server->addPlugin($auth);
|
||||
|
||||
//forcing login
|
||||
$auth->beforeMethod('GET','/');
|
||||
|
||||
$expected = array(
|
||||
'principals/admin',
|
||||
'principals/administrators',
|
||||
'principals/everyone',
|
||||
'principals/groups',
|
||||
);
|
||||
|
||||
$this->assertEquals($expected,$acl->getCurrentUserPrincipals());
|
||||
|
||||
}
|
||||
|
||||
function testGetACL() {
|
||||
|
||||
$acl = array(
|
||||
array(
|
||||
'principal' => 'principals/admin',
|
||||
'privilege' => '{DAV:}read',
|
||||
),
|
||||
array(
|
||||
'principal' => 'principals/admin',
|
||||
'privilege' => '{DAV:}write',
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAVACL_MockACLNode('foo',$acl),
|
||||
);
|
||||
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$aclPlugin = new Sabre_DAVACL_Plugin();
|
||||
$server->addPlugin($aclPlugin);
|
||||
|
||||
$this->assertEquals($acl,$aclPlugin->getACL('foo'));
|
||||
|
||||
}
|
||||
|
||||
function testGetCurrentUserPrivilegeSet() {
|
||||
|
||||
$acl = array(
|
||||
array(
|
||||
'principal' => 'principals/admin',
|
||||
'privilege' => '{DAV:}read',
|
||||
),
|
||||
array(
|
||||
'principal' => 'principals/user1',
|
||||
'privilege' => '{DAV:}read',
|
||||
),
|
||||
array(
|
||||
'principal' => 'principals/admin',
|
||||
'privilege' => '{DAV:}write',
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAVACL_MockACLNode('foo',$acl),
|
||||
|
||||
new Sabre_DAV_SimpleCollection('principals', array(
|
||||
new Sabre_DAVACL_MockPrincipal('admin','principals/admin'),
|
||||
)),
|
||||
|
||||
);
|
||||
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$aclPlugin = new Sabre_DAVACL_Plugin();
|
||||
$server->addPlugin($aclPlugin);
|
||||
|
||||
$auth = new Sabre_DAV_Auth_Plugin(new Sabre_DAV_Auth_MockBackend(),'SabreDAV');
|
||||
$server->addPlugin($auth);
|
||||
|
||||
//forcing login
|
||||
$auth->beforeMethod('GET','/');
|
||||
|
||||
$expected = array(
|
||||
'{DAV:}write',
|
||||
'{DAV:}write-acl',
|
||||
'{DAV:}write-properties',
|
||||
'{DAV:}write-content',
|
||||
'{DAV:}bind',
|
||||
'{DAV:}unbind',
|
||||
'{DAV:}unlock',
|
||||
'{DAV:}read',
|
||||
'{DAV:}read-acl',
|
||||
'{DAV:}read-current-user-privilege-set',
|
||||
);
|
||||
|
||||
$this->assertEquals($expected,$aclPlugin->getCurrentUserPrivilegeSet('foo'));
|
||||
|
||||
}
|
||||
|
||||
function testCheckPrivileges() {
|
||||
|
||||
$acl = array(
|
||||
array(
|
||||
'principal' => 'principals/admin',
|
||||
'privilege' => '{DAV:}read',
|
||||
),
|
||||
array(
|
||||
'principal' => 'principals/user1',
|
||||
'privilege' => '{DAV:}read',
|
||||
),
|
||||
array(
|
||||
'principal' => 'principals/admin',
|
||||
'privilege' => '{DAV:}write',
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
$tree = array(
|
||||
new Sabre_DAVACL_MockACLNode('foo',$acl),
|
||||
|
||||
new Sabre_DAV_SimpleCollection('principals', array(
|
||||
new Sabre_DAVACL_MockPrincipal('admin','principals/admin'),
|
||||
)),
|
||||
|
||||
);
|
||||
|
||||
$server = new Sabre_DAV_Server($tree);
|
||||
$aclPlugin = new Sabre_DAVACL_Plugin();
|
||||
$server->addPlugin($aclPlugin);
|
||||
|
||||
$auth = new Sabre_DAV_Auth_Plugin(new Sabre_DAV_Auth_MockBackend(),'SabreDAV');
|
||||
$server->addPlugin($auth);
|
||||
|
||||
//forcing login
|
||||
//$auth->beforeMethod('GET','/');
|
||||
|
||||
$this->assertFalse($aclPlugin->checkPrivileges('foo', array('{DAV:}read'), Sabre_DAVACL_Plugin::R_PARENT, false));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
15
dav/SabreDAV/tests/Sabre/DAVACL/VersionTest.php
Normal file
15
dav/SabreDAV/tests/Sabre/DAVACL/VersionTest.php
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
|
||||
class Sabre_DAVACL_VersionTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testString() {
|
||||
|
||||
$v = Sabre_DAVACL_Version::VERSION;
|
||||
$this->assertEquals(-1, version_compare('1.0.0',$v));
|
||||
|
||||
$s = Sabre_DAVACL_Version::STABILITY;
|
||||
$this->assertTrue($s == 'alpha' || $s == 'beta' || $s =='stable');
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
131
dav/SabreDAV/tests/Sabre/DAVServerTest.php
Normal file
131
dav/SabreDAV/tests/Sabre/DAVServerTest.php
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
require_once 'Sabre/CalDAV/Backend/Mock.php';
|
||||
require_once 'Sabre/CardDAV/Backend/Mock.php';
|
||||
require_once 'Sabre/DAVACL/MockPrincipalBackend.php';
|
||||
|
||||
/**
|
||||
* This class may be used as a basis for other webdav-related unittests.
|
||||
*
|
||||
* This class is supposed to provide a reasonably big framework to quickly get
|
||||
* a testing environment running.
|
||||
*
|
||||
* @package Sabre
|
||||
* @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
|
||||
* @author Evert Pot (http://www.rooftopsolutions.nl/)
|
||||
* @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
|
||||
*/
|
||||
abstract class Sabre_DAVServerTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
protected $setupCalDAV = false;
|
||||
protected $setupCardDAV = false;
|
||||
|
||||
protected $caldavCalendars = array();
|
||||
protected $caldavCalendarObjects = array();
|
||||
|
||||
protected $carddavAddressBooks = array();
|
||||
protected $carddavCards = array();
|
||||
|
||||
/**
|
||||
* @var Sabre_DAV_Server
|
||||
*/
|
||||
protected $server;
|
||||
protected $tree = array();
|
||||
|
||||
protected $caldavBackend;
|
||||
protected $carddavBackend;
|
||||
protected $principalBackend;
|
||||
|
||||
/**
|
||||
* @var Sabre_CalDAV_Plugin
|
||||
*/
|
||||
protected $caldavPlugin;
|
||||
protected $carddavPlugin;
|
||||
|
||||
function setUp() {
|
||||
|
||||
$this->setUpBackends();
|
||||
$this->setUpTree();
|
||||
|
||||
$this->server = new Sabre_DAV_Server($this->tree);
|
||||
|
||||
if ($this->setupCalDAV) {
|
||||
$this->caldavPlugin = new Sabre_CalDAV_Plugin();
|
||||
$this->server->addPlugin($this->caldavPlugin);
|
||||
}
|
||||
if ($this->setupCardDAV) {
|
||||
$this->carddavPlugin = new Sabre_CardDAV_Plugin();
|
||||
$this->server->addPlugin($this->carddavPlugin);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes a request, and returns a response object.
|
||||
*
|
||||
* You can either pass an isntance of Sabre_HTTP_Request, or an array,
|
||||
* which will then be used as the _SERVER array.
|
||||
*
|
||||
* @param array|Sabre_HTTP_Request $request
|
||||
* @return Sabre_HTTP_Response
|
||||
*/
|
||||
function request($request) {
|
||||
|
||||
if (is_array($request)) {
|
||||
$request = new Sabre_HTTP_Request($request);
|
||||
}
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->httpResponse = new Sabre_HTTP_ResponseMock();
|
||||
$this->server->exec();
|
||||
|
||||
return $this->server->httpResponse;
|
||||
|
||||
}
|
||||
|
||||
function setUpTree() {
|
||||
|
||||
if ($this->setupCalDAV) {
|
||||
$this->tree[] = new Sabre_CalDAV_CalendarRootNode(
|
||||
$this->principalBackend,
|
||||
$this->caldavBackend
|
||||
);
|
||||
}
|
||||
if ($this->setupCardDAV) {
|
||||
$this->tree[] = new Sabre_CardDAV_AddressBookRoot(
|
||||
$this->principalBackend,
|
||||
$this->carddavBackend
|
||||
);
|
||||
}
|
||||
|
||||
if ($this->setupCardDAV || $this->setupCalDAV) {
|
||||
$this->tree[] = new Sabre_DAVACL_PrincipalCollection(
|
||||
$this->principalBackend
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function setUpBackends() {
|
||||
|
||||
if ($this->setupCalDAV) {
|
||||
$this->caldavBackend = new Sabre_CalDAV_Backend_Mock($this->caldavCalendars, $this->caldavCalendarObjects);
|
||||
}
|
||||
if ($this->setupCardDAV) {
|
||||
$this->carddavBackend = new Sabre_CardDAV_Backend_Mock($this->carddavAddressBooks, $this->carddavCards);
|
||||
}
|
||||
if ($this->setupCardDAV || $this->setupCalDAV) {
|
||||
$this->principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
function assertHTTPStatus($expectedStatus, Sabre_HTTP_Request $req) {
|
||||
|
||||
$resp = $this->request($req);
|
||||
$this->assertEquals($resp->getStatusMessage($expectedStatus), $resp->status,'Incorrect HTTP status received: ' . $resp->body);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
240
dav/SabreDAV/tests/Sabre/HTTP/AWSAuthTest.php
Normal file
240
dav/SabreDAV/tests/Sabre/HTTP/AWSAuthTest.php
Normal file
|
|
@ -0,0 +1,240 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
|
||||
class Sabre_HTTP_AWSAuthTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @var Sabre_HTTP_ResponseMock
|
||||
*/
|
||||
private $response;
|
||||
/**
|
||||
* @var Sabre_HTTP_AWSAuth
|
||||
*/
|
||||
private $auth;
|
||||
|
||||
const REALM = 'SabreDAV unittest';
|
||||
|
||||
public function setUp() {
|
||||
|
||||
$this->response = new Sabre_HTTP_ResponseMock();
|
||||
$this->auth = new Sabre_HTTP_AWSAuth();
|
||||
$this->auth->setRealm(self::REALM);
|
||||
$this->auth->setHTTPResponse($this->response);
|
||||
|
||||
}
|
||||
|
||||
public function testNoHeader() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
));
|
||||
|
||||
$this->auth->setHTTPRequest($request);
|
||||
|
||||
$result = $this->auth->init();
|
||||
|
||||
$this->assertFalse($result,'No AWS Authorization header was supplied, so we should have gotten false');
|
||||
$this->assertEquals(Sabre_HTTP_AWSAuth::ERR_NOAWSHEADER,$this->auth->errorCode);
|
||||
|
||||
}
|
||||
|
||||
public function testIncorrectContentMD5() {
|
||||
|
||||
$accessKey = 'accessKey';
|
||||
$secretKey = 'secretKey';
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
'HTTP_AUTHORIZATION' => "AWS $accessKey:sig",
|
||||
'HTTP_CONTENT_MD5' => 'garbage',
|
||||
'REQUEST_URI' => '/',
|
||||
));
|
||||
|
||||
$this->auth->setHTTPRequest($request);
|
||||
$this->auth->init();
|
||||
$result = $this->auth->validate($secretKey);
|
||||
|
||||
$this->assertFalse($result);
|
||||
$this->assertEquals(Sabre_HTTP_AWSAuth::ERR_MD5CHECKSUMWRONG,$this->auth->errorCode);
|
||||
|
||||
}
|
||||
|
||||
public function testNoDate() {
|
||||
|
||||
$accessKey = 'accessKey';
|
||||
$secretKey = 'secretKey';
|
||||
$content = 'thisisthebody';
|
||||
$contentMD5 = base64_encode(md5($content,true));
|
||||
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'POST',
|
||||
'HTTP_AUTHORIZATION' => "AWS $accessKey:sig",
|
||||
'HTTP_CONTENT_MD5' => $contentMD5,
|
||||
));
|
||||
|
||||
$request->setBody($content);
|
||||
|
||||
$this->auth->setHTTPRequest($request);
|
||||
$this->auth->init();
|
||||
$result = $this->auth->validate($secretKey);
|
||||
|
||||
$this->assertFalse($result);
|
||||
$this->assertEquals(Sabre_HTTP_AWSAuth::ERR_INVALIDDATEFORMAT,$this->auth->errorCode);
|
||||
|
||||
}
|
||||
|
||||
public function testFutureDate() {
|
||||
|
||||
$accessKey = 'accessKey';
|
||||
$secretKey = 'secretKey';
|
||||
$content = 'thisisthebody';
|
||||
$contentMD5 = base64_encode(md5($content,true));
|
||||
|
||||
$date = new DateTime('@' . (time() + (60*20)));
|
||||
$date->setTimeZone(new DateTimeZone('GMT'));
|
||||
$date = $date->format('D, d M Y H:i:s \\G\\M\\T');
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'POST',
|
||||
'HTTP_AUTHORIZATION' => "AWS $accessKey:sig",
|
||||
'HTTP_CONTENT_MD5' => $contentMD5,
|
||||
'HTTP_DATE' => $date,
|
||||
));
|
||||
|
||||
$request->setBody($content);
|
||||
|
||||
$this->auth->setHTTPRequest($request);
|
||||
$this->auth->init();
|
||||
$result = $this->auth->validate($secretKey);
|
||||
|
||||
$this->assertFalse($result);
|
||||
$this->assertEquals(Sabre_HTTP_AWSAuth::ERR_REQUESTTIMESKEWED,$this->auth->errorCode);
|
||||
|
||||
}
|
||||
|
||||
public function testPastDate() {
|
||||
|
||||
$accessKey = 'accessKey';
|
||||
$secretKey = 'secretKey';
|
||||
$content = 'thisisthebody';
|
||||
$contentMD5 = base64_encode(md5($content,true));
|
||||
|
||||
$date = new DateTime('@' . (time() - (60*20)));
|
||||
$date->setTimeZone(new DateTimeZone('GMT'));
|
||||
$date = $date->format('D, d M Y H:i:s \\G\\M\\T');
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'POST',
|
||||
'HTTP_AUTHORIZATION' => "AWS $accessKey:sig",
|
||||
'HTTP_CONTENT_MD5' => $contentMD5,
|
||||
'HTTP_X_AMZ_DATE' => $date,
|
||||
));
|
||||
|
||||
$request->setBody($content);
|
||||
|
||||
$this->auth->setHTTPRequest($request);
|
||||
$this->auth->init();
|
||||
$result = $this->auth->validate($secretKey);
|
||||
|
||||
$this->assertFalse($result);
|
||||
$this->assertEquals(Sabre_HTTP_AWSAuth::ERR_REQUESTTIMESKEWED,$this->auth->errorCode);
|
||||
|
||||
}
|
||||
|
||||
public function testIncorrectSignature() {
|
||||
|
||||
$accessKey = 'accessKey';
|
||||
$secretKey = 'secretKey';
|
||||
$content = 'thisisthebody';
|
||||
|
||||
$contentMD5 = base64_encode(md5($content,true));
|
||||
|
||||
$date = new DateTime('now');
|
||||
$date->setTimeZone(new DateTimeZone('GMT'));
|
||||
$date = $date->format('D, d M Y H:i:s \\G\\M\\T');
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'POST',
|
||||
'HTTP_AUTHORIZATION' => "AWS $accessKey:sig",
|
||||
'HTTP_CONTENT_MD5' => $contentMD5,
|
||||
'HTTP_X_AMZ_DATE' => $date,
|
||||
'REQUEST_URI' => '/',
|
||||
));
|
||||
|
||||
$request->setBody($content);
|
||||
|
||||
$this->auth->setHTTPRequest($request);
|
||||
$this->auth->init();
|
||||
$result = $this->auth->validate($secretKey);
|
||||
|
||||
$this->assertFalse($result);
|
||||
$this->assertEquals(Sabre_HTTP_AWSAuth::ERR_INVALIDSIGNATURE,$this->auth->errorCode);
|
||||
|
||||
}
|
||||
|
||||
public function testValidRequest() {
|
||||
|
||||
$accessKey = 'accessKey';
|
||||
$secretKey = 'secretKey';
|
||||
$content = 'thisisthebody';
|
||||
$contentMD5 = base64_encode(md5($content,true));
|
||||
|
||||
$date = new DateTime('now');
|
||||
$date->setTimeZone(new DateTimeZone('GMT'));
|
||||
$date = $date->format('D, d M Y H:i:s \\G\\M\\T');
|
||||
|
||||
|
||||
$sig = base64_encode($this->hmacsha1($secretKey,
|
||||
"POST\n$contentMD5\n\n$date\nx-amz-date:$date\n/evert"
|
||||
));
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'POST',
|
||||
'HTTP_AUTHORIZATION' => "AWS $accessKey:$sig",
|
||||
'HTTP_CONTENT_MD5' => $contentMD5,
|
||||
'HTTP_X_AMZ_DATE' => $date,
|
||||
'REQUEST_URI' => '/evert',
|
||||
));
|
||||
|
||||
$request->setBody($content);
|
||||
|
||||
$this->auth->setHTTPRequest($request);
|
||||
$this->auth->init();
|
||||
$result = $this->auth->validate($secretKey);
|
||||
|
||||
$this->assertTrue($result,'Signature did not validate, got errorcode ' . $this->auth->errorCode);
|
||||
$this->assertEquals($accessKey,$this->auth->getAccessKey());
|
||||
|
||||
}
|
||||
|
||||
public function test401() {
|
||||
|
||||
$this->auth->requireLogin();
|
||||
$test = preg_match('/^AWS$/',$this->response->headers['WWW-Authenticate'],$matches);
|
||||
$this->assertTrue($test==true,'The WWW-Authenticate response didn\'t match our pattern');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates an HMAC-SHA1 signature
|
||||
*
|
||||
* @param string $key
|
||||
* @param string $message
|
||||
* @return string
|
||||
*/
|
||||
private function hmacsha1($key, $message) {
|
||||
|
||||
$blocksize=64;
|
||||
if (strlen($key)>$blocksize)
|
||||
$key=pack('H*', sha1($key));
|
||||
$key=str_pad($key,$blocksize,chr(0x00));
|
||||
$ipad=str_repeat(chr(0x36),$blocksize);
|
||||
$opad=str_repeat(chr(0x5c),$blocksize);
|
||||
$hmac = pack('H*',sha1(($key^$opad).pack('H*',sha1(($key^$ipad).$message))));
|
||||
return $hmac;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
130
dav/SabreDAV/tests/Sabre/HTTP/BasicAuthTest.php
Normal file
130
dav/SabreDAV/tests/Sabre/HTTP/BasicAuthTest.php
Normal file
|
|
@ -0,0 +1,130 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
|
||||
class Sabre_HTTP_BasicAuthTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @var Sabre_HTTP_ResponseMock
|
||||
*/
|
||||
private $response;
|
||||
/**
|
||||
* @var Sabre_HTTP_BasicAuth
|
||||
*/
|
||||
private $basicAuth;
|
||||
|
||||
function setUp() {
|
||||
|
||||
$this->response = new Sabre_HTTP_ResponseMock();
|
||||
$this->basicAuth = new Sabre_HTTP_BasicAuth();
|
||||
$this->basicAuth->setHTTPResponse($this->response);
|
||||
|
||||
}
|
||||
|
||||
function testGetUserPassApache() {
|
||||
|
||||
$server = array(
|
||||
'PHP_AUTH_USER' => 'admin',
|
||||
'PHP_AUTH_PW' => '1234',
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($server);
|
||||
$this->basicAuth->setHTTPRequest($request);
|
||||
|
||||
$userPass = $this->basicAuth->getUserPass();
|
||||
|
||||
$this->assertEquals(
|
||||
array('admin','1234'),
|
||||
$userPass,
|
||||
'We did not get the username and password we expected'
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function testGetUserPassIIS() {
|
||||
|
||||
$server = array(
|
||||
'HTTP_AUTHORIZATION' => 'Basic ' . base64_encode('admin:1234'),
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($server);
|
||||
$this->basicAuth->setHTTPRequest($request);
|
||||
|
||||
$userPass = $this->basicAuth->getUserPass();
|
||||
|
||||
$this->assertEquals(
|
||||
array('admin','1234'),
|
||||
$userPass,
|
||||
'We did not get the username and password we expected'
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function testGetUserPassWithColon() {
|
||||
|
||||
$server = array(
|
||||
'HTTP_AUTHORIZATION' => 'Basic ' . base64_encode('admin:1234:5678'),
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($server);
|
||||
$this->basicAuth->setHTTPRequest($request);
|
||||
|
||||
$userPass = $this->basicAuth->getUserPass();
|
||||
|
||||
$this->assertEquals(
|
||||
array('admin','1234:5678'),
|
||||
$userPass,
|
||||
'We did not get the username and password we expected'
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function testGetUserPassApacheEdgeCase() {
|
||||
|
||||
$server = array(
|
||||
'REDIRECT_HTTP_AUTHORIZATION' => 'Basic ' . base64_encode('admin:1234'),
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request($server);
|
||||
$this->basicAuth->setHTTPRequest($request);
|
||||
|
||||
$userPass = $this->basicAuth->getUserPass();
|
||||
|
||||
$this->assertEquals(
|
||||
array('admin','1234'),
|
||||
$userPass,
|
||||
'We did not get the username and password we expected'
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function testGetUserPassNothing() {
|
||||
|
||||
$this->assertEquals(
|
||||
false,
|
||||
$this->basicAuth->getUserPass()
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function testRequireLogin() {
|
||||
|
||||
$this->basicAuth->requireLogin();
|
||||
$this->assertEquals('SabreDAV',$this->basicAuth->getRealm());
|
||||
$this->assertEquals(
|
||||
'HTTP/1.1 401 Unauthorized',
|
||||
$this->response->status,
|
||||
'We expected a 401 status to be set'
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
'Basic realm="SabreDAV"',
|
||||
$this->response->headers['WWW-Authenticate'],
|
||||
'The WWW-Autenticate header was not set!'
|
||||
);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
226
dav/SabreDAV/tests/Sabre/HTTP/DigestAuthTest.php
Normal file
226
dav/SabreDAV/tests/Sabre/HTTP/DigestAuthTest.php
Normal file
|
|
@ -0,0 +1,226 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
|
||||
class Sabre_HTTP_DigestAuthTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @var Sabre_HTTP_ResponseMock
|
||||
*/
|
||||
private $response;
|
||||
/**
|
||||
* @var Sabre_HTTP_DigestAuth
|
||||
*/
|
||||
private $auth;
|
||||
|
||||
const REALM = 'SabreDAV unittest';
|
||||
|
||||
public function setUp() {
|
||||
|
||||
$this->response = new Sabre_HTTP_ResponseMock();
|
||||
$this->auth = new Sabre_HTTP_DigestAuth();
|
||||
$this->auth->setRealm(self::REALM);
|
||||
$this->auth->setHTTPResponse($this->response);
|
||||
|
||||
}
|
||||
|
||||
public function testDigest() {
|
||||
|
||||
list($nonce,$opaque) = $this->getServerTokens();
|
||||
|
||||
$username = 'admin';
|
||||
$password = 12345;
|
||||
$nc = '00002';
|
||||
$cnonce = uniqid();
|
||||
|
||||
$digestHash = md5(
|
||||
md5($username . ':' . self::REALM . ':' . $password) . ':' .
|
||||
$nonce . ':' .
|
||||
$nc . ':' .
|
||||
$cnonce . ':' .
|
||||
'auth:' .
|
||||
md5('GET' . ':' . '/')
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
'PHP_AUTH_DIGEST' => 'username="'.$username.'", realm="' . self::REALM . '", nonce="' . $nonce . '", uri="/", response="' . $digestHash . '", opaque="' . $opaque . '", qop=auth,nc='.$nc.',cnonce="' . $cnonce . '"',
|
||||
));
|
||||
|
||||
$this->auth->setHTTPRequest($request);
|
||||
$this->auth->init();
|
||||
|
||||
$this->assertEquals($username,$this->auth->getUserName());
|
||||
$this->assertEquals(self::REALM,$this->auth->getRealm());
|
||||
$this->assertTrue($this->auth->validateA1(md5($username . ':' . self::REALM . ':' . $password)),'Authentication is deemed invalid through validateA1');
|
||||
$this->assertTrue($this->auth->validatePassword($password),'Authentication is deemed invalid through validatePassword');
|
||||
|
||||
}
|
||||
|
||||
public function testDigestCGIFormat() {
|
||||
|
||||
list($nonce,$opaque) = $this->getServerTokens();
|
||||
|
||||
$username = 'admin';
|
||||
$password = 12345;
|
||||
$nc = '00002';
|
||||
$cnonce = uniqid();
|
||||
|
||||
$digestHash = md5(
|
||||
md5($username . ':' . self::REALM . ':' . $password) . ':' .
|
||||
$nonce . ':' .
|
||||
$nc . ':' .
|
||||
$cnonce . ':' .
|
||||
'auth:' .
|
||||
md5('GET' . ':' . '/')
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
'HTTP_AUTHORIZATION' => 'Digest username="'.$username.'", realm="' . self::REALM . '", nonce="' . $nonce . '", uri="/", response="' . $digestHash . '", opaque="' . $opaque . '", qop=auth,nc='.$nc.',cnonce="' . $cnonce . '"',
|
||||
));
|
||||
|
||||
$this->auth->setHTTPRequest($request);
|
||||
$this->auth->init();
|
||||
|
||||
$this->assertTrue($this->auth->validateA1(md5($username . ':' . self::REALM . ':' . $password)),'Authentication is deemed invalid through validateA1');
|
||||
$this->assertTrue($this->auth->validatePassword($password),'Authentication is deemed invalid through validatePassword');
|
||||
|
||||
}
|
||||
|
||||
public function testDigestApacheEdgeCase() {
|
||||
|
||||
list($nonce,$opaque) = $this->getServerTokens();
|
||||
|
||||
$username = 'admin';
|
||||
$password = 12345;
|
||||
$nc = '00002';
|
||||
$cnonce = uniqid();
|
||||
|
||||
$digestHash = md5(
|
||||
md5($username . ':' . self::REALM . ':' . $password) . ':' .
|
||||
$nonce . ':' .
|
||||
$nc . ':' .
|
||||
$cnonce . ':' .
|
||||
'auth:' .
|
||||
md5('GET' . ':' . '/')
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
'REDIRECT_HTTP_AUTHORIZATION' => 'Digest username="'.$username.'", realm="' . self::REALM . '", nonce="' . $nonce . '", uri="/", response="' . $digestHash . '", opaque="' . $opaque . '", qop=auth,nc='.$nc.',cnonce="' . $cnonce . '"',
|
||||
));
|
||||
|
||||
$this->auth->setHTTPRequest($request);
|
||||
$this->auth->init();
|
||||
|
||||
$this->assertTrue($this->auth->validateA1(md5($username . ':' . self::REALM . ':' . $password)),'Authentication is deemed invalid through validateA1');
|
||||
$this->assertTrue($this->auth->validatePassword($password),'Authentication is deemed invalid through validatePassword');
|
||||
|
||||
}
|
||||
|
||||
public function testInvalidDigest() {
|
||||
|
||||
list($nonce,$opaque) = $this->getServerTokens();
|
||||
|
||||
$username = 'admin';
|
||||
$password = 12345;
|
||||
$nc = '00002';
|
||||
$cnonce = uniqid();
|
||||
|
||||
$digestHash = md5(
|
||||
md5($username . ':' . self::REALM . ':' . $password) . ':' .
|
||||
$nonce . ':' .
|
||||
$nc . ':' .
|
||||
$cnonce . ':' .
|
||||
'auth:' .
|
||||
md5('GET' . ':' . '/')
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
'PHP_AUTH_DIGEST' => 'username="'.$username.'", realm="' . self::REALM . '", nonce="' . $nonce . '", uri="/", response="' . $digestHash . '", opaque="' . $opaque . '", qop=auth,nc='.$nc.',cnonce="' . $cnonce . '"',
|
||||
));
|
||||
|
||||
$this->auth->setHTTPRequest($request);
|
||||
$this->auth->init();
|
||||
|
||||
$this->assertFalse($this->auth->validateA1(md5($username . ':' . self::REALM . ':' . ($password . 'randomness'))),'Authentication is deemed invalid through validateA1');
|
||||
|
||||
}
|
||||
|
||||
public function testInvalidDigest2() {
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
'HTTP_AUTHORIZATION' => 'basic blablabla',
|
||||
));
|
||||
|
||||
$this->auth->setHTTPRequest($request);
|
||||
$this->auth->init();
|
||||
|
||||
$this->assertFalse($this->auth->validateA1(md5('user:realm:password')));
|
||||
|
||||
}
|
||||
|
||||
|
||||
public function testDigestAuthInt() {
|
||||
|
||||
$this->auth->setQOP(Sabre_HTTP_DigestAuth::QOP_AUTHINT | Sabre_HTTP_DigestAuth::QOP_AUTH);
|
||||
list($nonce,$opaque) = $this->getServerTokens(Sabre_HTTP_DigestAuth::QOP_AUTHINT| Sabre_HTTP_DigestAuth::QOP_AUTH);
|
||||
|
||||
$username = 'admin';
|
||||
$password = 12345;
|
||||
$nc = '00003';
|
||||
$cnonce = uniqid();
|
||||
|
||||
$digestHash = md5(
|
||||
md5($username . ':' . self::REALM . ':' . $password) . ':' .
|
||||
$nonce . ':' .
|
||||
$nc . ':' .
|
||||
$cnonce . ':' .
|
||||
'auth-int:' .
|
||||
md5('POST' . ':' . '/' . ':' . md5('body'))
|
||||
);
|
||||
|
||||
$request = new Sabre_HTTP_Request(array(
|
||||
'REQUEST_METHOD' => 'POST',
|
||||
'PHP_AUTH_DIGEST' => 'username="'.$username.'", realm="' . self::REALM . '", nonce="' . $nonce . '", uri="/", response="' . $digestHash . '", opaque="' . $opaque . '", qop=auth-int,nc='.$nc.',cnonce="' . $cnonce . '"',
|
||||
));
|
||||
$request->setBody('body');
|
||||
|
||||
$this->auth->setHTTPRequest($request);
|
||||
|
||||
$this->auth->init();
|
||||
|
||||
$this->assertTrue($this->auth->validateA1(md5($username . ':' . self::REALM . ':' . $password)),'Authentication is deemed invalid through validateA1');
|
||||
|
||||
}
|
||||
|
||||
private function getServerTokens($qop = Sabre_HTTP_DigestAuth::QOP_AUTH) {
|
||||
|
||||
$this->auth->requireLogin();
|
||||
|
||||
switch($qop) {
|
||||
case Sabre_HTTP_DigestAuth::QOP_AUTH : $qopstr='auth'; break;
|
||||
case Sabre_HTTP_DigestAuth::QOP_AUTHINT : $qopstr='auth-int'; break;
|
||||
default : $qopstr='auth,auth-int'; break;
|
||||
}
|
||||
|
||||
$test = preg_match('/Digest realm="'.self::REALM.'",qop="'.$qopstr.'",nonce="([0-9a-f]*)",opaque="([0-9a-f]*)"/',
|
||||
$this->response->headers['WWW-Authenticate'],$matches);
|
||||
|
||||
$this->assertTrue($test==true,'The WWW-Authenticate response didn\'t match our pattern. We received: ' . $this->response->headers['WWW-Authenticate']);
|
||||
|
||||
$nonce = $matches[1];
|
||||
$opaque = $matches[2];
|
||||
|
||||
// Reset our environment
|
||||
$this->setUp();
|
||||
$this->auth->setQOP($qop);
|
||||
|
||||
return array($nonce,$opaque);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
148
dav/SabreDAV/tests/Sabre/HTTP/RequestTest.php
Normal file
148
dav/SabreDAV/tests/Sabre/HTTP/RequestTest.php
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @covers Sabre_HTTP_Request
|
||||
*/
|
||||
class Sabre_HTTP_RequestTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @var Sabre_HTTP_Request
|
||||
*/
|
||||
private $request;
|
||||
|
||||
function setUp() {
|
||||
|
||||
$server = array(
|
||||
'HTTP_HOST' => 'www.example.org',
|
||||
'REQUEST_METHOD' => 'PUT',
|
||||
'REQUEST_URI' => '/testuri/',
|
||||
'CONTENT_TYPE' => 'text/xml',
|
||||
);
|
||||
|
||||
$this->request = new Sabre_HTTP_Request($server);
|
||||
|
||||
}
|
||||
|
||||
function testGetHeader() {
|
||||
|
||||
$this->assertEquals('www.example.org', $this->request->getHeader('Host'));
|
||||
$this->assertEquals('text/xml', $this->request->getHeader('Content-Type'));
|
||||
|
||||
}
|
||||
|
||||
function testGetNonExistantHeader() {
|
||||
|
||||
$this->assertNull($this->request->getHeader('doesntexist'));
|
||||
$this->assertNull($this->request->getHeader('Content-Length'));
|
||||
|
||||
}
|
||||
|
||||
function testGetHeaders() {
|
||||
|
||||
$expected = array(
|
||||
'host' => 'www.example.org',
|
||||
'content-type' => 'text/xml',
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $this->request->getHeaders());
|
||||
|
||||
}
|
||||
|
||||
function testGetMethod() {
|
||||
|
||||
$this->assertEquals('PUT', $this->request->getMethod(), 'It seems as if we didn\'t get a valid HTTP Request method back');
|
||||
|
||||
}
|
||||
|
||||
function testGetUri() {
|
||||
|
||||
$this->assertEquals('/testuri/', $this->request->getUri(), 'We got an invalid uri back');
|
||||
|
||||
}
|
||||
|
||||
function testSetGetBody() {
|
||||
|
||||
$h = fopen('php://memory','r+');
|
||||
fwrite($h,'testing');
|
||||
rewind($h);
|
||||
$this->request->setBody($h);
|
||||
$this->assertEquals('testing',$this->request->getBody(true),'We didn\'t get our testbody back');
|
||||
|
||||
}
|
||||
|
||||
function testSetGetBodyStream() {
|
||||
|
||||
$h = fopen('php://memory','r+');
|
||||
fwrite($h,'testing');
|
||||
rewind($h);
|
||||
$this->request->setBody($h);
|
||||
$this->assertEquals('testing',stream_get_contents($this->request->getBody()),'We didn\'t get our testbody back');
|
||||
|
||||
}
|
||||
|
||||
|
||||
function testDefaultInputStream() {
|
||||
|
||||
$h = fopen('php://memory','r+');
|
||||
fwrite($h,'testing');
|
||||
rewind($h);
|
||||
|
||||
$previousValue = Sabre_HTTP_Request::$defaultInputStream;
|
||||
Sabre_HTTP_Request::$defaultInputStream = $h;
|
||||
|
||||
$this->assertEquals('testing',$this->request->getBody(true),'We didn\'t get our testbody back');
|
||||
Sabre_HTTP_Request::$defaultInputStream = $previousValue;
|
||||
|
||||
}
|
||||
|
||||
function testGetAbsoluteUri() {
|
||||
|
||||
$s = array(
|
||||
'HTTP_HOST' => 'sabredav.org',
|
||||
'REQUEST_URI' => '/foo'
|
||||
);
|
||||
|
||||
$r = new Sabre_HTTP_Request($s);
|
||||
|
||||
$this->assertEquals('http://sabredav.org/foo', $r->getAbsoluteUri());
|
||||
|
||||
$s = array(
|
||||
'HTTP_HOST' => 'sabredav.org',
|
||||
'REQUEST_URI' => '/foo',
|
||||
'HTTPS' => 'on',
|
||||
);
|
||||
|
||||
$r = new Sabre_HTTP_Request($s);
|
||||
|
||||
$this->assertEquals('https://sabredav.org/foo', $r->getAbsoluteUri());
|
||||
|
||||
}
|
||||
|
||||
function testGetQueryString() {
|
||||
|
||||
$s = array(
|
||||
'QUERY_STRING' => 'bla',
|
||||
);
|
||||
|
||||
$r = new Sabre_HTTP_Request($s);
|
||||
$this->assertEquals('bla', $r->getQueryString());
|
||||
|
||||
$s = array();
|
||||
|
||||
$r = new Sabre_HTTP_Request($s);
|
||||
$this->assertEquals('', $r->getQueryString());
|
||||
|
||||
}
|
||||
|
||||
function testGetPostVars() {
|
||||
|
||||
$post = array(
|
||||
'bla' => 'foo',
|
||||
);
|
||||
$r = new Sabre_HTTP_Request(array(),$post);
|
||||
$this->assertEquals($post, $r->getPostVars('bla'));
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
27
dav/SabreDAV/tests/Sabre/HTTP/ResponseMock.php
Normal file
27
dav/SabreDAV/tests/Sabre/HTTP/ResponseMock.php
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
class Sabre_HTTP_ResponseMock extends Sabre_HTTP_Response {
|
||||
|
||||
public $headers = array();
|
||||
public $status = '';
|
||||
public $body = '';
|
||||
|
||||
function setHeader($name,$value,$overwrite = true) {
|
||||
|
||||
$this->headers[$name] = $value;
|
||||
|
||||
}
|
||||
|
||||
function sendStatus($code) {
|
||||
|
||||
$this->status = $this->getStatusMessage($code);
|
||||
|
||||
}
|
||||
|
||||
function sendBody($body) {
|
||||
|
||||
$this->body = $body;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
61
dav/SabreDAV/tests/Sabre/HTTP/ResponseTest.php
Normal file
61
dav/SabreDAV/tests/Sabre/HTTP/ResponseTest.php
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
<?php
|
||||
|
||||
require_once 'Sabre/HTTP/ResponseMock.php';
|
||||
|
||||
class Sabre_HTTP_ResponseTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* @var Sabre_HTTP_ResponseMock
|
||||
*/
|
||||
private $response;
|
||||
|
||||
function setUp() {
|
||||
|
||||
$this->response = new Sabre_HTTP_ResponseMock();
|
||||
|
||||
}
|
||||
|
||||
function testGetStatusMessage() {
|
||||
|
||||
$msg = $this->response->getStatusMessage(200);
|
||||
$this->assertEquals('HTTP/1.1 200 OK',$msg);
|
||||
|
||||
}
|
||||
|
||||
function testSetHeader() {
|
||||
|
||||
$this->response->setHeader('Content-Type','text/html');
|
||||
$this->assertEquals('text/html', $this->response->headers['Content-Type']);
|
||||
|
||||
|
||||
}
|
||||
|
||||
function testSendStatus() {
|
||||
|
||||
$this->response->sendStatus(404);
|
||||
$this->assertEquals('HTTP/1.1 404 Not Found', $this->response->status);
|
||||
|
||||
}
|
||||
|
||||
function testSendBody() {
|
||||
|
||||
ob_start();
|
||||
$response = new Sabre_HTTP_Response();
|
||||
$response->sendBody('hello');
|
||||
$this->assertEquals('hello',ob_get_clean());
|
||||
|
||||
}
|
||||
|
||||
function testSendBodyStream() {
|
||||
|
||||
ob_start();
|
||||
$stream = fopen('php://memory','r+');
|
||||
fwrite($stream,'hello');
|
||||
rewind($stream);
|
||||
$response = new Sabre_HTTP_Response();
|
||||
$response->sendBody($stream);
|
||||
$this->assertEquals('hello',ob_get_clean());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
64
dav/SabreDAV/tests/Sabre/HTTP/UtilTest.php
Normal file
64
dav/SabreDAV/tests/Sabre/HTTP/UtilTest.php
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
<?php
|
||||
|
||||
class Sabre_Util_UtilTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testParseHTTPDate() {
|
||||
|
||||
$times = array(
|
||||
'Wed, 13 Oct 2010 10:26:00 GMT',
|
||||
'Wednesday, 13-Oct-10 10:26:00 GMT',
|
||||
'Wed Oct 13 10:26:00 2010',
|
||||
);
|
||||
|
||||
$expected = 1286965560;
|
||||
|
||||
foreach($times as $time) {
|
||||
$result = Sabre_HTTP_Util::parseHTTPDate($time);
|
||||
$this->assertEquals($expected, $result->format('U'));
|
||||
}
|
||||
|
||||
$result = Sabre_HTTP_Util::parseHTTPDate('Wed Oct 6 10:26:00 2010');
|
||||
$this->assertEquals(1286360760, $result->format('U'));
|
||||
|
||||
}
|
||||
|
||||
function testParseHTTPDateFail() {
|
||||
|
||||
$times = array(
|
||||
//random string
|
||||
'NOW',
|
||||
// not-GMT timezone
|
||||
'Wednesday, 13-Oct-10 10:26:00 UTC',
|
||||
// No space before the 6
|
||||
'Wed Oct 6 10:26:00 2010',
|
||||
);
|
||||
|
||||
foreach($times as $time) {
|
||||
$this->assertFalse(Sabre_HTTP_Util::parseHTTPDate($time), 'We used the string: ' . $time);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function testTimezones() {
|
||||
|
||||
$default = date_default_timezone_get();
|
||||
date_default_timezone_set('Europe/Amsterdam');
|
||||
|
||||
$this->testParseHTTPDate();
|
||||
|
||||
date_default_timezone_set($default);
|
||||
|
||||
}
|
||||
|
||||
function testToHTTPDate() {
|
||||
|
||||
$dt = new DateTime('2011-12-10 12:00:00 +0200');
|
||||
|
||||
$this->assertEquals(
|
||||
'Sat, 10 Dec 2011 10:00:00 GMT',
|
||||
Sabre_HTTP_Util::toHTTPDate($dt)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
15
dav/SabreDAV/tests/Sabre/HTTP/VersionTest.php
Normal file
15
dav/SabreDAV/tests/Sabre/HTTP/VersionTest.php
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
|
||||
class Sabre_HTTP_VersionTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testString() {
|
||||
|
||||
$v = Sabre_HTTP_Version::VERSION;
|
||||
$this->assertEquals(-1, version_compare('1.0.0',$v));
|
||||
|
||||
$s = Sabre_HTTP_Version::STABILITY;
|
||||
$this->assertTrue($s == 'alpha' || $s == 'beta' || $s =='stable');
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
49
dav/SabreDAV/tests/Sabre/TestUtil.php
Normal file
49
dav/SabreDAV/tests/Sabre/TestUtil.php
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
<?php
|
||||
|
||||
class Sabre_TestUtil {
|
||||
|
||||
/**
|
||||
* This function deletes all the contents of the temporary directory.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
static function clearTempDir() {
|
||||
|
||||
self::deleteTree(SABRE_TEMPDIR,false);
|
||||
|
||||
}
|
||||
|
||||
|
||||
static private function deleteTree($path,$deleteRoot = true) {
|
||||
|
||||
foreach(scandir($path) as $node) {
|
||||
|
||||
if ($node=='.' || $node=='..') continue;
|
||||
$myPath = $path.'/'. $node;
|
||||
if (is_file($myPath)) {
|
||||
unlink($myPath);
|
||||
} else {
|
||||
self::deleteTree($myPath);
|
||||
}
|
||||
|
||||
}
|
||||
if ($deleteRoot) {
|
||||
rmdir($path);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static function getMySQLDB() {
|
||||
|
||||
try {
|
||||
$pdo = new PDO(SABRE_MYSQLDSN,SABRE_MYSQLUSER,SABRE_MYSQLPASS);
|
||||
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
|
||||
return $pdo;
|
||||
} catch (PDOException $e) {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue