diff --git a/tests/acceptance/expected-failures-localAPI-on-OCIS-storage.md b/tests/acceptance/expected-failures-localAPI-on-OCIS-storage.md index 585034e0048..f1c77d3cdb7 100644 --- a/tests/acceptance/expected-failures-localAPI-on-OCIS-storage.md +++ b/tests/acceptance/expected-failures-localAPI-on-OCIS-storage.md @@ -25,3 +25,11 @@ The expected failures in this file are from features in the owncloud/ocis repo. ### [Space Admin still has access to the project despite being removed from it](https://github.com/owncloud/ocis/issues/4127) - [apiSpaces/shareSpaces.feature:77](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/shareSpaces.feature#L77) - [apiSpaces/shareSpaces.feature:78](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/shareSpaces.feature#L78) + +### [Depth infinity not supported for space Shares Jail](https://github.com/owncloud/ocis/issues/4188) +- [apiSpaces/copySpaces.feature:112](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/copySpaces.feature#L112) +- [apiSpaces/copySpaces.feature:113](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/copySpaces.feature#L113) +- [apiSpaces/copySpaces.feature:114](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/copySpaces.feature#L114) +- [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) diff --git a/tests/acceptance/features/apiSpaces/copySpaces.feature b/tests/acceptance/features/apiSpaces/copySpaces.feature new file mode 100644 index 00000000000..03711d0f0a2 --- /dev/null +++ b/tests/acceptance/features/apiSpaces/copySpaces.feature @@ -0,0 +1,281 @@ +@api @skipOnOcV10 +Feature: copy file + As a user + I want to be able to copy files + So that I can manage my files + + Background: + Given these users have been created with default attributes and without skeleton files: + | username | + | Alice | + | Brian | + + + Scenario Outline: Copying a file within a same space project with role manager and editor + Given the administrator has given "Alice" the role "Space Admin" using the settings api + And user "Alice" has created a space "Project" with the default quota using the GraphApi + And user "Alice" has created a folder "newfolder" in space "Project" + And user "Alice" has uploaded a file inside space "Project" with content "some content" to "insideSpace.txt" + And user "Alice" has shared a space "Project" to user "Brian" with role "" + When user "Brian" copies file "insideSpace.txt" to "/newfolder/insideSpace.txt" inside space "Project" using the WebDAV API + Then the HTTP status code should be "201" + And for user "Brian" the space "Project" should contain these entries: + | newfolder/insideSpace.txt | + And for user "Alice" the content of the file "newfolder/insideSpace.txt" of the space "Project" should be "some content" + Examples: + | role | + | manager | + | editor | + + + Scenario: Copying a file within a same space project with role viewer + Given the administrator has given "Alice" the role "Space Admin" using the settings api + And user "Alice" has created a space "Project" with the default quota using the GraphApi + And user "Alice" has created a folder "newfolder" in space "Project" + And user "Alice" has uploaded a file inside space "Project" with content "some content" to "insideSpace.txt" + And user "Alice" has shared a space "Project" to user "Brian" with role "viewer" + When user "Brian" copies file "insideSpace.txt" to "newfolder/insideSpace.txt" inside space "Project" using the WebDAV API + Then the HTTP status code should be "403" + And for user "Brian" the space "Project" should not contain these entries: + | newfolder/insideSpace.txt | + + + Scenario Outline: User copies a file from a space project with a different role to a space project with the manager 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" copies file "project1.txt" from space "Project1" to "project1.txt" inside space "Project2" using the WebDAV API + Then the HTTP status code should be "201" + And for user "Alice" the space "Project2" should contain these entries: + | project1.txt | + And for user "Alice" the content of the file "project1.txt" of the space "Project2" should be "Project1 content" + Examples: + | from_role | to_role | + | manager | manager | + | manager | editor | + | editor | manager | + | editor | editor | + + + Scenario Outline: User copies a file from a space project with a different role to a space project with a viewer 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 "viewer" + And user "Brian" has shared a space "Project1" to user "Alice" with role "" + When user "Alice" copies file "project1.txt" from space "Project1" to "project1.txt" inside space "Project2" using the WebDAV API + Then the HTTP status code should be "403" + And for user "Alice" the space "Project2" should not contain these entries: + | project1.txt | + Examples: + | role | + | manager | + | editor | + + + Scenario Outline: User copies a file from space project with different role to 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" copies file "project.txt" from space "Project" to "project.txt" inside space "Personal" using the WebDAV API + Then the HTTP status code should be "201" + And for user "Alice" the space "Personal" should contain these entries: + | project.txt | + And for user "Alice" the content of the file "project.txt" of the space "Personal" should be "Project content" + Examples: + | role | + | manager | + | editor | + | viewer | + + + Scenario Outline: User copies a file from space project with different role to space shares jail with editor 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 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 "31" + And user "Alice" has accepted share "/testshare" offered by user "Brian" + When user "Alice" copies 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 "201" + And for user "Alice" the space "Shares Jail" should contain these entries: + | /testshare/project.txt | + And for user "Alice" the content of the file "/testshare/project.txt" of the space "Shares Jail" should be "Project content" + Examples: + | role | + | manager | + | editor | + | viewer | + + + Scenario Outline: User copies a file from space project with different role to shares jail with viewer 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 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 "17" + And user "Alice" has accepted share "/testshare" offered by user "Brian" + When user "Alice" copies 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 "403" + And for user "Alice" the space "Shares Jail" should not contain these entries: + | /testshare/project.txt | + Examples: + | role | + | manager | + | editor | + | viewer | + + + Scenario Outline: User copies 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" copies file "personal.txt" from space "Personal" to "personal.txt" inside 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: + | personal.txt | + And for user "Alice" the content of the file "personal.txt" of the space "Project" should be "personal space content" + Examples: + | role | + | manager | + | editor | + + + Scenario: User copies a file from space personal to 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 shared a space "Project" to user "Alice" with role "viewer" + And user "Alice" has uploaded file with content "personal space content" to "/personal.txt" + When user "Alice" copies file "personal.txt" from space "Personal" to "personal.txt" inside 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: + | personal.txt | + + + Scenario: User copies a file from space personal to space shares jail with role editor + Given user "Brian" has created folder "/testshare" + And user "Brian" has shared folder "/testshare" with user "Alice" with permissions "31" + 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" copies 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 "201" + And for user "Alice" the space "Shares Jail" should contain these entries: + | /testshare/personal.txt | + And for user "Alice" the content of the file "/testshare/personal.txt" of the space "Shares Jail" should be "personal content" + + + Scenario: User copies a file from space personal to space shares jail with role viewer + Given user "Brian" has created folder "/testshare" + And user "Brian" has shared folder "/testshare" with user "Alice" with permissions "17" + 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" copies 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 "403" + And for user "Alice" the space "Shares Jail" should not contain these entries: + | /testshare/personal.txt | + + + Scenario Outline: User copies a file from space shares jail with different role to space personal + Given the administrator has given "Brian" the role "Space Admin" using the settings api + 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" copies 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 "201" + And for user "Alice" the space "Personal" should contain these entries: + | /testshare.txt | + And for user "Alice" the content of the file "/testshare.txt" of the space "Personal" should be "testshare content" + Examples: + | permissions | + | 31 | + | 17 | + + + Scenario Outline: User copies a file from space shares jail with different role 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" copies 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 "201" + And for user "Alice" the space "Project" should contain these entries: + | /testshare.txt | + And for user "Alice" the content of the file "testshare.txt" of the space "Project" should be "testshare content" + Examples: + | role | permissions | + | manager | 31 | + | manager | 17 | + | editor | 31 | + | editor | 17 | + + + Scenario Outline: User copies a file from space shares jail with different role to 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 shared a space "Project" to user "Alice" with role "viewer" + 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" copies 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 "403" + And for user "Alice" the space "Project" should not contain these entries: + | /testshare.txt | + Examples: + | permissions | + | 31 | + | 17 | + + + Scenario Outline: User copies a file from space shares jail with different role 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 "" + 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" copies 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 | + And for user "Alice" the content of the file "/testshare2/testshare1.txt" of the space "Shares Jail" should be "testshare1 content" + And for user "Brian" the content of the file "/testshare1/testshare1.txt" of the space "Personal" should be "testshare1 content" + Examples: + | permissions | + | 31 | + | 17 | + + + Scenario Outline: User copies a file from space shares jail with different role 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 "" + 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" copies 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 | + Examples: + | permissions | + | 31 | + | 17 | diff --git a/tests/acceptance/features/bootstrap/SpacesContext.php b/tests/acceptance/features/bootstrap/SpacesContext.php index de2cb86074f..31eaa26d8b5 100644 --- a/tests/acceptance/features/bootstrap/SpacesContext.php +++ b/tests/acceptance/features/bootstrap/SpacesContext.php @@ -781,13 +781,14 @@ public function theUserListsTheContentOfAPersonalSpaceRootUsingTheWebDAvApi( Assert::assertIsArray($space); Assert::assertNotEmpty($spaceId = $space["id"]); Assert::assertNotEmpty($spaceWebDavUrl = $space["root"]["webDavUrl"]); + $headers['Depth'] = 'infinity'; $this->featureContext->setResponse( $this->sendPropfindRequestToUrl( $spaceWebDavUrl . '/' . $foldersPath, $user, $this->featureContext->getPasswordForUser($user), "", - [], + $headers, ) ); $this->setResponseSpaceId($spaceId);