Merge pull request #21138 from nextcloud/fix/noid/search-in-group-displayname-email
Search also the email and displayname in user mangement for groups
This commit is contained in:
commit
79fc7e78b7
|
@ -69,6 +69,23 @@ trait Provisioning {
|
||||||
Assert::assertEquals(200, $this->response->getStatusCode());
|
Assert::assertEquals(200, $this->response->getStatusCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Given /^user "([^"]*)" with displayname "([^"]*)" exists$/
|
||||||
|
* @param string $user
|
||||||
|
*/
|
||||||
|
public function assureUserWithDisplaynameExists($user, $displayname) {
|
||||||
|
try {
|
||||||
|
$this->userExists($user);
|
||||||
|
} catch (\GuzzleHttp\Exception\ClientException $ex) {
|
||||||
|
$previous_user = $this->currentUser;
|
||||||
|
$this->currentUser = "admin";
|
||||||
|
$this->creatingTheUser($user, $displayname);
|
||||||
|
$this->currentUser = $previous_user;
|
||||||
|
}
|
||||||
|
$this->userExists($user);
|
||||||
|
Assert::assertEquals(200, $this->response->getStatusCode());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Given /^user "([^"]*)" does not exist$/
|
* @Given /^user "([^"]*)" does not exist$/
|
||||||
* @param string $user
|
* @param string $user
|
||||||
|
@ -93,7 +110,7 @@ trait Provisioning {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function creatingTheUser($user) {
|
public function creatingTheUser($user, $displayname = '') {
|
||||||
$fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/cloud/users";
|
$fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/cloud/users";
|
||||||
$client = new Client();
|
$client = new Client();
|
||||||
$options = [];
|
$options = [];
|
||||||
|
@ -105,6 +122,9 @@ trait Provisioning {
|
||||||
'userid' => $user,
|
'userid' => $user,
|
||||||
'password' => '123456'
|
'password' => '123456'
|
||||||
];
|
];
|
||||||
|
if ($displayname !== '') {
|
||||||
|
$options['form_params']['displayName'] = $displayname;
|
||||||
|
}
|
||||||
$options['headers'] = [
|
$options['headers'] = [
|
||||||
'OCS-APIREQUEST' => 'true',
|
'OCS-APIREQUEST' => 'true',
|
||||||
];
|
];
|
||||||
|
@ -540,6 +560,20 @@ trait Provisioning {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Then /^detailed users returned are$/
|
||||||
|
* @param \Behat\Gherkin\Node\TableNode|null $usersList
|
||||||
|
*/
|
||||||
|
public function theDetailedUsersShouldBe($usersList) {
|
||||||
|
if ($usersList instanceof \Behat\Gherkin\Node\TableNode) {
|
||||||
|
$users = $usersList->getRows();
|
||||||
|
$usersSimplified = $this->simplifyArray($users);
|
||||||
|
$respondedArray = $this->getArrayOfDetailedUsersResponded($this->response);
|
||||||
|
$respondedArray = array_keys($respondedArray);
|
||||||
|
Assert::assertEquals($usersSimplified, $respondedArray);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Then /^groups returned are$/
|
* @Then /^groups returned are$/
|
||||||
* @param \Behat\Gherkin\Node\TableNode|null $groupsList
|
* @param \Behat\Gherkin\Node\TableNode|null $groupsList
|
||||||
|
@ -599,6 +633,18 @@ trait Provisioning {
|
||||||
return $extractedElementsArray;
|
return $extractedElementsArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parses the xml answer to get the array of detailed users returned.
|
||||||
|
*
|
||||||
|
* @param ResponseInterface $resp
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getArrayOfDetailedUsersResponded($resp) {
|
||||||
|
$listCheckedElements = simplexml_load_string($resp->getBody())->data[0]->users;
|
||||||
|
$extractedElementsArray = json_decode(json_encode($listCheckedElements), 1);
|
||||||
|
return $extractedElementsArray;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses the xml answer to get the array of groups returned.
|
* Parses the xml answer to get the array of groups returned.
|
||||||
*
|
*
|
||||||
|
|
|
@ -19,3 +19,17 @@ Feature: provisioning
|
||||||
Then the OCS status code should be "998"
|
Then the OCS status code should be "998"
|
||||||
And the HTTP status code should be "404"
|
And the HTTP status code should be "404"
|
||||||
|
|
||||||
|
Scenario: Searching by displayname in groups
|
||||||
|
Given As an "admin"
|
||||||
|
And user "user-in-group" with displayname "specific-name" exists
|
||||||
|
And user "user-in-group2" with displayname "another-name" exists
|
||||||
|
And user "user-not-in-group" with displayname "specific-name" exists
|
||||||
|
And user "user-not-in-group2" with displayname "another-name" exists
|
||||||
|
And group "group-search" exists
|
||||||
|
And user "user-in-group" belongs to group "group-search"
|
||||||
|
And user "user-in-group2" belongs to group "group-search"
|
||||||
|
When sending "GET" to "/cloud/groups/group-search/users/details?offset=0&limit=25&search=ifi"
|
||||||
|
Then the OCS status code should be "200"
|
||||||
|
And the HTTP status code should be "200"
|
||||||
|
And detailed users returned are
|
||||||
|
| user-in-group |
|
||||||
|
|
|
@ -348,15 +348,27 @@ class Database extends ABackend implements
|
||||||
$this->fixDI();
|
$this->fixDI();
|
||||||
|
|
||||||
$query = $this->dbConn->getQueryBuilder();
|
$query = $this->dbConn->getQueryBuilder();
|
||||||
$query->select('uid')
|
$query->select('g.uid')
|
||||||
->from('group_user')
|
->from('group_user', 'g')
|
||||||
->where($query->expr()->eq('gid', $query->createNamedParameter($gid)))
|
->where($query->expr()->eq('gid', $query->createNamedParameter($gid)))
|
||||||
->orderBy('uid', 'ASC');
|
->orderBy('g.uid', 'ASC');
|
||||||
|
|
||||||
if ($search !== '') {
|
if ($search !== '') {
|
||||||
$query->andWhere($query->expr()->like('uid', $query->createNamedParameter(
|
$query->leftJoin('g', 'users', 'u', $query->expr()->eq('g.uid', 'u.uid'))
|
||||||
'%' . $this->dbConn->escapeLikeParameter($search) . '%'
|
->leftJoin('u', 'preferences', 'p', $query->expr()->andX(
|
||||||
)));
|
$query->expr()->eq('p.userid', 'u.uid'),
|
||||||
|
$query->expr()->eq('p.appid', $query->expr()->literal('settings')),
|
||||||
|
$query->expr()->eq('p.configkey', $query->expr()->literal('email')))
|
||||||
|
)
|
||||||
|
// sqlite doesn't like re-using a single named parameter here
|
||||||
|
->andWhere(
|
||||||
|
$query->expr()->orX(
|
||||||
|
$query->expr()->ilike('g.uid', $query->createNamedParameter('%' . $this->dbConn->escapeLikeParameter($search) . '%')),
|
||||||
|
$query->expr()->ilike('u.displayname', $query->createNamedParameter('%' . $this->dbConn->escapeLikeParameter($search) . '%')),
|
||||||
|
$query->expr()->ilike('p.configvalue', $query->createNamedParameter('%' . $this->dbConn->escapeLikeParameter($search) . '%'))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
->orderBy('u.uid_lower', 'ASC');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($limit !== -1) {
|
if ($limit !== -1) {
|
||||||
|
|
Loading…
Reference in New Issue