]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add integration tests for search in groups 21138/head
authorMorris Jobke <hey@morrisjobke.de>
Wed, 5 Aug 2020 08:56:40 +0000 (10:56 +0200)
committerMorris Jobke <hey@morrisjobke.de>
Wed, 5 Aug 2020 12:14:06 +0000 (14:14 +0200)
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
build/integration/features/bootstrap/Provisioning.php
build/integration/features/provisioning-v2.feature

index c6cfa881fb5c4802a4eb9cd524cbd184d2d25451..daf5b11569c0168a2c79c57769ff8909cbef234f 100644 (file)
@@ -69,6 +69,23 @@ trait Provisioning {
                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$/
         * @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";
                $client = new Client();
                $options = [];
@@ -105,6 +122,9 @@ trait Provisioning {
                        'userid' => $user,
                        'password' => '123456'
                ];
+               if ($displayname !== '') {
+                       $options['form_params']['displayName'] = $displayname;
+               }
                $options['headers'] = [
                        '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$/
         * @param \Behat\Gherkin\Node\TableNode|null $groupsList
@@ -599,6 +633,18 @@ trait Provisioning {
                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.
         *
index def9b376d21c4ed27bca855eaab44d468de20129..729c812cb8c04952c20bfb4f2603787f257205f4 100644 (file)
@@ -19,3 +19,17 @@ Feature: provisioning
     Then the OCS status code should be "998"
     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 |