diff --git a/tests/acceptance/expected-failures-localAPI-on-OCIS-storage.md b/tests/acceptance/expected-failures-localAPI-on-OCIS-storage.md index f1c77d3cdb7..cf6ac4c63ab 100644 --- a/tests/acceptance/expected-failures-localAPI-on-OCIS-storage.md +++ b/tests/acceptance/expected-failures-localAPI-on-OCIS-storage.md @@ -33,3 +33,13 @@ The expected failures in this file are from features in the owncloud/ocis repo. - [apiSpaces/copySpaces.feature:163](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/copySpaces.feature#L163) - [apiSpaces/copySpaces.feature:260](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/copySpaces.feature#L260) - [apiSpaces/copySpaces.feature:261](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/copySpaces.feature#L261) +- [apiSpaces/moveSpaces.feature:161](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/moveSpaces.feature#L161) +- [apiSpaces/moveSpaces.feature:162](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/moveSpaces.feature#L162) +- [apiSpaces/moveSpaces.feature:181](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/moveSpaces.feature#L181) +- [apiSpaces/moveSpaces.feature:182](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/moveSpaces.feature#L182) +- [apiSpaces/moveSpaces.feature:183](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/moveSpaces.feature#L183) +- [apiSpaces/moveSpaces.feature:184](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/moveSpaces.feature#L184) +- [apiSpaces/moveSpaces.feature:185](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/moveSpaces.feature#L185) +- [apiSpaces/moveSpaces.feature:186](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/moveSpaces.feature#L186) +- [apiSpaces/moveSpaces.feature:189](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/moveSpaces.feature#L189) + diff --git a/tests/acceptance/features/apiSpaces/moveSpaces.feature b/tests/acceptance/features/apiSpaces/moveSpaces.feature new file mode 100644 index 00000000000..70ceeadcf60 --- /dev/null +++ b/tests/acceptance/features/apiSpaces/moveSpaces.feature @@ -0,0 +1,234 @@ +@api @skipOnOcV10 +Feature: move (rename) file + As a user + I want to be able to move and rename files + So that I can manage my file system + + Background: + Given these users have been created with default attributes and without skeleton files: + | username | + | Alice | + | Brian | + + Scenario Outline: Moving a file within same space project with role manager and editor + Given the administrator has given "Brian" the role "Space Admin" using the settings api + And user "Brian" has created a space "Project" with the default quota using the GraphApi + And user "Brian" has created a folder "newfolder" in space "Project" + And user "Brian" has uploaded a file inside space "Project" with content "some content" to "insideSpace.txt" + And user "Brian" has shared a space "Project" to user "Alice" with role "" + When user "Alice" moves file "insideSpace.txt" to "newfolder/insideSpace.txt" in space "Project" using the WebDAV API + Then the HTTP status code should be "201" + And for user "Alice" the space "Project" should contain these entries: + | newfolder/insideSpace.txt | + And for user "Alice" the space "Project" should not contain these entries: + | insideSpace.txt | + Examples: + | role | + | manager | + | editor | + + + Scenario: Moving a file within same space project with role viewer + Given the administrator has given "Brian" the role "Space Admin" using the settings api + And user "Brian" has created a space "Project" with the default quota using the GraphApi + And user "Brian" has created a folder "newfolder" in space "Project" + And user "Brian" has uploaded a file inside space "Project" with content "some content" to "insideSpace.txt" + And user "Brian" has shared a space "Project" to user "Alice" with role "" + When user "Alice" moves file "insideSpace.txt" to "newfolder/insideSpace.txt" in space "Project" using the WebDAV API + Then the HTTP status code should be "403" + And for user "Alice" the space "Project" should not contain these entries: + | newfolder/insideSpace.txt | + And for user "Alice" the space "Project" should contain these entries: + | insideSpace.txt | + + + Scenario Outline: User moves a file from a space project with different a role to a space project with different role + Given the administrator has given "Brian" the role "Space Admin" using the settings api + And user "Brian" has created a space "Project1" with the default quota using the GraphApi + And user "Brian" has created a space "Project2" with the default quota using the GraphApi + And user "Brian" has uploaded a file inside space "Project1" with content "Project1 content" to "project1.txt" + And user "Brian" has shared a space "Project2" to user "Alice" with role "" + And user "Brian" has shared a space "Project1" to user "Alice" with role "" + When user "Alice" moves file "project1.txt" from space "Project1" to "project1.txt" inside space "Project2" using the WebDAV API + Then the HTTP status code should be "" + And for user "Alice" the space "Project1" should contain these entries: + | project1.txt | + And for user "Alice" the space "Project2" should not contain these entries: + | project1.txt | + Examples: + | from_role | to_role | https_status_code | + | manager | manager | 502 | + | editor | manager | 502 | + | manager | editor | 502 | + | editor | editor | 502 | + | manager | viewer | 403 | + | editor | viewer | 403 | + | viewer | manager | 403 | + | viewer | editor | 403 | + | viewer | viewer | 403 | + + + Scenario Outline: User moves a file from a space project with different role to a space personal + Given the administrator has given "Brian" the role "Space Admin" using the settings api + And user "Brian" has created a space "Project" with the default quota using the GraphApi + And user "Brian" has uploaded a file inside space "Project" with content "Project content" to "project.txt" + And user "Brian" has shared a space "Project" to user "Alice" with role "" + When user "Alice" moves file "project.txt" from space "Project" to "project.txt" inside space "Personal" using the WebDAV API + Then the HTTP status code should be "" + And for user "Alice" the space "Project" should contain these entries: + | project.txt | + And for user "Alice" the space "Personal" should not contain these entries: + | project.txt | + Examples: + | role | https_status_code | + | manager | 502 | + | editor | 502 | + | viewer | 403 | + + + Scenario Outline: User moves a file from space project with different role to space shares jail with different role (permission) + Given the administrator has given "Brian" the role "Space Admin" using the settings api + And user "Brian" has created a space "Project" with the default quota using the GraphApi + And user "Brian" has created folder "/testshare" + And user "Brian" has uploaded a file inside space "Project" with content "Project content" to "project.txt" + And user "Brian" has shared a space "Project" to user "Alice" with role "" + And user "Brian" has shared folder "/testshare" with user "Alice" with permissions "" + And user "Alice" has accepted share "/testshare" offered by user "Brian" + When user "Alice" moves file "project.txt" from space "Project" to "/testshare/project.txt" inside space "Shares Jail" using the WebDAV API + Then the HTTP status code should be "502" + And for user "Alice" the space "Project" should contain these entries: + | project.txt | + And for user "Alice" the space "Shares Jail" should not contain these entries: + | /testshare/project.txt | + Examples: + | role | permissions | + | manager | 31 | + | editor | 31 | + | manager | 17 | + | editor | 17 | + | viewer | 31 | + | viewer | 17 | + + + Scenario Outline: User moves a file from space personal to space project with different role + Given the administrator has given "Brian" the role "Space Admin" using the settings api + And user "Brian" has created a space "Project" with the default quota using the GraphApi + And user "Brian" has shared a space "Project" to user "Alice" with role "" + And user "Alice" has uploaded file with content "personal space content" to "/personal.txt" + When user "Alice" moves file "personal.txt" from space "Personal" to "personal.txt" inside space "Project" using the WebDAV API + Then the HTTP status code should be "" + And for user "Alice" the space "Personal" should contain these entries: + | personal.txt | + And for user "Alice" the space "Project" should not contain these entries: + | personal.txt | + Examples: + | role | https_status_code | + | manager | 502 | + | editor | 502 | + | viewer | 403 | + + + Scenario Outline: User moves a file from space personal to space shares jail with different role (permission) + Given user "Brian" has created folder "/testshare" + And user "Brian" has shared folder "/testshare" with user "Alice" with permissions "" + And user "Alice" has accepted share "/testshare" offered by user "Brian" + And user "Alice" has uploaded file with content "personal content" to "personal.txt" + When user "Alice" moves file "personal.txt" from space "Personal" to "/testshare/personal.txt" inside space "Shares Jail" using the WebDAV API + Then the HTTP status code should be "502" + And for user "Alice" the space "Personal" should contain these entries: + | personal.txt | + And for user "Alice" the space "Shares Jail" should not contain these entries: + | /testshare/personal.txt | + Examples: + | permissions | + | 31 | + | 17 | + + + Scenario Outline: User moves a file from space shares jail with different role (permissions) to space personal + Given user "Brian" has created folder "/testshare" + And user "Brian" has uploaded file with content "testshare content" to "/testshare/testshare.txt" + And user "Brian" has shared folder "/testshare" with user "Alice" with permissions "" + And user "Alice" has accepted share "/testshare" offered by user "Brian" + When user "Alice" moves file "/testshare/testshare.txt" from space "Shares Jail" to "testshare.txt" inside space "Personal" using the WebDAV API + Then the HTTP status code should be "502" + And for user "Alice" the space "Personal" should not contain these entries: + | testshare.txt | + And for user "Alice" the space "Shares Jail" should contain these entries: + | /testshare/testshare.txt | + Examples: + | permissions | + | 31 | + | 17 | + + + Scenario Outline: User moves a file from space shares jail with different role (permissions) to space project with different role + Given the administrator has given "Brian" the role "Space Admin" using the settings api + And user "Brian" has created a space "Project" with the default quota using the GraphApi + And user "Brian" has shared a space "Project" to user "Alice" with role "" + And user "Brian" has created folder "/testshare" + And user "Brian" has uploaded file with content "testshare content" to "/testshare/testshare.txt" + And user "Brian" has shared folder "/testshare" with user "Alice" with permissions "" + And user "Alice" has accepted share "/testshare" offered by user "Brian" + When user "Alice" moves file "/testshare/testshare.txt" from space "Shares Jail" to "testshare.txt" inside space "Project" using the WebDAV API + Then the HTTP status code should be "502" + And for user "Alice" the space "Project" should not contain these entries: + | /testshare.txt | + And for user "Alice" the space "Shares Jail" should contain these entries: + | /testshare/testshare.txt | + Examples: + | role | permissions | + | manager | 31 | + | editor | 31 | + | viewer | 31 | + | manager | 17 | + | editor | 17 | + | viewer | 17 | + + + Scenario: User moves a file from space shares jail with role editor to space shares jail with role editor + Given user "Brian" has created folder "/testshare1" + And user "Brian" has created folder "/testshare2" + And user "Brian" has uploaded file with content "testshare1 content" to "/testshare1/testshare1.txt" + And user "Brian" has shared folder "/testshare1" with user "Alice" with permissions "31" + And user "Brian" has shared folder "/testshare2" with user "Alice" with permissions "31" + And user "Alice" has accepted share "/testshare1" offered by user "Brian" + And user "Alice" has accepted share "/testshare2" offered by user "Brian" + When user "Alice" moves file "/testshare1/testshare1.txt" from space "Shares Jail" to "/testshare2/testshare1.txt" inside space "Shares Jail" using the WebDAV API + Then the HTTP status code should be "201" + And for user "Alice" the space "Shares Jail" should contain these entries: + | /testshare2/testshare1.txt | + And for user "Brian" the space "Personal" should contain these entries: + | /testshare2/testshare1.txt | + + + Scenario: User moves a file from space shares jail with role editor to space shares jail with role viewer + Given user "Brian" has created folder "/testshare1" + And user "Brian" has created folder "/testshare2" + And user "Brian" has uploaded file with content "testshare1 content" to "/testshare1/testshare1.txt" + And user "Brian" has shared folder "/testshare1" with user "Alice" with permissions "31" + And user "Brian" has shared folder "/testshare2" with user "Alice" with permissions "17" + And user "Alice" has accepted share "/testshare1" offered by user "Brian" + And user "Alice" has accepted share "/testshare2" offered by user "Brian" + When user "Alice" moves file "/testshare1/testshare1.txt" from space "Shares Jail" to "/testshare2/testshare1.txt" inside space "Shares Jail" using the WebDAV API + Then the HTTP status code should be "403" + And for user "Alice" the space "Shares Jail" should not contain these entries: + | /testshare2/testshare1.txt | + And for user "Brian" the space "Personal" should not contain these entries: + | /testshare2/testshare1.txt | + + + Scenario: User moves a file from space shares jail with role viewer to space shares jail with role editor + Given user "Brian" has created folder "/testshare1" + And user "Brian" has created folder "/testshare2" + And user "Brian" has uploaded file with content "testshare1 content" to "/testshare1/testshare1.txt" + And user "Brian" has shared folder "/testshare1" with user "Alice" with permissions "17" + And user "Brian" has shared folder "/testshare2" with user "Alice" with permissions "31" + And user "Alice" has accepted share "/testshare1" offered by user "Brian" + And user "Alice" has accepted share "/testshare2" offered by user "Brian" + When user "Alice" moves file "/testshare1/testshare1.txt" from space "Shares Jail" to "/testshare2/testshare1.txt" inside space "Shares Jail" using the WebDAV API + Then the HTTP status code should be "403" + And for user "Alice" the space "Shares Jail" should not contain these entries: + | /testshare2/testshare1.txt | + And for user "Brian" the space "Personal" should not contain these entries: + | /testshare2/testshare1.txt | diff --git a/tests/acceptance/features/bootstrap/SpacesContext.php b/tests/acceptance/features/bootstrap/SpacesContext.php index 4e1a1be02af..c7d341387d9 100644 --- a/tests/acceptance/features/bootstrap/SpacesContext.php +++ b/tests/acceptance/features/bootstrap/SpacesContext.php @@ -1747,6 +1747,56 @@ public function userCopiesFileWithinSpaceUsingTheWebDAVAPI( $this->copyFilesAndFoldersRequest($user, $fullUrl, $headers); } + /** + * @When /^user "([^"]*)" moves (?:file|folder) "([^"]*)" to "([^"]*)" in space "([^"]*)" using the WebDAV API$/ + * + * @param string $user + * @param string $fileSource + * @param string $fileDestination + * @param string $spaceName + * + * @return void + */ + public function userMovesFileWithinSpaceUsingTheWebDAVAPI( + string $user, + string $fileSource, + string $fileDestination, + string $spaceName + ):void { + $space = $this->getSpaceByName($user, $spaceName); + $headers['Destination'] = $this->destinationHeaderValueWithSpaceName( + $user, + $fileDestination, + $spaceName + ); + + $fullUrl = $space["root"]["webDavUrl"] . '/' . \trim($fileSource, "/"); + $this->moveFilesAndFoldersRequest($user, $fullUrl, $headers); + } + + /** + * MOVE request for files|folders + * + * @param string $user + * @param string $fullUrl + * @param string $headers + * + * @return void + * @throws GuzzleException + */ + public function moveFilesAndFoldersRequest(string $user, string $fullUrl, array $headers):void { + $this->featureContext->setResponse( + HttpRequestHelper::sendRequest( + $fullUrl, + $this->featureContext->getStepLineRef(), + 'MOVE', + $user, + $this->featureContext->getPasswordForUser($user), + $headers, + ) + ); + } + /** * @When /^user "([^"]*)" copies (?:file|folder) "([^"]*)" from space "([^"]*)" to "([^"]*)" inside space "([^"]*)" using the WebDAV API$/ * @@ -1772,6 +1822,32 @@ public function userCopiesFileFromAndToSpaceBetweenSpaces( $this->copyFilesAndFoldersRequest($user, $fullUrl, $headers); } + + /** + * @When /^user "([^"]*)" moves (?:file|folder) "([^"]*)" from space "([^"]*)" to "([^"]*)" inside space "([^"]*)" using the WebDAV API$/ + * + * @param string $user + * @param string $fileSource + * @param string $fromSpaceName + * @param string $fileDestination + * @param string $toSpaceName + * + * @return void + * @throws GuzzleException + */ + public function userMovesFileFromAndToSpaceBetweenSpaces( + string $user, + string $fileSource, + string $fromSpaceName, + string $fileDestination, + string $toSpaceName + ):void { + $space = $this->getSpaceByName($user, $fromSpaceName); + $headers['Destination'] = $this->destinationHeaderValueWithSpaceName($user, $fileDestination, $toSpaceName); + $fullUrl = $space["root"]["webDavUrl"] . '/' . \ltrim($fileSource, "/"); + $this->moveFilesAndFoldersRequest($user, $fullUrl, $headers); + } + /** * returns a url for destination with spacename *