Merge pull request #23091 from owncloud/issue-23085-csae-insensitive-group-search

Return the correct group casing in sharee api
This commit is contained in:
Thomas Müller 2016-03-13 19:51:07 +01:00
commit 101e446577
3 changed files with 260 additions and 7 deletions

View File

@ -147,8 +147,8 @@ class Sharees {
$foundUserById = false;
foreach ($users as $uid => $userDisplayName) {
if (strtolower($uid) === $search || strtolower($userDisplayName) === $search) {
if (strtolower($uid) === $search) {
if (strtolower($uid) === strtolower($search) || strtolower($userDisplayName) === strtolower($search)) {
if (strtolower($uid) === strtolower($search)) {
$foundUserById = true;
}
$this->result['exact']['users'][] = [
@ -221,12 +221,12 @@ class Sharees {
}
foreach ($groups as $gid) {
if (strtolower($gid) === $search) {
if (strtolower($gid) === strtolower($search)) {
$this->result['exact']['groups'][] = [
'label' => $search,
'label' => $gid,
'value' => [
'shareType' => Share::SHARE_TYPE_GROUP,
'shareWith' => $search,
'shareWith' => $gid,
],
];
} else {
@ -282,8 +282,8 @@ class Sharees {
}
foreach ($cloudIds as $cloudId) {
list(, $serverUrl) = $this->splitUserRemote($cloudId);
if (strtolower($contact['FN']) === $search || strtolower($cloudId) === $search) {
if (strtolower($cloudId) === $search) {
if (strtolower($contact['FN']) === strtolower($search) || strtolower($cloudId) === strtolower($search)) {
if (strtolower($cloudId) === strtolower($search)) {
$foundRemoteById = true;
}
$this->result['exact']['remotes'][] = [

View File

@ -469,5 +469,56 @@ trait Sharing{
throw new \Exception('Expected the same link share to be returned');
}
}
/**
* @When /^getting sharees for$/
* @param \Behat\Gherkin\Node\TableNode $body
*/
public function whenGettingShareesFor($body) {
$url = '/apps/files_sharing/api/v1/sharees';
if ($body instanceof \Behat\Gherkin\Node\TableNode) {
$parameters = [];
foreach ($body->getRowsHash() as $key => $value) {
$parameters[] = $key . '=' . $value;
}
if (!empty($parameters)) {
$url .= '?' . implode('&', $parameters);
}
}
$this->sendingTo('GET', $url);
}
/**
* @Then /^"([^"]*)" sharees returned (are|is empty)$/
* @param string $shareeType
* @param string $isEmpty
* @param \Behat\Gherkin\Node\TableNode|null $shareesList
*/
public function thenListOfSharees($shareeType, $isEmpty, $shareesList = null) {
if ($isEmpty !== 'is empty') {
$sharees = $shareesList->getRows();
$respondedArray = $this->getArrayOfShareesResponded($this->response, $shareeType);
PHPUnit_Framework_Assert::assertEquals($sharees, $respondedArray);
} else {
$respondedArray = $this->getArrayOfShareesResponded($this->response, $shareeType);
PHPUnit_Framework_Assert::assertEmpty($respondedArray);
}
}
public function getArrayOfShareesResponded(ResponseInterface $response, $shareeType) {
$elements = $response->xml()->data;
$elements = json_decode(json_encode($elements), 1);
if (strpos($shareeType, 'exact ') === 0) {
$elements = $elements['exact'];
$shareeType = substr($shareeType, 6);
}
$sharees = [];
foreach ($elements[$shareeType] as $element) {
$sharees[] = [$element['label'], $element['value']['shareType'], $element['value']['shareWith']];
}
return $sharees;
}
}

View File

@ -0,0 +1,202 @@
Feature: sharees
Background:
Given using api version "1"
Scenario: Search without exact match
Given user "test" exists
And user "Sharee1" exists
And group "ShareeGroup" exists
And As an "test"
When getting sharees for
| search | Sharee |
| itemType | file |
Then the OCS status code should be "100"
And the HTTP status code should be "200"
And "exact users" sharees returned is empty
And "users" sharees returned are
| Sharee1 | 0 | Sharee1 |
And "exact groups" sharees returned is empty
And "groups" sharees returned are
| ShareeGroup | 1 | ShareeGroup |
And "exact remotes" sharees returned is empty
And "remotes" sharees returned is empty
Scenario: Search without exact match not-exact casing
Given user "test" exists
And user "Sharee1" exists
And group "ShareeGroup" exists
And As an "test"
When getting sharees for
| search | sharee |
| itemType | file |
Then the OCS status code should be "100"
And the HTTP status code should be "200"
And "exact users" sharees returned is empty
And "users" sharees returned are
| Sharee1 | 0 | Sharee1 |
And "exact groups" sharees returned is empty
And "groups" sharees returned are
| ShareeGroup | 1 | ShareeGroup |
And "exact remotes" sharees returned is empty
And "remotes" sharees returned is empty
# TODO need to move the appconfig setting from Capabilities to Basic/Provisioning
# Scenario: Search without exact match no iteration allowed
# Given user "test" exists
# And user "Sharee1" exists
# And group "ShareeGroup" exists
# And As an "test"
# When getting sharees for
# | search | Sharee |
# | itemType | file |
# Then the OCS status code should be "100"
# And the HTTP status code should be "200"
# And "exact users" sharees returned is empty
# And "users" sharees returned is empty
# And "exact groups" sharees returned is empty
# And "groups" sharees returned is empty
# And "exact remotes" sharees returned is empty
# And "remotes" sharees returned is empty
#
# Scenario: Search with exact match no iteration allowed
# Given user "test" exists
# And user "Sharee1" exists
# And group "ShareeGroup" exists
# And As an "test"
# When getting sharees for
# | search | Sharee1 |
# | itemType | file |
# Then the OCS status code should be "100"
# And the HTTP status code should be "200"
# And "exact users" sharees returned are
# | Sharee1 | 0 | Sharee1 |
# And "users" sharees returned is empty
# And "exact groups" sharees returned is empty
# And "groups" sharees returned is empty
# And "exact remotes" sharees returned is empty
# And "remotes" sharees returned is empty
#
# Scenario: Search with exact match group no iteration allowed
# Given user "test" exists
# And user "Sharee1" exists
# And group "ShareeGroup" exists
# And As an "test"
# When getting sharees for
# | search | ShareeGroup |
# | itemType | file |
# Then the OCS status code should be "100"
# And the HTTP status code should be "200"
# And "exact users" sharees returned is empty
# And "users" sharees returned is empty
# And "exact groups" sharees returned are
# | ShareeGroup | 1 | ShareeGroup |
# And "groups" sharees returned is empty
# And "exact remotes" sharees returned is empty
# And "remotes" sharees returned is empty
Scenario: Search with exact match
Given user "test" exists
And user "Sharee1" exists
And group "ShareeGroup" exists
And As an "test"
When getting sharees for
| search | Sharee1 |
| itemType | file |
Then the OCS status code should be "100"
And the HTTP status code should be "200"
Then "exact users" sharees returned are
| Sharee1 | 0 | Sharee1 |
Then "users" sharees returned is empty
Then "exact groups" sharees returned is empty
Then "groups" sharees returned is empty
Then "exact remotes" sharees returned is empty
Then "remotes" sharees returned is empty
Scenario: Search with exact match not-exact casing
Given user "test" exists
And user "Sharee1" exists
And group "ShareeGroup" exists
And As an "test"
When getting sharees for
| search | sharee1 |
| itemType | file |
Then the OCS status code should be "100"
And the HTTP status code should be "200"
Then "exact users" sharees returned are
| Sharee1 | 0 | Sharee1 |
Then "users" sharees returned is empty
Then "exact groups" sharees returned is empty
Then "groups" sharees returned is empty
Then "exact remotes" sharees returned is empty
Then "remotes" sharees returned is empty
Scenario: Search with exact match not-exact casing group
Given user "test" exists
And user "Sharee1" exists
And group "ShareeGroup" exists
And As an "test"
When getting sharees for
| search | shareegroup |
| itemType | file |
Then the OCS status code should be "100"
And the HTTP status code should be "200"
Then "exact users" sharees returned is empty
Then "users" sharees returned is empty
Then "exact groups" sharees returned are
| ShareeGroup | 1 | ShareeGroup |
Then "groups" sharees returned is empty
Then "exact remotes" sharees returned is empty
Then "remotes" sharees returned is empty
Scenario: Search with "self"
Given user "test" exists
And user "Sharee1" exists
And group "ShareeGroup" exists
And As an "Sharee1"
When getting sharees for
| search | Sharee1 |
| itemType | file |
Then the OCS status code should be "100"
And the HTTP status code should be "200"
Then "exact users" sharees returned are
| Sharee1 | 0 | Sharee1 |
Then "users" sharees returned is empty
Then "exact groups" sharees returned is empty
Then "groups" sharees returned is empty
Then "exact remotes" sharees returned is empty
Then "remotes" sharees returned is empty
Scenario: Remote sharee for files
Given user "test" exists
And user "Sharee1" exists
And group "ShareeGroup" exists
And As an "test"
When getting sharees for
| search | test@localhost |
| itemType | file |
Then the OCS status code should be "100"
And the HTTP status code should be "200"
Then "exact users" sharees returned is empty
Then "users" sharees returned is empty
Then "exact groups" sharees returned is empty
Then "groups" sharees returned is empty
Then "exact remotes" sharees returned are
| test@localhost | 6 | test@localhost |
Then "remotes" sharees returned is empty
Scenario: Remote sharee for calendars not allowed
Given user "test" exists
And user "Sharee1" exists
And group "ShareeGroup" exists
And As an "test"
When getting sharees for
| search | test@localhost |
| itemType | calendar |
Then the OCS status code should be "100"
And the HTTP status code should be "200"
Then "exact users" sharees returned is empty
Then "users" sharees returned is empty
Then "exact groups" sharees returned is empty
Then "groups" sharees returned is empty
Then "exact remotes" sharees returned is empty
Then "remotes" sharees returned is empty