From 5e88ce14fecde533b0c6473052c5c0190445d436 Mon Sep 17 00:00:00 2001 From: ScharfViktor Date: Tue, 26 Oct 2021 09:08:08 +0200 Subject: [PATCH] separate tests. add check quota. add test create folder --- .../features/apiSpaces/ListSpaces.feature | 51 +++++++--- .../features/bootstrap/SpacesContext.php | 93 ++++++++++++++++++- 2 files changed, 130 insertions(+), 14 deletions(-) diff --git a/tests/acceptance/features/apiSpaces/ListSpaces.feature b/tests/acceptance/features/apiSpaces/ListSpaces.feature index ab7e5eb786..202151c7af 100644 --- a/tests/acceptance/features/apiSpaces/ListSpaces.feature +++ b/tests/acceptance/features/apiSpaces/ListSpaces.feature @@ -6,23 +6,52 @@ Feature: List and create spaces Note - this feature is run in CI with ACCOUNTS_HASH_DIFFICULTY set to the default for production See https://github.com/owncloud/ocis/issues/1542 and https://github.com/owncloud/ocis/pull/839 - Scenario: list own spaces + Background: Given user "Alice" has been created with default attributes and without skeleton files + + Scenario: Alice request her space via the Graph api, she expects a 200 code and the correct data in the response When user "Alice" lists all available spaces via the GraphApi Then the HTTP status code should be "200" - When user "Alice" lists the content of the space with the name "Alice Hansen" using the WebDav Api + And the json responded should contain these key and value pairs + | key | value | + | driveType | personal | + | name | Alice Hansen | + + Scenario: Alice requests her space via webDav api, she expects a 207 code and the correct data in the xml response + When user "Alice" lists all available spaces via the GraphApi + And user "Alice" lists the content of the space with the name "Alice Hansen" using the WebDav Api Then the HTTP status code should be "207" - #Then the propfind result of the space should contain these entries: - #| .space/ | - Then the propfind result of the space should not contain these entries: - | file | + And the propfind result of the space should contain these entries: + | .space/ | + + Scenario: Alice tryes to create Space via Graph api without right, she expects a response of 401 When user "Alice" creates a space "Project Mars" of type "project" with the default quota using the GraphApi Then the HTTP status code should be "401" - When the administrator gives "Alice" the role "Admin" using the settings api + + Scenario: Alice creates Space via Graph api with defaul quota, she expects a 201 code and the correct data in the response + Given the administrator gives "Alice" the role "Admin" using the settings api When user "Alice" creates a space "Project Mars" of type "project" with the default quota using the GraphApi Then the HTTP status code should be "201" - Then the json responded should contain these key and value pairs - | key | value | - | driveType | project | - | name | Project Mars | + And the json responded should contain these key and value pairs + | key | value | + | driveType | project | + | name | Project Mars | + | total | 1000000000 | + + Scenario: Alice creates Space via Graph api, she expects a 201 code and the correct data in the response + Given the administrator gives "Alice" the role "Admin" using the settings api When user "Alice" creates a space "Project Venus" of type "project" with quota "2000" using the GraphApi + Then the HTTP status code should be "201" + And the json responded should contain these key and value pairs + | key | value | + | driveType | project | + | name | Project Venus | + | total | 2000 | + + Scenario: Alice creates folder via Graph api, she expects a 201 code and the correct data in the response + Given the administrator gives "Alice" the role "Admin" using the settings api + When user "Alice" creates a space "Project Venus" of type "project" with quota "2000" using the GraphApi + And user "Alice" lists all available spaces via the GraphApi + When user "Alice" creates a folder "mainFolder" in space "Project Venus" using the WebDav Api + Then the HTTP status code should be "201" + \ No newline at end of file diff --git a/tests/acceptance/features/bootstrap/SpacesContext.php b/tests/acceptance/features/bootstrap/SpacesContext.php index 990126918d..418549241c 100644 --- a/tests/acceptance/features/bootstrap/SpacesContext.php +++ b/tests/acceptance/features/bootstrap/SpacesContext.php @@ -404,7 +404,7 @@ class SpacesContext implements Context { } /** - * @Then the json responded should contain these key and value pairs + * @Then /the json responded should contain these key and value pairs/ * * @param TableNode $table * @@ -413,11 +413,37 @@ class SpacesContext implements Context { public function jsonRespondedShouldContain(TableNode $table) { $this->featureContext->verifyTableNodeColumns($table, ['key', 'value']); $responseJson = json_decode($this->featureContext->getResponse()->getBody(), true); + foreach ($table->getHash() as $row) { - $expected = [$row["key"] => $row["value"]]; - Assert::assertEquals($row["value"], $responseJson[$row["key"]]); + if (empty($this->searchKeyValueInArray($responseJson, $row["key"], $row["value"]))){ + Assert::assertFalse($row["value"], ($row["value"] . ' not found')); + } } } + + /** + * Method search for a match $key->$value + * + * @param array $array + * @param string $key + * @param string $value + * @return array $results + */ + public function searchKeyValueInArray($array, $key, $value) + { + $results = array(); + + if (is_array($array)) { + if (isset($array[$key]) && $array[$key] == $value) { + $results[] = $array; + } + + foreach ($array as $subarray) { + $results = array_merge($results, $this->searchKeyValueInArray($subarray, $key, $value)); + } + } + return $results; + } /** * @param string $shouldOrNot (not|) @@ -452,6 +478,7 @@ class SpacesContext implements Context { } } } + /** * Verify that the tableNode contains expected number of columns * @@ -533,4 +560,64 @@ class SpacesContext implements Context { } return false; } + + /** + * @When /^user "([^"]*)" creates a folder "([^"]*)" in space "([^"]*)" using the WebDav Api$/ + * + * @param string $user + * @param string $folder + * @param string $spaceName + * + * @return void + * @throws JsonException + */ + public function theUserCreatesAFolderUsingTheGraphApi($user, $folder, $spaceName): void + { + $this->featureContext->setResponse( + $this->sendCreateFolderRequest( + $this->featureContext->getBaseUrl(), + "", + "MKCOL", + $user, + $this->featureContext->getPasswordForUser($user), + $folder, + $spaceName + ) + ); + } + + /** + * Send Graph Create Space Request + * + * @param $baseUrl + * @param $user + * @param $password + * @param string $method + * @param string $xRequestId + * @param array $headers + * @param string $folder + * @param string $spaceName + * @return ResponseInterface + */ + public function sendCreateFolderRequest( + $baseUrl, + string $xRequestId = '', + string $method, + $user, + $password, + $folder, + $spaceName, + array $headers = [] + + ): ResponseInterface + { + $spaceId = $this->getAvailableSpaces()[$spaceName]["id"]; + $fullUrl = $baseUrl; + if (!str_ends_with($fullUrl, '/')) { + $fullUrl .= '/'; + } + $fullUrl .= "dav/spaces/" . $spaceId . '/' . $folder; + + return HttpRequestHelper::sendRequest($fullUrl, $xRequestId, $method, $user, $password, $headers); + } }