caldavCalendars = array( array( 'principaluri' => 'principals/user1', 'id' => 1, 'uri' => 'cal1', ), array( 'principaluri' => 'principals/user1', 'id' => 2, 'uri' => 'cal2', '{' . Plugin::NS_CALENDARSERVER . '}shared-url' => 'calendars/user1/cal2', '{http://sabredav.org/ns}owner-principal' => 'principals/user2', '{http://sabredav.org/ns}read-only' => 'true', ), array( 'principaluri' => 'principals/user1', 'id' => 3, 'uri' => 'cal3', ), ); parent::setUp(); // Making the logged in user an admin, for full access: $this->aclPlugin->adminPrincipals[] = 'principals/user1'; $this->aclPlugin->adminPrincipals[] = 'principals/user2'; } function testSimple() { $this->assertInstanceOf('Sabre\\CalDAV\\SharingPlugin', $this->server->getPlugin('caldav-sharing')); } function testGetFeatures() { $this->assertEquals(array('calendarserver-sharing'), $this->caldavSharingPlugin->getFeatures()); } function testBeforeGetShareableCalendar() { // Forcing the server to authenticate: $this->authPlugin->beforeMethod('GET',''); $props = $this->server->getProperties('calendars/user1/cal1', array( '{' . Plugin::NS_CALENDARSERVER . '}invite', '{' . Plugin::NS_CALENDARSERVER . '}allowed-sharing-modes', )); $this->assertInstanceOf('Sabre\\CalDAV\\Property\\Invite', $props['{' . Plugin::NS_CALENDARSERVER . '}invite']); $this->assertInstanceOf('Sabre\\CalDAV\\Property\\AllowedSharingModes', $props['{' . Plugin::NS_CALENDARSERVER . '}allowed-sharing-modes']); } function testBeforeGetSharedCalendar() { $props = $this->server->getProperties('calendars/user1/cal2', array( '{' . Plugin::NS_CALENDARSERVER . '}shared-url', '{' . Plugin::NS_CALENDARSERVER . '}invite', )); $this->assertInstanceOf('Sabre\\CalDAV\\Property\\Invite', $props['{' . Plugin::NS_CALENDARSERVER . '}invite']); $this->assertInstanceOf('Sabre\\DAV\\Property\\IHref', $props['{' . Plugin::NS_CALENDARSERVER . '}shared-url']); } function testUpdateProperties() { $this->caldavBackend->updateShares(1, array( array( 'href' => 'mailto:joe@example.org', ), ), array() ); $result = $this->server->updateProperties('calendars/user1/cal1', array( '{DAV:}resourcetype' => new DAV\Property\ResourceType(array('{DAV:}collection')) )); $this->assertEquals(array( 200 => array( '{DAV:}resourcetype' => null, ), 'href' => 'calendars/user1/cal1', ), $result); $this->assertEquals(0, count($this->caldavBackend->getShares(1))); } function testUpdatePropertiesPassThru() { $result = $this->server->updateProperties('calendars/user1/cal3', array( '{DAV:}foo' => 'bar', )); $this->assertEquals(array( 403 => array( '{DAV:}foo' => null, ), 'href' => 'calendars/user1/cal3', ), $result); } function testUnknownMethodNoPOST() { $request = new HTTP\Request(array( 'REQUEST_METHOD' => 'PATCH', 'REQUEST_URI' => '/', )); $response = $this->request($request); $this->assertEquals('HTTP/1.1 501 Not Implemented', $response->status, $response->body); } function testUnknownMethodNoXML() { $request = new HTTP\Request(array( 'REQUEST_METHOD' => 'POST', 'REQUEST_URI' => '/', 'CONTENT_TYPE' => 'text/plain', )); $response = $this->request($request); $this->assertEquals('HTTP/1.1 501 Not Implemented', $response->status, $response->body); } function testUnknownMethodNoNode() { $request = new HTTP\Request(array( 'REQUEST_METHOD' => 'POST', 'REQUEST_URI' => '/foo', 'CONTENT_TYPE' => 'text/xml', )); $response = $this->request($request); $this->assertEquals('HTTP/1.1 501 Not Implemented', $response->status, $response->body); } function testShareRequest() { $request = new HTTP\Request(array( 'REQUEST_METHOD' => 'POST', 'REQUEST_URI' => '/calendars/user1/cal1', 'CONTENT_TYPE' => 'text/xml', )); $xml = << mailto:joe@example.org Joe Shmoe mailto:nancy@example.org RRR; $request->setBody($xml); $response = $this->request($request); $this->assertEquals('HTTP/1.1 200 OK', $response->status, $response->body); $this->assertEquals(array(array( 'href' => 'mailto:joe@example.org', 'commonName' => 'Joe Shmoe', 'readOnly' => false, 'status' => SharingPlugin::STATUS_NORESPONSE, 'summary' => '', )), $this->caldavBackend->getShares(1)); // Verifying that the calendar is now marked shared. $props = $this->server->getProperties('calendars/user1/cal1', array('{DAV:}resourcetype')); $this->assertTrue( $props['{DAV:}resourcetype']->is('{http://calendarserver.org/ns/}shared-owner') ); } function testShareRequestNoShareableCalendar() { $request = new HTTP\Request(array( 'REQUEST_METHOD' => 'POST', 'REQUEST_URI' => '/calendars/user1/cal2', 'CONTENT_TYPE' => 'text/xml', )); $xml = ' mailto:joe@example.org Joe Shmoe mailto:nancy@example.org '; $request->setBody($xml); $response = $this->request($request); $this->assertEquals('HTTP/1.1 501 Not Implemented', $response->status, $response->body); } function testInviteReply() { $request = new HTTP\Request(array( 'REQUEST_METHOD' => 'POST', 'REQUEST_URI' => '/calendars/user1', 'CONTENT_TYPE' => 'text/xml', )); $xml = ' /principals/owner '; $request->setBody($xml); $response = $this->request($request); $this->assertEquals('HTTP/1.1 200 OK', $response->status, $response->body); } function testInviteBadXML() { $request = new HTTP\Request(array( 'REQUEST_METHOD' => 'POST', 'REQUEST_URI' => '/calendars/user1', 'CONTENT_TYPE' => 'text/xml', )); $xml = ' '; $request->setBody($xml); $response = $this->request($request); $this->assertEquals('HTTP/1.1 400 Bad request', $response->status, $response->body); } function testInviteWrongUrl() { $request = new HTTP\Request(array( 'REQUEST_METHOD' => 'POST', 'REQUEST_URI' => '/calendars/user1/cal1', 'CONTENT_TYPE' => 'text/xml', )); $xml = ' /principals/owner '; $request->setBody($xml); $response = $this->request($request); $this->assertEquals('HTTP/1.1 501 Not Implemented', $response->status, $response->body); // If the plugin did not handle this request, it must ensure that the // body is still accessible by other plugins. $this->assertEquals($xml, $request->getBody(true)); } function testPublish() { $request = new HTTP\Request(array( 'REQUEST_METHOD' => 'POST', 'REQUEST_URI' => '/calendars/user1/cal1', 'CONTENT_TYPE' => 'text/xml', )); $xml = ' '; $request->setBody($xml); $response = $this->request($request); $this->assertEquals('HTTP/1.1 202 Accepted', $response->status, $response->body); } function testUnpublish() { $request = new HTTP\Request(array( 'REQUEST_METHOD' => 'POST', 'REQUEST_URI' => '/calendars/user1/cal1', 'CONTENT_TYPE' => 'text/xml', )); $xml = ' '; $request->setBody($xml); $response = $this->request($request); $this->assertEquals('HTTP/1.1 200 OK', $response->status, $response->body); } function testPublishWrongUrl() { $request = new HTTP\Request(array( 'REQUEST_METHOD' => 'POST', 'REQUEST_URI' => '/calendars/user1/cal2', 'CONTENT_TYPE' => 'text/xml', )); $xml = ' '; $request->setBody($xml); $response = $this->request($request); $this->assertEquals('HTTP/1.1 501 Not Implemented', $response->status, $response->body); } function testUnpublishWrongUrl() { $request = new HTTP\Request(array( 'REQUEST_METHOD' => 'POST', 'REQUEST_URI' => '/calendars/user1/cal2', 'CONTENT_TYPE' => 'text/xml', )); $xml = ' '; $request->setBody($xml); $response = $this->request($request); $this->assertEquals('HTTP/1.1 501 Not Implemented', $response->status, $response->body); } function testUnknownXmlDoc() { $request = new HTTP\Request(array( 'REQUEST_METHOD' => 'POST', 'REQUEST_URI' => '/calendars/user1/cal2', 'CONTENT_TYPE' => 'text/xml', )); $xml = ' '; $request->setBody($xml); $response = $this->request($request); $this->assertEquals('HTTP/1.1 501 Not Implemented', $response->status, $response->body); } }