Merge pull request #3443 from nextcloud/add-integration-tests-for-dav
Add integration tests for legacy DAV endpoints
This commit is contained in:
commit
b8f08f1585
|
@ -67,6 +67,7 @@ $nodes = array(
|
||||||
|
|
||||||
// Fire up server
|
// Fire up server
|
||||||
$server = new \Sabre\DAV\Server($nodes);
|
$server = new \Sabre\DAV\Server($nodes);
|
||||||
|
$server::$exposeVersion = false;
|
||||||
$server->httpRequest->setUrl(\OC::$server->getRequest()->getRequestUri());
|
$server->httpRequest->setUrl(\OC::$server->getRequest()->getRequestUri());
|
||||||
$server->setBaseUri($baseuri);
|
$server->setBaseUri($baseuri);
|
||||||
|
|
||||||
|
|
|
@ -66,6 +66,7 @@ $nodes = array(
|
||||||
|
|
||||||
// Fire up server
|
// Fire up server
|
||||||
$server = new \Sabre\DAV\Server($nodes);
|
$server = new \Sabre\DAV\Server($nodes);
|
||||||
|
$server::$exposeVersion = false;
|
||||||
$server->httpRequest->setUrl(\OC::$server->getRequest()->getRequestUri());
|
$server->httpRequest->setUrl(\OC::$server->getRequest()->getRequestUri());
|
||||||
$server->setBaseUri($baseuri);
|
$server->setBaseUri($baseuri);
|
||||||
// Add plugins
|
// Add plugins
|
||||||
|
|
|
@ -67,6 +67,7 @@ class LegacyDAVACL extends DavAclPlugin {
|
||||||
return new Principal(Principal::UNAUTHENTICATED);
|
return new Principal(Principal::UNAUTHENTICATED);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
parent::propFind($propFind, $node);
|
|
||||||
|
return parent::propFind($propFind, $node);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
namespace OCA\DAV\Connector\Sabre;
|
namespace OCA\DAV\Connector\Sabre;
|
||||||
|
|
||||||
|
use Sabre\CalDAV\Principal\User;
|
||||||
use Sabre\DAV\Exception\NotFound;
|
use Sabre\DAV\Exception\NotFound;
|
||||||
use Sabre\DAV\IFile;
|
use Sabre\DAV\IFile;
|
||||||
use Sabre\DAV\INode;
|
use Sabre\DAV\INode;
|
||||||
|
@ -72,4 +73,20 @@ class DavAclPlugin extends \Sabre\DAVACL\Plugin {
|
||||||
|
|
||||||
return $access;
|
return $access;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function propFind(PropFind $propFind, INode $node) {
|
||||||
|
// If the node is neither readable nor writable then fail unless its of
|
||||||
|
// the standard user-principal
|
||||||
|
if(!($node instanceof User)) {
|
||||||
|
$path = $propFind->getPath();
|
||||||
|
$readPermissions = $this->checkPrivileges($path, '{DAV:}read', self::R_PARENT, false);
|
||||||
|
$writePermissions = $this->checkPrivileges($path, '{DAV:}write', self::R_PARENT, false);
|
||||||
|
if ($readPermissions === false && $writePermissions === false) {
|
||||||
|
$this->checkPrivileges($path, '{DAV:}read', self::R_PARENT, true);
|
||||||
|
$this->checkPrivileges($path, '{DAV:}write', self::R_PARENT, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent::propFind($propFind, $node);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,16 +72,18 @@ class CalDavContext implements \Behat\Behat\Context\Context {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @When :user requests calendar :calendar
|
* @When :user requests calendar :calendar on the endpoint :endpoint
|
||||||
* @param string $user
|
* @param string $user
|
||||||
* @param string $calendar
|
* @param string $calendar
|
||||||
|
* @param string $endpoint
|
||||||
*/
|
*/
|
||||||
public function requestsCalendar($user, $calendar) {
|
public function requestsCalendar($user, $calendar, $endpoint) {
|
||||||
$davUrl = $this->baseUrl . '/remote.php/dav/calendars/'.$calendar;
|
$davUrl = $this->baseUrl . $endpoint . $calendar;
|
||||||
|
|
||||||
$password = ($user === 'admin') ? 'admin' : '123456';
|
$password = ($user === 'admin') ? 'admin' : '123456';
|
||||||
try {
|
try {
|
||||||
$this->response = $this->client->get(
|
$request = $this->client->createRequest(
|
||||||
|
'PROPFIND',
|
||||||
$davUrl,
|
$davUrl,
|
||||||
[
|
[
|
||||||
'auth' => [
|
'auth' => [
|
||||||
|
@ -90,6 +92,7 @@ class CalDavContext implements \Behat\Behat\Context\Context {
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
$this->response = $this->client->send($request);
|
||||||
} catch (\GuzzleHttp\Exception\ClientException $e) {
|
} catch (\GuzzleHttp\Exception\ClientException $e) {
|
||||||
$this->response = $e->getResponse();
|
$this->response = $e->getResponse();
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,20 +72,21 @@ class CardDavContext implements \Behat\Behat\Context\Context {
|
||||||
} catch (\GuzzleHttp\Exception\ClientException $e) {}
|
} catch (\GuzzleHttp\Exception\ClientException $e) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @When :user requests addressbook :addressBook with statuscode :statusCode
|
* @When :user requests addressbook :addressBook with statuscode :statusCode on the endpoint :endpoint
|
||||||
* @param string $user
|
* @param string $user
|
||||||
* @param string $addressBook
|
* @param string $addressBook
|
||||||
* @param int $statusCode
|
* @param int $statusCode
|
||||||
|
* @param string $endpoint
|
||||||
* @throws \Exception
|
* @throws \Exception
|
||||||
*/
|
*/
|
||||||
public function requestsAddressbookWithStatuscode($user, $addressBook, $statusCode) {
|
public function requestsAddressbookWithStatuscodeOnTheEndpoint($user, $addressBook, $statusCode, $endpoint) {
|
||||||
$davUrl = $this->baseUrl . '/remote.php/dav/addressbooks/users/'.$addressBook;
|
$davUrl = $this->baseUrl . $endpoint . $addressBook;
|
||||||
|
|
||||||
$password = ($user === 'admin') ? 'admin' : '123456';
|
$password = ($user === 'admin') ? 'admin' : '123456';
|
||||||
try {
|
try {
|
||||||
$this->response = $this->client->get(
|
$request = $this->client->createRequest(
|
||||||
|
'PROPFIND',
|
||||||
$davUrl,
|
$davUrl,
|
||||||
[
|
[
|
||||||
'auth' => [
|
'auth' => [
|
||||||
|
@ -94,6 +95,7 @@ class CardDavContext implements \Behat\Behat\Context\Context {
|
||||||
],
|
],
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
$this->response = $this->client->send($request);
|
||||||
} catch (\GuzzleHttp\Exception\ClientException $e) {
|
} catch (\GuzzleHttp\Exception\ClientException $e) {
|
||||||
$this->response = $e->getResponse();
|
$this->response = $e->getResponse();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,31 +1,52 @@
|
||||||
Feature: caldav
|
Feature: caldav
|
||||||
Scenario: Accessing a not existing calendar of another user
|
Scenario: Accessing a not existing calendar of another user
|
||||||
Given user "user0" exists
|
Given user "user0" exists
|
||||||
When "admin" requests calendar "user0/MyCalendar"
|
When "admin" requests calendar "user0/MyCalendar" on the endpoint "/remote.php/dav/calendars/"
|
||||||
Then The CalDAV HTTP status code should be "404"
|
Then The CalDAV HTTP status code should be "404"
|
||||||
And The exception is "Sabre\DAV\Exception\NotFound"
|
And The exception is "Sabre\DAV\Exception\NotFound"
|
||||||
And The error message is "Node with name 'MyCalendar' could not be found"
|
And The error message is "Node with name 'MyCalendar' could not be found"
|
||||||
|
|
||||||
# Blocked by https://github.com/php/php-src/pull/1417
|
Scenario: Accessing a not shared calendar of another user
|
||||||
#Scenario: Accessing a not shared calendar of another user
|
Given user "user0" exists
|
||||||
# Given user "user0" exists
|
Given "admin" creates a calendar named "MyCalendar"
|
||||||
# Given "admin" creates a calendar named "MyCalendar"
|
Given The CalDAV HTTP status code should be "201"
|
||||||
# Given The CalDAV HTTP status code should be "201"
|
When "user0" requests calendar "admin/MyCalendar" on the endpoint "/remote.php/dav/calendars/"
|
||||||
# When "user0" requests calendar "admin/MyCalendar"
|
Then The CalDAV HTTP status code should be "404"
|
||||||
# Then The CalDAV HTTP status code should be "404"
|
And The exception is "Sabre\DAV\Exception\NotFound"
|
||||||
# And The exception is "Sabre\DAV\Exception\NotFound"
|
And The error message is "Node with name 'MyCalendar' could not be found"
|
||||||
# And The error message is "Node with name 'MyCalendar' could not be found"
|
|
||||||
|
Scenario: Accessing a not shared calendar of another user via the legacy endpoint
|
||||||
|
Given user "user0" exists
|
||||||
|
Given "admin" creates a calendar named "MyCalendar"
|
||||||
|
Given The CalDAV HTTP status code should be "201"
|
||||||
|
When "user0" requests calendar "admin/MyCalendar" on the endpoint "/remote.php/caldav/calendars/"
|
||||||
|
Then The CalDAV HTTP status code should be "404"
|
||||||
|
And The exception is "Sabre\DAV\Exception\NotFound"
|
||||||
|
And The error message is "Node with name 'MyCalendar' could not be found"
|
||||||
|
|
||||||
|
Scenario: Accessing a not existing calendar of another user
|
||||||
|
Given user "user0" exists
|
||||||
|
When "user0" requests calendar "admin/MyCalendar" on the endpoint "/remote.php/dav/calendars/"
|
||||||
|
Then The CalDAV HTTP status code should be "404"
|
||||||
|
And The exception is "Sabre\DAV\Exception\NotFound"
|
||||||
|
And The error message is "Node with name 'MyCalendar' could not be found"
|
||||||
|
|
||||||
|
Scenario: Accessing a not existing calendar of another user via the legacy endpoint
|
||||||
|
Given user "user0" exists
|
||||||
|
When "user0" requests calendar "admin/MyCalendar" on the endpoint "/remote.php/caldav/calendars/"
|
||||||
|
Then The CalDAV HTTP status code should be "404"
|
||||||
|
And The exception is "Sabre\DAV\Exception\NotFound"
|
||||||
|
And The error message is "Node with name 'MyCalendar' could not be found"
|
||||||
|
|
||||||
Scenario: Accessing a not existing calendar of myself
|
Scenario: Accessing a not existing calendar of myself
|
||||||
Given user "user0" exists
|
Given user "user0" exists
|
||||||
When "user0" requests calendar "admin/MyCalendar"
|
When "user0" requests calendar "admin/MyCalendar" on the endpoint "/remote.php/dav/calendars/"
|
||||||
Then The CalDAV HTTP status code should be "404"
|
Then The CalDAV HTTP status code should be "404"
|
||||||
And The exception is "Sabre\DAV\Exception\NotFound"
|
And The exception is "Sabre\DAV\Exception\NotFound"
|
||||||
And The error message is "Node with name 'MyCalendar' could not be found"
|
And The error message is "Node with name 'MyCalendar' could not be found"
|
||||||
|
|
||||||
# Blocked by https://github.com/php/php-src/pull/1417
|
Scenario: Creating a new calendar
|
||||||
#Scenario: Creating a new calendar
|
When "admin" creates a calendar named "MyCalendar"
|
||||||
# When "admin" creates a calendar named "MyCalendar"
|
Then The CalDAV HTTP status code should be "201"
|
||||||
# Then The CalDAV HTTP status code should be "201"
|
And "admin" requests calendar "admin/MyCalendar" on the endpoint "/remote.php/dav/calendars/"
|
||||||
# And "admin" requests calendar "admin/MyCalendar"
|
Then The CalDAV HTTP status code should be "207"
|
||||||
# Then The CalDAV HTTP status code should be "200"
|
|
||||||
|
|
|
@ -1,26 +1,39 @@
|
||||||
Feature: carddav
|
Feature: carddav
|
||||||
Scenario: Accessing a not existing addressbook of another user
|
Scenario: Accessing a not existing addressbook of another user
|
||||||
Given user "user0" exists
|
Given user "user0" exists
|
||||||
When "admin" requests addressbook "user0/MyAddressbook" with statuscode "404"
|
When "admin" requests addressbook "user0/MyAddressbook" with statuscode "404" on the endpoint "/remote.php/dav/addressbooks/users/"
|
||||||
And The CardDAV exception is "Sabre\DAV\Exception\NotFound"
|
And The CardDAV exception is "Sabre\DAV\Exception\NotFound"
|
||||||
And The CardDAV error message is "Addressbook with name 'MyAddressbook' could not be found"
|
And The CardDAV error message is "Addressbook with name 'MyAddressbook' could not be found"
|
||||||
|
|
||||||
Scenario: Accessing a not shared addressbook of another user
|
Scenario: Accessing a not shared addressbook of another user
|
||||||
Given user "user0" exists
|
Given user "user0" exists
|
||||||
Given "admin" creates an addressbook named "MyAddressbook" with statuscode "201"
|
Given "admin" creates an addressbook named "MyAddressbook" with statuscode "201"
|
||||||
When "user0" requests addressbook "admin/MyAddressbook" with statuscode "404"
|
When "user0" requests addressbook "admin/MyAddressbook" with statuscode "404" on the endpoint "/remote.php/dav/addressbooks/users/"
|
||||||
|
And The CardDAV exception is "Sabre\DAV\Exception\NotFound"
|
||||||
|
And The CardDAV error message is "Addressbook with name 'MyAddressbook' could not be found"
|
||||||
|
|
||||||
|
Scenario: Accessing a not existing addressbook of another user via legacy endpoint
|
||||||
|
Given user "user0" exists
|
||||||
|
When "admin" requests addressbook "user0/MyAddressbook" with statuscode "404" on the endpoint "/remote.php/carddav/addressbooks/"
|
||||||
|
And The CardDAV exception is "Sabre\DAV\Exception\NotFound"
|
||||||
|
And The CardDAV error message is "Addressbook with name 'MyAddressbook' could not be found"
|
||||||
|
|
||||||
|
Scenario: Accessing a not shared addressbook of another user via legacy endpoint
|
||||||
|
Given user "user0" exists
|
||||||
|
Given "admin" creates an addressbook named "MyAddressbook" with statuscode "201"
|
||||||
|
When "user0" requests addressbook "admin/MyAddressbook" with statuscode "404" on the endpoint "/remote.php/carddav/addressbooks/"
|
||||||
And The CardDAV exception is "Sabre\DAV\Exception\NotFound"
|
And The CardDAV exception is "Sabre\DAV\Exception\NotFound"
|
||||||
And The CardDAV error message is "Addressbook with name 'MyAddressbook' could not be found"
|
And The CardDAV error message is "Addressbook with name 'MyAddressbook' could not be found"
|
||||||
|
|
||||||
Scenario: Accessing a not existing addressbook of myself
|
Scenario: Accessing a not existing addressbook of myself
|
||||||
Given user "user0" exists
|
Given user "user0" exists
|
||||||
When "user0" requests addressbook "admin/MyAddressbook" with statuscode "404"
|
When "user0" requests addressbook "admin/MyAddressbook" with statuscode "404" on the endpoint "/remote.php/dav/addressbooks/users/"
|
||||||
And The CardDAV exception is "Sabre\DAV\Exception\NotFound"
|
And The CardDAV exception is "Sabre\DAV\Exception\NotFound"
|
||||||
And The CardDAV error message is "Addressbook with name 'MyAddressbook' could not be found"
|
And The CardDAV error message is "Addressbook with name 'MyAddressbook' could not be found"
|
||||||
|
|
||||||
Scenario: Creating a new addressbook
|
Scenario: Creating a new addressbook
|
||||||
When "admin" creates an addressbook named "MyAddressbook" with statuscode "201"
|
When "admin" creates an addressbook named "MyAddressbook" with statuscode "201"
|
||||||
Then "admin" requests addressbook "admin/MyAddressbook" with statuscode "200"
|
Then "admin" requests addressbook "admin/MyAddressbook" with statuscode "207" on the endpoint "/remote.php/dav/addressbooks/users/"
|
||||||
|
|
||||||
Scenario: Accessing ones own contact
|
Scenario: Accessing ones own contact
|
||||||
Given "admin" creates an addressbook named "MyAddressbook" with statuscode "201"
|
Given "admin" creates an addressbook named "MyAddressbook" with statuscode "201"
|
||||||
|
|
Loading…
Reference in New Issue