mirror of
https://github.com/nextcloud/server.git
synced 2026-04-21 14:23:17 -04:00
Add integration tests for email completion
Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
parent
7b76253aee
commit
2fe8042fff
4 changed files with 101 additions and 2 deletions
|
|
@ -38,6 +38,47 @@ Feature: autocomplete
|
|||
Then get autocomplete for "autocomplete"
|
||||
| id | source |
|
||||
|
||||
Scenario: getting autocomplete emails from address book with enumeration
|
||||
Given As an "admin"
|
||||
And sending "PUT" to "/cloud/users/autocomplete" with
|
||||
| key | email |
|
||||
| value | autocomplete@example.com |
|
||||
And there is a contact in an addressbook
|
||||
Then get email autocomplete for "example"
|
||||
| id | source |
|
||||
| autocomplete | users |
|
||||
| user@example.com | emails |
|
||||
Then get email autocomplete for "auto"
|
||||
| id | source |
|
||||
| autocomplete | users |
|
||||
Then get email autocomplete for "example"
|
||||
| id | source |
|
||||
| autocomplete | users |
|
||||
| user@example.com | emails |
|
||||
Then get email autocomplete for "autocomplete@example.com"
|
||||
| id | source |
|
||||
| autocomplete | users |
|
||||
|
||||
Scenario: getting autocomplete emails from address book without enumeration
|
||||
Given As an "admin"
|
||||
And sending "PUT" to "/cloud/users/autocomplete" with
|
||||
| key | email |
|
||||
| value | autocomplete@example.com |
|
||||
And there is a contact in an addressbook
|
||||
And parameter "shareapi_allow_share_dialog_user_enumeration" of app "core" is set to "no"
|
||||
When parameter "shareapi_restrict_user_enumeration_full_match" of app "core" is set to "no"
|
||||
Then get email autocomplete for "example"
|
||||
| id | source |
|
||||
| user@example.com | emails |
|
||||
When parameter "shareapi_restrict_user_enumeration_full_match" of app "core" is set to "yes"
|
||||
Then get email autocomplete for "auto"
|
||||
| id | source |
|
||||
Then get email autocomplete for "example"
|
||||
| id | source |
|
||||
| user@example.com | emails |
|
||||
Then get email autocomplete for "autocomplete@example.com"
|
||||
| id | source |
|
||||
| autocomplete | users |
|
||||
|
||||
Scenario: getting autocomplete with limited enumeration by group
|
||||
Given As an "admin"
|
||||
|
|
|
|||
|
|
@ -33,15 +33,28 @@ require __DIR__ . '/../../vendor/autoload.php';
|
|||
class CollaborationContext implements Context {
|
||||
use Provisioning;
|
||||
use AppConfiguration;
|
||||
use WebDav;
|
||||
|
||||
/**
|
||||
* @Then /^get autocomplete for "([^"]*)"$/
|
||||
* @param TableNode|null $formData
|
||||
*/
|
||||
public function getAutocomplete(string $search, TableNode $formData): void {
|
||||
public function getAutocompleteForUser(string $search, TableNode $formData): void {
|
||||
$this->getAutocompleteWithType(0, $search, $formData);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Then /^get email autocomplete for "([^"]*)"$/
|
||||
* @param TableNode|null $formData
|
||||
*/
|
||||
public function getAutocompleteForEmail(string $search, TableNode $formData): void {
|
||||
$this->getAutocompleteWithType(4, $search, $formData);
|
||||
}
|
||||
|
||||
private function getAutocompleteWithType(int $type, string $search, TableNode $formData): void {
|
||||
$query = $search === 'null' ? null : $search;
|
||||
|
||||
$this->sendRequestForJSON('GET', '/core/autocomplete/get?itemType=files&itemId=123&search=' . $query, [
|
||||
$this->sendRequestForJSON('GET', '/core/autocomplete/get?itemType=files&itemId=123&shareTypes[]=' . $type . '&search=' . $query, [
|
||||
'itemType' => 'files',
|
||||
'itemId' => '123',
|
||||
'search' => $query,
|
||||
|
|
@ -64,6 +77,46 @@ class CollaborationContext implements Context {
|
|||
}, $suggestions, $formData->getHash()));
|
||||
}
|
||||
|
||||
/**
|
||||
* @Given /^there is a contact in an addressbook$/
|
||||
*/
|
||||
public function thereIsAContactInAnAddressbook() {
|
||||
$this->usingNewDavPath();
|
||||
try {
|
||||
$destination = '/users/admin/myaddressbook';
|
||||
$data = '<x0:mkcol xmlns:x0="DAV:"><x0:set><x0:prop><x0:resourcetype><x0:collection/><x4:addressbook xmlns:x4="urn:ietf:params:xml:ns:carddav"/></x0:resourcetype><x0:displayname>myaddressbook</x0:displayname></x0:prop></x0:set></x0:mkcol>';
|
||||
$this->response = $this->makeDavRequest($this->currentUser, "MKCOL", $destination, ['Content-Type' => 'application/xml'], $data, "addressbooks");
|
||||
} catch (\GuzzleHttp\Exception\ServerException $e) {
|
||||
// 5xx responses cause a server exception
|
||||
$this->response = $e->getResponse();
|
||||
} catch (\GuzzleHttp\Exception\ClientException $e) {
|
||||
// 4xx responses cause a client exception
|
||||
$this->response = $e->getResponse();
|
||||
}
|
||||
|
||||
try {
|
||||
$destination = '/users/admin/myaddressbook/contact1.vcf';
|
||||
$data = <<<EOF
|
||||
BEGIN:VCARD
|
||||
VERSION:4.0
|
||||
PRODID:-//Nextcloud Contacts v4.0.2
|
||||
UID:a0f4088a-4dca-4308-9b63-09a1ebcf78f3
|
||||
FN:A person
|
||||
ADR;TYPE=HOME:;;;;;;
|
||||
EMAIL;TYPE=HOME:user@example.com
|
||||
REV;VALUE=DATE-AND-OR-TIME:20211130T140111Z
|
||||
END:VCARD
|
||||
EOF;
|
||||
$this->response = $this->makeDavRequest($this->currentUser, "PUT", $destination, [], $data, "addressbooks");
|
||||
} catch (\GuzzleHttp\Exception\ServerException $e) {
|
||||
// 5xx responses cause a server exception
|
||||
$this->response = $e->getResponse();
|
||||
} catch (\GuzzleHttp\Exception\ClientException $e) {
|
||||
// 4xx responses cause a client exception
|
||||
$this->response = $e->getResponse();
|
||||
}
|
||||
}
|
||||
|
||||
protected function resetAppConfigs(): void {
|
||||
$this->deleteServerConfig('core', 'shareapi_allow_share_dialog_user_enumeration');
|
||||
$this->deleteServerConfig('core', 'shareapi_restrict_user_enumeration_to_group');
|
||||
|
|
|
|||
|
|
@ -90,6 +90,8 @@ trait WebDav {
|
|||
$fullUrl = substr($this->baseUrl, 0, -4) . $this->getDavFilesPath($user) . "$path";
|
||||
} elseif ($type === "uploads") {
|
||||
$fullUrl = substr($this->baseUrl, 0, -4) . $this->davPath . "$path";
|
||||
} else {
|
||||
$fullUrl = substr($this->baseUrl, 0, -4) . $this->davPath . '/' . $type . "$path";
|
||||
}
|
||||
$client = new GClient();
|
||||
$options = [
|
||||
|
|
|
|||
|
|
@ -209,6 +209,7 @@ class MailPluginTest extends TestCase {
|
|||
],
|
||||
],
|
||||
[
|
||||
'isLocalSystemBook' => true,
|
||||
'UID' => 'uid1',
|
||||
'FN' => 'User @ Localhost',
|
||||
'EMAIL' => [
|
||||
|
|
@ -263,6 +264,7 @@ class MailPluginTest extends TestCase {
|
|||
],
|
||||
],
|
||||
[
|
||||
'isLocalSystemBook' => true,
|
||||
'UID' => 'uid1',
|
||||
'FN' => 'User @ Localhost',
|
||||
'EMAIL' => [
|
||||
|
|
@ -373,6 +375,7 @@ class MailPluginTest extends TestCase {
|
|||
],
|
||||
],
|
||||
[
|
||||
'isLocalSystemBook' => true,
|
||||
'UID' => 'uid1',
|
||||
'FN' => 'User @ Localhost',
|
||||
'EMAIL' => [
|
||||
|
|
|
|||
Loading…
Reference in a new issue