From ea2bcefc057cf2b395ab259ec0245258a4f727f2 Mon Sep 17 00:00:00 2001 From: amrita Date: Thu, 20 Jul 2023 15:52:25 +0545 Subject: [PATCH] Add more tests coverage --- .drone.star | 1 + tests/acceptance/config/behat.yml | 21 ++++++- .../download.feature | 0 .../apiDownloads/spaceDownload.feature | 62 +++++++++++++++++++ .../features/apiSpaces/spaceDownload.feature | 25 -------- .../features/bootstrap/SpacesContext.php | 10 +-- 6 files changed, 89 insertions(+), 30 deletions(-) rename tests/acceptance/features/{apiSpaces => apiDownloads}/download.feature (100%) create mode 100644 tests/acceptance/features/apiDownloads/spaceDownload.feature delete mode 100644 tests/acceptance/features/apiSpaces/spaceDownload.feature diff --git a/.drone.star b/.drone.star index 5a552268eed..94c8ae20d11 100644 --- a/.drone.star +++ b/.drone.star @@ -109,6 +109,7 @@ config = { "apiSpacesShares", "apiCors", "apiAsyncUpload", + "apiDownloads", ], "skip": False, }, diff --git a/tests/acceptance/config/behat.yml b/tests/acceptance/config/behat.yml index c122e94cdb6..8f79f9ecce7 100644 --- a/tests/acceptance/config/behat.yml +++ b/tests/acceptance/config/behat.yml @@ -55,7 +55,6 @@ default: - SpacesTUSContext: - GraphContext: - OcisConfigContext: - - ArchiverContext: apiSpacesShares: paths: @@ -211,6 +210,26 @@ default: - OcisConfigContext: - PublicWebDavContext: + apiDownloads: + paths: + - '%paths.base%/../features/apiDownloads' + context: *common_ldap_suite_context + contexts: + - NotificationContext: + - SpacesContext: + - FeatureContext: *common_feature_context_params + - WebDavPropertiesContext: + - OCSContext: + - GraphContext: + - TrashbinContext: + - FavoritesContext: + - ChecksumContext: + - FilesVersionsContext: + - SettingsContext: + - OcisConfigContext: + - PublicWebDavContext: + - ArchiverContext: + extensions: rdx\behatvars\BehatVariablesExtension: ~ diff --git a/tests/acceptance/features/apiSpaces/download.feature b/tests/acceptance/features/apiDownloads/download.feature similarity index 100% rename from tests/acceptance/features/apiSpaces/download.feature rename to tests/acceptance/features/apiDownloads/download.feature diff --git a/tests/acceptance/features/apiDownloads/spaceDownload.feature b/tests/acceptance/features/apiDownloads/spaceDownload.feature new file mode 100644 index 00000000000..dee327260fc --- /dev/null +++ b/tests/acceptance/features/apiDownloads/spaceDownload.feature @@ -0,0 +1,62 @@ +@api +Feature: Download space + As a user + I want to download space + So that I can store it locally + + + Background: + Given these users have been created with default attributes and without skeleton files: + | username | + | Alice | + | Brian | + And using spaces DAV path + And the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API + And user "Alice" has created a space "Project-space" with the default quota using the GraphApi + And user "Alice" has uploaded a file inside space "Project-space" with content "some data" to "file1.txt" + And user "Alice" has created a folder ".space" in space "Project-space" + And user "Alice" has uploaded a file inside space "Project-space" with content "space description" to ".space/readme.md" + + + Scenario: user downloads a space + Given user "Alice" has uploaded a file inside space "Project-space" with content "other data" to "file2.txt" + When user "Alice" downloads the space "Project-space" using the WebDAV API + Then the HTTP status code should be "200" + And the downloaded "tar" archive should contain these files: + | name | content | + | file1.txt | some data | + | file2.txt | other data | + | .space/readme.md | space description | + + + Scenario Outline: user downloads a shared space (shared by others) + Given user "Alice" has shared a space "Project-space" with settings: + | shareWith | Brian | + | role | | + When user "Brian" downloads the space "Project-space" using the WebDAV API + Then the HTTP status code should be "200" + And the downloaded "tar" archive should contain these files: + | name | content | + | file1.txt | some data | + | .space/readme.md | space description | + Examples: + | role | + | manager | + | editor | + | viewer | + + + Scenario Outline: admin/space-admin tries to download a space that they do not have access to + Given the administrator has assigned the role "" to user "Brian" using the Graph API + When user "Brian" tries to download the space "Project-space" owned by user "Alice" using the WebDAV API + Then the HTTP status code should be "404" + Examples: + | userRole | + | Admin | + | Space Admin | + + + Scenario: user tries to download disabled space + Given user "Alice" has disabled a space "Project-space" + When user "Alice" tries to download the space "Project-space" using the WebDAV API + Then the HTTP status code should be "404" diff --git a/tests/acceptance/features/apiSpaces/spaceDownload.feature b/tests/acceptance/features/apiSpaces/spaceDownload.feature deleted file mode 100644 index c6dbba9ccb7..00000000000 --- a/tests/acceptance/features/apiSpaces/spaceDownload.feature +++ /dev/null @@ -1,25 +0,0 @@ -@api -Feature: Download space - As a user - I want to download space - So that I can store it locally - - - Scenario: user downloads a space - Given user "Alice" has been created with default attributes and without skeleton files - And using spaces DAV path - And the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API - And user "Alice" has created a space "Project-space" with the default quota using the GraphApi - And user "Alice" has uploaded a file inside space "Project-space" with content "some data" to "file1.txt" - And user "Alice" has uploaded a file inside space "Project-space" with content "other data" to "file2.txt" - And user "Alice" has uploaded a file inside space "Project-space" with content "more data" to "file3.txt" - And user "Alice" has created a folder ".space" in space "Project-space" - And user "Alice" has uploaded a file inside space "Project-space" with content "space description" to ".space/readme.md" - When user "Alice" downloads the space "Project-space" using the WebDAV API - Then the HTTP status code should be "200" - And the downloaded "tar" archive should contain these files: - | name | content | - | file1.txt | some data | - | file2.txt | other data | - | file3.txt | more data | - | .space/readme.md | space description | diff --git a/tests/acceptance/features/bootstrap/SpacesContext.php b/tests/acceptance/features/bootstrap/SpacesContext.php index 0d39b1b0cd6..aba5d3639c9 100644 --- a/tests/acceptance/features/bootstrap/SpacesContext.php +++ b/tests/acceptance/features/bootstrap/SpacesContext.php @@ -3242,18 +3242,20 @@ public function theUserShouldHaveSpaceWithRecipient( } /** - * @When user :user downloads the space :spaceName using the WebDAV API + * @When user :user tries to download the space :spaceName owned by user :owner using the WebDAV API + * @When /^user "([^"]*)" (?:downloads|tries to download) the space "([^"]*)" using the WebDAV API$/ * * @param string $user * @param string $spaceName + * @param string $owner * * @return void * * @throws GuzzleException */ - public function userDownloadsTheSpaceUsingTheWebdavApi(string $user, string $spaceName):void { - $space = $this->getSpaceByName($user, $spaceName); - $url = $this->featureContext->getBaseUrl() . '/archiver?id=' . $space["id"]; + public function userDownloadsTheSpaceUsingTheWebdavApi(string $user, string $spaceName, string $owner = ''):void { + $space = $this->getSpaceByName($owner ?: $user, $spaceName); + $url = $this->featureContext->getBaseUrl() . '/archiver?id=' . $space['id']; $this->featureContext->setResponse( HttpRequestHelper::get( $url,