summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPytal <24800714+Pytal@users.noreply.github.com>2021-06-09 15:33:57 -0700
committerGitHub <noreply@github.com>2021-06-09 15:33:57 -0700
commita416d508deff14f2c1902e9e16bd22bf7e345817 (patch)
treef51473ee1e6399de1bd8656dacc7707d044d5fa0
parentbb2b946c51459a0a16b745fe0d9605d26c7a3875 (diff)
parente16682aeda94c3c86be131371c35cb4255b86f3a (diff)
downloadnextcloud-server-a416d508deff14f2c1902e9e16bd22bf7e345817.tar.gz
nextcloud-server-a416d508deff14f2c1902e9e16bd22bf7e345817.zip
Merge pull request #27089 from m7913d/feature/addGroupDisplayNames
[ProvisioningAPI] Allow specifying group display name during creation
-rw-r--r--apps/provisioning_api/lib/Controller/GroupsController.php11
-rw-r--r--apps/provisioning_api/tests/Controller/GroupsControllerTest.php8
-rw-r--r--build/integration/features/bootstrap/Provisioning.php32
-rw-r--r--build/integration/features/provisioning-v1.feature17
4 files changed, 64 insertions, 4 deletions
diff --git a/apps/provisioning_api/lib/Controller/GroupsController.php b/apps/provisioning_api/lib/Controller/GroupsController.php
index 543fc3b40ac..7b6e5319c2a 100644
--- a/apps/provisioning_api/lib/Controller/GroupsController.php
+++ b/apps/provisioning_api/lib/Controller/GroupsController.php
@@ -232,10 +232,11 @@ class GroupsController extends AUserData {
* @PasswordConfirmationRequired
*
* @param string $groupid
+ * @param string $displayname
* @return DataResponse
* @throws OCSException
*/
- public function addGroup(string $groupid): DataResponse {
+ public function addGroup(string $groupid, string $displayname = ''): DataResponse {
// Validate name
if (empty($groupid)) {
$this->logger->error('Group name not supplied', ['app' => 'provisioning_api']);
@@ -245,7 +246,13 @@ class GroupsController extends AUserData {
if ($this->groupManager->groupExists($groupid)) {
throw new OCSException('group exists', 102);
}
- $this->groupManager->createGroup($groupid);
+ $group = $this->groupManager->createGroup($groupid);
+ if ($group === null) {
+ throw new OCSException('Not supported by backend', 103);
+ }
+ if ($displayname !== '') {
+ $group->setDisplayName($displayname);
+ }
return new DataResponse();
}
diff --git a/apps/provisioning_api/tests/Controller/GroupsControllerTest.php b/apps/provisioning_api/tests/Controller/GroupsControllerTest.php
index 66e7665de63..12010995560 100644
--- a/apps/provisioning_api/tests/Controller/GroupsControllerTest.php
+++ b/apps/provisioning_api/tests/Controller/GroupsControllerTest.php
@@ -405,10 +405,12 @@ class GroupsControllerTest extends \Test\TestCase {
->with('NewGroup')
->willReturn(false);
+ $group = $this->createGroup('NewGroup');
$this->groupManager
->expects($this->once())
->method('createGroup')
- ->with('NewGroup');
+ ->with('NewGroup')
+ ->willReturn($group);
$this->api->addGroup('NewGroup');
}
@@ -419,10 +421,12 @@ class GroupsControllerTest extends \Test\TestCase {
->with('Iñtërnâtiônàlizætiøn')
->willReturn(false);
+ $group = $this->createGroup('Iñtërnâtiônàlizætiøn');
$this->groupManager
->expects($this->once())
->method('createGroup')
- ->with('Iñtërnâtiônàlizætiøn');
+ ->with('Iñtërnâtiônàlizætiøn')
+ ->willReturn($group);
$this->api->addGroup('Iñtërnâtiônàlizætiøn');
}
diff --git a/build/integration/features/bootstrap/Provisioning.php b/build/integration/features/bootstrap/Provisioning.php
index dd8e3a2a150..8eab793d66b 100644
--- a/build/integration/features/bootstrap/Provisioning.php
+++ b/build/integration/features/bootstrap/Provisioning.php
@@ -175,6 +175,38 @@ trait Provisioning {
}
}
}
+
+ /**
+ * @Then /^group "([^"]*)" has$/
+ *
+ * @param string $user
+ * @param \Behat\Gherkin\Node\TableNode|null $settings
+ */
+ public function groupHasSetting($group, $settings) {
+ $fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/cloud/groups/details?search=$group";
+ $client = new Client();
+ $options = [];
+ if ($this->currentUser === 'admin') {
+ $options['auth'] = $this->adminUser;
+ } else {
+ $options['auth'] = [$this->currentUser, $this->regularUser];
+ }
+ $options['headers'] = [
+ 'OCS-APIREQUEST' => 'true',
+ ];
+
+ $response = $client->get($fullUrl, $options);
+ $groupDetails = simplexml_load_string($response->getBody())->data[0]->groups[0]->element;
+ foreach ($settings->getRows() as $setting) {
+ $value = json_decode(json_encode($groupDetails->{$setting[0]}), 1);
+ if (isset($value[0])) {
+ Assert::assertEquals($setting[1], $value[0], "", 0.0, 10, true);
+ } else {
+ Assert::assertEquals('', $setting[1]);
+ }
+ }
+ }
+
/**
* @Then /^user "([^"]*)" has editable fields$/
diff --git a/build/integration/features/provisioning-v1.feature b/build/integration/features/provisioning-v1.feature
index e56c86a2d4f..dec6d2213e3 100644
--- a/build/integration/features/provisioning-v1.feature
+++ b/build/integration/features/provisioning-v1.feature
@@ -231,6 +231,21 @@ Feature: provisioning
Then the OCS status code should be "100"
And the HTTP status code should be "200"
And group "new-group" exists
+ And group "new-group" has
+ | displayname | new-group |
+
+ Scenario: Create a group with custom display name
+ Given As an "admin"
+ And group "new-group" does not exist
+ When sending "POST" to "/cloud/groups" with
+ | groupid | new-group |
+ | password | 123456 |
+ | displayname | new-group-displayname |
+ Then the OCS status code should be "100"
+ And the HTTP status code should be "200"
+ And group "new-group" exists
+ And group "new-group" has
+ | displayname | new-group-displayname |
Scenario: Create a group with special characters
Given As an "admin"
@@ -241,6 +256,8 @@ Feature: provisioning
Then the OCS status code should be "100"
And the HTTP status code should be "200"
And group "España" exists
+ And group "España" has
+ | displayname | España |
Scenario: adding user to a group without sending the group
Given As an "admin"