diff --git a/tests/acceptance/bootstrap/SpacesTUSContext.php b/tests/acceptance/bootstrap/SpacesTUSContext.php index a179244d7..33a87b7bd 100644 --- a/tests/acceptance/bootstrap/SpacesTUSContext.php +++ b/tests/acceptance/bootstrap/SpacesTUSContext.php @@ -95,6 +95,25 @@ class SpacesTUSContext implements Context { $this->featureContext->setLastUploadDeleteTime(\time()); } + /** + * @When the public uploads a file from :source to :destination via TUS inside last link shared folder with password :password using the WebDAV API + * + * @param string $source + * @param string $destination + * @param string $password + * + * @return void + * @throws Exception + */ + public function publicUploadsAFileViaTusInsideOfTheSpaceUsingTheWebdavApi( + string $source, + string $destination, + string $password + ): void { + $this->tusContext->publicUploadFileUsingTus($source, $destination, $password); + $this->featureContext->setLastUploadDeleteTime(\time()); + } + /** * @Given user :user has created a new TUS resource in the space :spaceName with the following headers: * diff --git a/tests/acceptance/bootstrap/TUSContext.php b/tests/acceptance/bootstrap/TUSContext.php index 4d023a0e0..35d1fcd48 100644 --- a/tests/acceptance/bootstrap/TUSContext.php +++ b/tests/acceptance/bootstrap/TUSContext.php @@ -344,6 +344,44 @@ class TUSContext implements Context { } } + /** + * @param string $source + * @param string $destination + * @param string|null $password + * + * @return void + */ + public function publicUploadFileUsingTus( + string $source, + string $destination, + ?string $password, + ):void { + $password = $this->featureContext->getActualPassword($password); + if ($this->featureContext->isUsingSharingNG()) { + $token = $this->featureContext->shareNgGetLastCreatedLinkShareToken(); + } else { + $token = $this->featureContext->getLastCreatedPublicShareToken(); + } + $headers = [ + 'Authorization' => 'Basic ' . \base64_encode("public" . ':' . $password), + ]; + $sourceFile = $this->featureContext->acceptanceTestsDirLocation() . $source; + $davPath = WebdavHelper::getDavPath(WebDavHelper::DAV_VERSION_SPACES, $token, "public-files"); + $url = $davPath; + + $client = new Client( + $this->featureContext->getBaseUrl(), + [ + 'verify' => false, + 'headers' => $headers + ] + ); + + $client->setApiPath($url); + $client->setKey((string)rand())->file($sourceFile, $destination); + $client->file($sourceFile, $destination)->createWithUpload("", 0); + } + /** * @When user :user uploads file with content :content to :destination using the TUS protocol on the WebDAV API * diff --git a/tests/acceptance/features/apiSharingNgLinkSharePermission/createLinkShare.feature b/tests/acceptance/features/apiSharingNgLinkSharePermission/createLinkShare.feature index 17834133a..fd1f40b92 100644 --- a/tests/acceptance/features/apiSharingNgLinkSharePermission/createLinkShare.feature +++ b/tests/acceptance/features/apiSharingNgLinkSharePermission/createLinkShare.feature @@ -2763,4 +2763,57 @@ Feature: Create a link share for a resource | permissions-role | | Space Viewer | | Space Editor | - | Manager | \ No newline at end of file + | Manager | + + @issue-10649 + Scenario: public uploads a zero byte file to a public share folder + Given using spaces DAV path + And using SharingNG + And user "Alice" has created folder "/uploadFolder" + And user "Alice" has created the following resource link share: + | resource | uploadFolder | + | space | Personal | + | permissionsRole | createOnly | + | password | %public% | + When the public uploads file "filesForUpload/zerobyte.txt" to "textfile.txt" inside last link shared folder with password "%public%" using the public WebDAV API + Then the HTTP status code should be "201" + And for user "Alice" folder "uploadFolder" of the space "Personal" should contain these files: + | textfile.txt | + And for user "Alice" folder "uploadFolder" of the space "Personal" should not contain these files: + | textfile (1).txt | + + @issue-10649 + Scenario: public uploads a zero byte file to a public share folder inside project space + Given using spaces DAV path + And using SharingNG + And the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API + And user "Alice" has created a space "Project" with the default quota using the Graph API + And user "Alice" has created a folder "/uploadFolder" in space "Project" + And user "Alice" has created the following resource link share: + | resource | uploadFolder | + | space | Project | + | permissionsRole | createOnly | + | password | %public% | + When the public uploads file "filesForUpload/zerobyte.txt" to "textfile.txt" inside last link shared folder with password "%public%" using the public WebDAV API + Then the HTTP status code should be "201" + And for user "Alice" folder "uploadFolder" of the space "Project" should contain these files: + | textfile.txt | + And for user "Alice" folder "uploadFolder" of the space "Project" should not contain these files: + | textfile (1).txt | + + @issue-10649 + Scenario: public uploads a zero byte file to a public share project space + Given using spaces DAV path + And using SharingNG + And the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API + And user "Alice" has created a space "Project" with the default quota using the Graph API + And user "Alice" has created the following space link share: + | space | Project | + | permissionsRole | createOnly | + | password | %public% | + When the public uploads file "filesForUpload/zerobyte.txt" to "textfile.txt" inside last link shared folder with password "%public%" using the public WebDAV API + Then the HTTP status code should be "201" + And for user "Alice" the space "Project" should contain these files: + | textfile.txt | + And for user "Alice" the space "Project" should not contain these files: + | textfile (1).txt | diff --git a/tests/acceptance/features/apiSpaces/tusUpload.feature b/tests/acceptance/features/apiSpaces/tusUpload.feature index 34f561b84..eaa5acc9d 100644 --- a/tests/acceptance/features/apiSpaces/tusUpload.feature +++ b/tests/acceptance/features/apiSpaces/tusUpload.feature @@ -144,3 +144,53 @@ Feature: upload resources using TUS protocol When user "Brian" uploads a file from "filesForUpload/zerobyte.txt" to "textfile.txt" via TUS inside of the space "new-space" using the WebDAV API Then for user "Brian" the content of the file "textfile.txt" of the space "new-space" should be "" And for user "Alice" the content of the file "textfile.txt" of the space "new-space" should be "" + + @issue-10649 + Scenario: public uploads a zero byte file to a public share folder + Given using spaces DAV path + And using SharingNG + And user "Alice" has created folder "/uploadFolder" + And user "Alice" has created the following resource link share: + | resource | uploadFolder | + | space | Personal | + | permissionsRole | createOnly | + | password | %public% | + When the public uploads a file from "filesForUpload/zerobyte.txt" to "textfile.txt" via TUS inside last link shared folder with password "%public%" using the WebDAV API + And for user "Alice" folder "uploadFolder" of the space "Personal" should contain these files: + | textfile.txt | + And for user "Alice" folder "uploadFolder" of the space "Personal" should not contain these files: + | textfile (1).txt | + + @issue-10346 + Scenario: public uploads a zero-byte file to a shared folder inside project space + Given using spaces DAV path + And using SharingNG + And the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API + And user "Alice" has created a space "Project" with the default quota using the Graph API + And user "Alice" has created a folder "/uploadFolder" in space "Project" + And user "Alice" has created the following resource link share: + | resource | uploadFolder | + | space | Project | + | permissionsRole | createOnly | + | password | %public% | + When the public uploads a file from "filesForUpload/zerobyte.txt" to "textfile.txt" via TUS inside last link shared folder with password "%public%" using the WebDAV API + And for user "Alice" folder "uploadFolder" of the space "Project" should contain these files: + | textfile.txt | + And for user "Alice" folder "uploadFolder" of the space "Project" should not contain these files: + | textfile (1).txt | + + @issue-10649 + Scenario: public uploads a zero-byte file to a public share project space + Given using spaces DAV path + And using SharingNG + And the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API + And user "Alice" has created a space "Project" with the default quota using the Graph API + And user "Alice" has created the following space link share: + | space | Project | + | permissionsRole | createOnly | + | password | %public% | + When the public uploads a file from "filesForUpload/zerobyte.txt" to "textfile.txt" via TUS inside last link shared folder with password "%public%" using the WebDAV API + Then for user "Alice" the space "Project" should contain these files: + | textfile.txt | + And for user "Alice" the space "Project" should not contain these files: + | textfile (1).txt |