3 require_once 'Sabre/CalDAV/Backend/Mock.php';
4 require_once 'Sabre/DAVACL/MockPrincipalBackend.php';
5 require_once 'Sabre/HTTP/ResponseMock.php';
7 class Sabre_CalDAV_ValidateICalTest extends PHPUnit_Framework_TestCase {
10 * @var Sabre_DAV_Server
14 * @var Sabre_CalDAV_Backend_Mock
16 protected $calBackend;
23 'principaluri' => 'principals/admin',
28 $this->calBackend = new Sabre_CalDAV_Backend_Mock($calendars,array());
29 $principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
32 new Sabre_CalDAV_CalendarRootNode($principalBackend, $this->calBackend),
35 $this->server = new Sabre_DAV_Server($tree);
36 $this->server->debugExceptions = true;
38 $plugin = new Sabre_CalDAV_Plugin();
39 $this->server->addPlugin($plugin);
41 $response = new Sabre_HTTP_ResponseMock();
42 $this->server->httpResponse = $response;
46 function request(Sabre_HTTP_Request $request) {
48 $this->server->httpRequest = $request;
49 $this->server->exec();
51 return $this->server->httpResponse;
55 function testCreateFile() {
57 $request = new Sabre_HTTP_Request(array(
58 'REQUEST_METHOD' => 'PUT',
59 'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics',
62 $response = $this->request($request);
64 $this->assertEquals('HTTP/1.1 415 Unsupported Media Type', $response->status);
68 function testCreateFileValid() {
70 $request = new Sabre_HTTP_Request(array(
71 'REQUEST_METHOD' => 'PUT',
72 'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics',
74 $request->setBody("BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nUID:foo\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n");
76 $response = $this->request($request);
78 $this->assertEquals('HTTP/1.1 201 Created', $response->status, 'Incorrect status returned! Full response body: ' . $response->body);
80 'uri' => 'blabla.ics',
81 'calendardata' => "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nUID:foo\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n",
82 'calendarid' => 'calendar1',
85 $this->assertEquals($expected, $this->calBackend->getCalendarObject('calendar1','blabla.ics'));
89 function testCreateFileNoComponents() {
91 $request = new Sabre_HTTP_Request(array(
92 'REQUEST_METHOD' => 'PUT',
93 'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics',
95 $request->setBody("BEGIN:VCALENDAR\r\nEND:VCALENDAR\r\n");
97 $response = $this->request($request);
99 $this->assertEquals('HTTP/1.1 400 Bad request', $response->status, 'Incorrect status returned! Full response body: ' . $response->body);
103 function testCreateFileNoUID() {
105 $request = new Sabre_HTTP_Request(array(
106 'REQUEST_METHOD' => 'PUT',
107 'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics',
109 $request->setBody("BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n");
111 $response = $this->request($request);
113 $this->assertEquals('HTTP/1.1 400 Bad request', $response->status, 'Incorrect status returned! Full response body: ' . $response->body);
117 function testCreateFileVCard() {
119 $request = new Sabre_HTTP_Request(array(
120 'REQUEST_METHOD' => 'PUT',
121 'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics',
123 $request->setBody("BEGIN:VCARD\r\nEND:VCARD\r\n");
125 $response = $this->request($request);
127 $this->assertEquals('HTTP/1.1 415 Unsupported Media Type', $response->status, 'Incorrect status returned! Full response body: ' . $response->body);
131 function testCreateFile2Components() {
133 $request = new Sabre_HTTP_Request(array(
134 'REQUEST_METHOD' => 'PUT',
135 'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics',
137 $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");
139 $response = $this->request($request);
141 $this->assertEquals('HTTP/1.1 400 Bad request', $response->status, 'Incorrect status returned! Full response body: ' . $response->body);
145 function testCreateFile2UIDS() {
147 $request = new Sabre_HTTP_Request(array(
148 'REQUEST_METHOD' => 'PUT',
149 'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics',
151 $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");
153 $response = $this->request($request);
155 $this->assertEquals('HTTP/1.1 400 Bad request', $response->status, 'Incorrect status returned! Full response body: ' . $response->body);
159 function testCreateFileWrongComponent() {
161 $request = new Sabre_HTTP_Request(array(
162 'REQUEST_METHOD' => 'PUT',
163 'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics',
165 $request->setBody("BEGIN:VCALENDAR\r\nBEGIN:VTIMEZONE\r\nEND:VTIMEZONE\r\nBEGIN:VFREEBUSY\r\nUID:foo\r\nEND:VFREEBUSY\r\nEND:VCALENDAR\r\n");
167 $response = $this->request($request);
169 $this->assertEquals('HTTP/1.1 400 Bad request', $response->status, 'Incorrect status returned! Full response body: ' . $response->body);
173 function testUpdateFile() {
175 $this->calBackend->createCalendarObject('calendar1','blabla.ics','foo');
176 $request = new Sabre_HTTP_Request(array(
177 'REQUEST_METHOD' => 'PUT',
178 'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics',
181 $response = $this->request($request);
183 $this->assertEquals('HTTP/1.1 415 Unsupported Media Type', $response->status);
187 function testUpdateFileParsableBody() {
189 $this->calBackend->createCalendarObject('calendar1','blabla.ics','foo');
190 $request = new Sabre_HTTP_Request(array(
191 'REQUEST_METHOD' => 'PUT',
192 'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics',
194 $body = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nUID:foo\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n";
195 $request->setBody($body);
197 $response = $this->request($request);
199 $this->assertEquals('HTTP/1.1 204 No Content', $response->status);
202 'uri' => 'blabla.ics',
203 'calendardata' => $body,
204 'calendarid' => 'calendar1',
207 $this->assertEquals($expected, $this->calBackend->getCalendarObject('calendar1','blabla.ics'));