diff --git a/tests/acceptance/features/apiSpacesDavOperation/updateFileByFileId.feature b/tests/acceptance/features/apiSpacesDavOperation/updateFileByFileId.feature new file mode 100644 index 00000000000..d4cf9a2831d --- /dev/null +++ b/tests/acceptance/features/apiSpacesDavOperation/updateFileByFileId.feature @@ -0,0 +1,112 @@ +Feature: update files using file id + As a user + I want to update the files using file id + So that I can make changes on the content of a file + + Background: + Given using spaces DAV path + And user "Alice" has been created with default attributes and without skeleton files + + + Scenario Outline: update content of a file + Given user "Alice" has uploaded file with content "some data" to "/textfile.txt" + And we save it into "FILEID" + When user "Alice" sends HTTP method "PUT" to URL "" with content "updated content" + Then the HTTP status code should be "204" + And for user "Alice" the content of the file "/textfile.txt" of the space "Personal" should be "updated content" + Examples: + | dav-path | + | /remote.php/dav/spaces/<> | + | /dav/spaces/<> | + + + Scenario Outline: update content of a file inside a folder + Given user "Alice" has created folder "uploadFolder" + And user "Alice" has uploaded file with content "some data" to "uploadFolder/textfile.txt" + And we save it into "FILEID" + When user "Alice" sends HTTP method "PUT" to URL "" with content "updated content" + Then the HTTP status code should be "204" + And for user "Alice" the content of the file "/uploadFolder/textfile.txt" of the space "Personal" should be "updated content" + Examples: + | dav-path | + | /remote.php/dav/spaces/<> | + | /dav/spaces/<> | + + + Scenario Outline: update content of a file inside a project space + Given the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API + And user "Alice" has created a space "new-space" with the default quota using the GraphApi + And user "Alice" has uploaded a file inside space "new-space" with content "some data" to "/textfile.txt" + And we save it into "FILEID" + When user "Alice" sends HTTP method "PUT" to URL "" with content "updated content" + Then the HTTP status code should be "204" + And for user "Alice" the content of the file "/textfile.txt" of the space "new-space" should be "updated content" + Examples: + | dav-path | + | /remote.php/dav/spaces/<> | + | /dav/spaces/<> | + + + Scenario Outline: sharee updates content of a shared file + Given user "Brian" has been created with default attributes and without skeleton files + And user "Alice" has uploaded file with content "some data" to "/textfile.txt" + And we save it into "FILEID" + And user "Alice" has shared file "/textfile.txt" with user "Brian" + And user "Brian" has accepted share "/textfile.txt" offered by user "Alice" + When user "Brian" sends HTTP method "PUT" to URL "" with content "updated content" + Then the HTTP status code should be "204" + And for user "Alice" the content of the file "/textfile.txt" of the space "Personal" should be "updated content" + And for user "Brian" the content of the file "textfile.txt" of the space "Shares" should be "updated content" + Examples: + | dav-path | + | /remote.php/dav/spaces/<> | + | /dav/spaces/<> | + + + Scenario Outline: sharee updates content of a file inside a shared folder + Given user "Brian" has been created with default attributes and without skeleton files + And user "Alice" has created folder "uploadFolder" + And user "Alice" has uploaded file with content "some data" to "uploadFolder/textfile.txt" + And we save it into "FILEID" + And user "Alice" has shared folder "/uploadFolder" with user "Brian" + And user "Brian" has accepted share "/uploadFolder" offered by user "Alice" + When user "Brian" sends HTTP method "PUT" to URL "" with content "updated content" + Then the HTTP status code should be "204" + And for user "Alice" the content of the file "uploadFolder/textfile.txt" of the space "Personal" should be "updated content" + And for user "Brian" the content of the file "uploadFolder/textfile.txt" of the space "Shares" should be "updated content" + Examples: + | dav-path | + | /remote.php/dav/spaces/<> | + | /dav/spaces/<> | + + + Scenario Outline: sharee with different role tries to update content of a file inside a shared space + Given user "Brian" has been created with default attributes and without skeleton files + And the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API + And user "Alice" has created a space "new-space" with the default quota using the GraphApi + And user "Alice" has uploaded a file inside space "new-space" with content "some data" to "/textfile.txt" + And we save it into "FILEID" + And user "Alice" has shared a space "new-space" with settings: + | shareWith | Brian | + | role | | + When user "Brian" sends HTTP method "PUT" to URL "" with content "updated content" + Then the HTTP status code should be "" + And for user "Alice" the content of the file "/textfile.txt" of the space "new-space" should be "" + And for user "Brian" the content of the file "/textfile.txt" of the space "new-space" should be "" + Examples: + | dav-path | role | http_status_code | file-content | + | /remote.php/dav/spaces/<> | viewer | 403 | some data | + | /dav/spaces/<> | editor | 204 | updated content | + + + Scenario Outline: user tries to update content of a file owned by others + Given user "Brian" has been created with default attributes and without skeleton files + And user "Alice" has uploaded file with content "some data" to "/textfile.txt" + And we save it into "FILEID" + When user "Brian" sends HTTP method "PUT" to URL "" with content "updated content" + Then the HTTP status code should be "404" + And for user "Alice" the content of the file "/textfile.txt" of the space "Personal" should be "some data" + Examples: + | dav-path | + | /remote.php/dav/spaces/<> | + | /dav/spcaes/<> | diff --git a/tests/acceptance/features/bootstrap/FeatureContext.php b/tests/acceptance/features/bootstrap/FeatureContext.php index 0f263e66b39..bd5198321c9 100644 --- a/tests/acceptance/features/bootstrap/FeatureContext.php +++ b/tests/acceptance/features/bootstrap/FeatureContext.php @@ -1173,6 +1173,20 @@ public function userHasSentHTTPMethodToUrl(string $user, string $verb, string $u $this->theHTTPStatusCodeShouldBeSuccess(); } + /** + * @When user :user sends HTTP method :method to URL :davPath with content :content + * + * @param string $user + * @param string $method + * @param string $davPath + * @param string $content + * + * @return void + */ + public function userSendsHttpMethodToUrlWithContent(string $user, string $method, string $davPath, string $content): void { + $this->sendingToWithDirectUrl($user, $method, $davPath, $content); + } + /** * @When /^user "([^"]*)" sends HTTP method "([^"]*)" to URL "([^"]*)" with password "([^"]*)"$/ * @@ -1206,13 +1220,13 @@ public function userHasSentHTTPMethodToUrlWithPassword(string $user, string $ver * @param string|null $user * @param string|null $verb * @param string|null $url - * @param TableNode|null $body + * @param TableNode|string|null $body * @param string|null $password * * @return void * @throws GuzzleException */ - public function sendingToWithDirectUrl(?string $user, ?string $verb, ?string $url, ?TableNode $body, ?string $password = null): void { + public function sendingToWithDirectUrl(?string $user, ?string $verb, ?string $url, $body, ?string $password = null): void { $fullUrl = $this->getBaseUrl() . $url; if ($password === null) { @@ -1239,6 +1253,9 @@ public function sendingToWithDirectUrl(?string $user, ?string $verb, ?string $ur if ($body instanceof TableNode) { $bodyRows = $body->getRowsHash(); } + if (\is_string($body)) { + $bodyRows = $body; + } if (isset($this->requestToken)) { $headers['requesttoken'] = $this->requestToken;