From ce3a92efda984c07a7f3728a141599e0bf858cfe Mon Sep 17 00:00:00 2001 From: prashant-gurung899 Date: Thu, 24 Oct 2024 12:30:50 +0545 Subject: [PATCH] add test to upload via TUS by federated user Signed-off-by: prashant-gurung899 --- .../acceptance/bootstrap/SpacesTUSContext.php | 45 +++++++++++-------- tests/acceptance/bootstrap/TUSContext.php | 16 +++---- tests/acceptance/config/behat.yml | 1 + .../acceptance/features/apiCors/cors.feature | 10 ++--- .../acceptance/features/apiOcm/share.feature | 18 ++++++++ .../apiSpacesShares/shareUploadTUS.feature | 18 ++++---- .../cliCommands/uploadSessions.feature | 2 +- 7 files changed, 67 insertions(+), 43 deletions(-) diff --git a/tests/acceptance/bootstrap/SpacesTUSContext.php b/tests/acceptance/bootstrap/SpacesTUSContext.php index 283c383c569..23080be59a9 100644 --- a/tests/acceptance/bootstrap/SpacesTUSContext.php +++ b/tests/acceptance/bootstrap/SpacesTUSContext.php @@ -16,6 +16,7 @@ use PHPUnit\Framework\Assert; use TestHelpers\WebDavHelper; use TestHelpers\BehatHelper; +use TestHelpers\GraphHelper; require_once 'bootstrap.php'; @@ -89,11 +90,10 @@ public function userUploadsAFileViaTusInsideOfTheSpaceUsingTheWebdavApi( } /** - * @Given user :user has created a new TUS resource for the space :spaceName with content :content using the WebDAV API with these headers: + * @Given user :user has created a new TUS resource in the space :spaceName with the following headers: * * @param string $user * @param string $spaceName - * @param string $content * @param TableNode $headers * * @return void @@ -104,11 +104,10 @@ public function userUploadsAFileViaTusInsideOfTheSpaceUsingTheWebdavApi( public function userHasCreatedANewTusResourceForTheSpaceUsingTheWebdavApiWithTheseHeaders( string $user, string $spaceName, - string $content, TableNode $headers ): void { $spaceId = $this->spacesContext->getSpaceIdByName($user, $spaceName); - $response = $this->tusContext->createNewTUSResourceWithHeaders($user, $headers, $content, $spaceId); + $response = $this->tusContext->createNewTUSResourceWithHeaders($user, $headers, '', $spaceId); $this->featureContext->theHTTPStatusCodeShouldBe(201, "Expected response status code should be 201", $response); } @@ -148,19 +147,31 @@ public function userCreatesANewTusResourceForTheSpaceUsingTheWebdavApiWithTheseH * @throws Exception|GuzzleException */ private function uploadFileViaTus(string $user, string $content, string $resource, string $spaceName): void { - $spaceId = $this->spacesContext->getSpaceIdByName($user, $spaceName); - $tmpFile = $this->tusContext->writeDataToTempFile($content); - try { - $this->tusContext->uploadFileUsingTus( - $user, - \basename($tmpFile), - $resource, - $spaceId + $server = $this->featureContext->getCurrentServer(); + + //check if it is REMOTE server and Shares space + if ($server === 'REMOTE' && $spaceName === 'Shares') { + $credentials = $this->featureContext->graphContext->getAdminOrUserCredentials($user); + $response = GraphHelper::getSharesSharedWithMe( + $this->featureContext->getBaseUrl(), + $this->featureContext->getStepLineRef(), + $credentials['username'], + $credentials['password'] ); - $this->featureContext->setLastUploadDeleteTime(\time()); - } catch (Exception $e) { - Assert::assertStringContainsString('Unable to create resource', (string)$e); + + $jsonBody = $this->featureContext->getJsonDecodedResponseBodyContent($response); + $spaceId = $jsonBody->value[0]->remoteItem->id; + } else { + $spaceId = $this->spacesContext->getSpaceIdByName($user, $spaceName); } + $tmpFile = $this->tusContext->writeDataToTempFile($content); + $this->tusContext->uploadFileUsingTus( + $user, + \basename($tmpFile), + $resource, + $spaceId + ); + $this->featureContext->setLastUploadDeleteTime(\time()); \unlink($tmpFile); } @@ -330,11 +341,10 @@ public function userSendsAChunkToTheLastCreatedTusLocationWithOffsetAndDataWithC } /** - * @When /^user "([^"]*)" sends a chunk to the last created TUS Location with data "([^"]*)" inside of the space "([^"]*)" with headers:$/ + * @When /^user "([^"]*)" sends a chunk to the last created TUS Location with data "([^"]*)" with the following headers:$/ * * @param string $user * @param string $data - * @param string $spaceName * @param TableNode $headers * * @return void @@ -343,7 +353,6 @@ public function userSendsAChunkToTheLastCreatedTusLocationWithOffsetAndDataWithC public function userSendsAChunkToTheLastCreatedTusLocationWithDataInsideOfTheSpaceWithHeaders( string $user, string $data, - string $spaceName, TableNode $headers ): void { $rows = $headers->getRowsHash(); diff --git a/tests/acceptance/bootstrap/TUSContext.php b/tests/acceptance/bootstrap/TUSContext.php index 5d7e1f47915..7581cdd7c6b 100644 --- a/tests/acceptance/bootstrap/TUSContext.php +++ b/tests/acceptance/bootstrap/TUSContext.php @@ -349,16 +349,12 @@ public function userUploadsAFileWithContentToUsingTus( string $destination ): void { $temporaryFileName = $this->writeDataToTempFile($content); - try { - $this->uploadFileUsingTus( - $user, - \basename($temporaryFileName), - $destination - ); - $this->featureContext->setLastUploadDeleteTime(\time()); - } catch (Exception $e) { - Assert::assertStringContainsString('TusPhp\Exception\FileException: Unable to create resource', (string)$e); - } + $this->uploadFileUsingTus( + $user, + \basename($temporaryFileName), + $destination + ); + $this->featureContext->setLastUploadDeleteTime(\time()); \unlink($temporaryFileName); } diff --git a/tests/acceptance/config/behat.yml b/tests/acceptance/config/behat.yml index 43fb2fca485..32ce04ca861 100644 --- a/tests/acceptance/config/behat.yml +++ b/tests/acceptance/config/behat.yml @@ -394,6 +394,7 @@ default: - OcisConfigContext: - NotificationContext: - SettingsContext: + - SpacesTUSContext: apiActivities: paths: diff --git a/tests/acceptance/features/apiCors/cors.feature b/tests/acceptance/features/apiCors/cors.feature index 6fcce1fd9e6..a728701835c 100644 --- a/tests/acceptance/features/apiCors/cors.feature +++ b/tests/acceptance/features/apiCors/cors.feature @@ -105,13 +105,13 @@ Feature: CORS headers @issue-8380 Scenario: CORS headers should be returned when uploading file using Tus and when CORS domain sending origin header in the Webdav api - Given user "Alice" has created a new TUS resource for the space "Personal" with content "" using the WebDAV API with these headers: + Given user "Alice" has created a new TUS resource in the space "Personal" with the following headers: | Upload-Length | 5 | # dGV4dEZpbGUudHh0 is the base64 encode of textFile.txt | Upload-Metadata | filename dGV4dEZpbGUudHh0 | | Tus-Resumable | 1.0.0 | | Origin | https://aphno.badal | - When user "Alice" sends a chunk to the last created TUS Location with data "01234" inside of the space "Personal" with headers: + When user "Alice" sends a chunk to the last created TUS Location with data "01234" with the following headers: | Origin | https://aphno.badal | | Upload-Checksum | MD5 4100c4d44da9177247e44a5fc1546778 | | Upload-Offset | 0 | @@ -123,13 +123,13 @@ Feature: CORS headers @issue-8380 Scenario: uploading file using Tus using different CORS headers - Given user "Alice" has created a new TUS resource for the space "Personal" with content "" using the WebDAV API with these headers: + Given user "Alice" has created a new TUS resource in the space "Personal" with the following headers: | Upload-Length | 5 | # dGV4dEZpbGUudHh0 is the base64 encode of textFile.txt | Upload-Metadata | filename dGV4dEZpbGUudHh0 | | Tus-Resumable | 1.0.0 | | Origin | https://something.else | - When user "Alice" sends a chunk to the last created TUS Location with data "01234" inside of the space "Personal" with headers: + When user "Alice" sends a chunk to the last created TUS Location with data "01234" with the following headers: | Origin | https://something.else | | Upload-Checksum | MD5 4100c4d44da9177247e44a5fc1546778 | | Upload-Offset | 0 | @@ -139,7 +139,7 @@ Feature: CORS headers # The Access-Control-Request-Headers need to be in lower-case and alphabetically order to comply with the rs/cors # package see: https://github.com/rs/cors/commit/4c32059b2756926619f6bf70281b91be7b5dddb2#diff-bf80d8fbedf172fab9ba2604da7f7be972e48b2f78a8d0cd21619d5f93665895R367 Scenario Outline: CORS headers should be returned when an preflight request is sent to Tus upload - Given user "Alice" has created a new TUS resource for the space "Personal" with content "" using the WebDAV API with these headers: + Given user "Alice" has created a new TUS resource in the space "Personal" with the following headers: | Upload-Length | 5 | # dGV4dEZpbGUudHh0 is the base64 encode of textFile.txt | Upload-Metadata | filename dGV4dEZpbGUudHh0 | diff --git a/tests/acceptance/features/apiOcm/share.feature b/tests/acceptance/features/apiOcm/share.feature index 40cdd8624a0..bf3298f9aa9 100755 --- a/tests/acceptance/features/apiOcm/share.feature +++ b/tests/acceptance/features/apiOcm/share.feature @@ -611,3 +611,21 @@ Feature: an user shares resources using ScienceMesh application } } """ + + @issue-10285 + Scenario: federated user upload file to a shared folder via TUS + Given using server "LOCAL" + And user "Alice" has created a folder "FOLDER" in space "Personal" + And "Alice" has created the federation share invitation + And using server "REMOTE" + And "Brian" has accepted invitation + And using server "LOCAL" + And user "Alice" has sent the following resource share invitation to federated user: + | resource | FOLDER | + | space | Personal | + | sharee | Brian | + | shareType | user | + | permissionsRole | Editor | + And using server "REMOTE" + When user "Brian" uploads a file with content "uploaded content" to "FOLDER/file.txt" via TUS inside of the space "Shares" using the WebDAV API +# When user "Brian" uploads a file with content "lorem" to "textFile.txt" inside federated share "FOLDER" via TUS using the WebDAV API diff --git a/tests/acceptance/features/apiSpacesShares/shareUploadTUS.feature b/tests/acceptance/features/apiSpacesShares/shareUploadTUS.feature index fa8628ba3ec..b353b9504fb 100644 --- a/tests/acceptance/features/apiSpacesShares/shareUploadTUS.feature +++ b/tests/acceptance/features/apiSpacesShares/shareUploadTUS.feature @@ -193,7 +193,7 @@ Feature: upload resources on share using TUS protocol | shareType | user | | permissionsRole | Editor | And user "Brian" has a share "FOLDER" synced - And user "Alice" has created a new TUS resource for the space "Personal" with content "" using the WebDAV API with these headers: + And user "Alice" has created a new TUS resource in the space "Personal" with the following headers: | Upload-Length | 5 | # L0ZPTERFUi90ZXh0RmlsZS50eHQ= is the base64 encode of /FOLDER/textFile.txt | Upload-Metadata | filename L0ZPTERFUi90ZXh0RmlsZS50eHQ= | @@ -213,7 +213,7 @@ Feature: upload resources on share using TUS protocol | shareType | user | | permissionsRole | Editor | And user "Brian" has a share "FOLDER" synced - And user "Alice" has created a new TUS resource for the space "Personal" with content "" using the WebDAV API with these headers: + And user "Alice" has created a new TUS resource in the space "Personal" with the following headers: | Upload-Length | 5 | # L0ZPTERFUi90ZXh0RmlsZS50eHQ= is the base64 encode of /FOLDER/textFile.txt | Upload-Metadata | filename L0ZPTERFUi90ZXh0RmlsZS50eHQ= | @@ -224,7 +224,7 @@ Feature: upload resources on share using TUS protocol Scenario: sharer shares a file with correct checksum should return the checksum in the propfind for sharee - Given user "Alice" has created a new TUS resource for the space "Personal" with content "" using the WebDAV API with these headers: + Given user "Alice" has created a new TUS resource in the space "Personal" with the following headers: | Upload-Length | 5 | # dGV4dEZpbGUudHh0 is the base64 encode of textFile.txt | Upload-Metadata | filename dGV4dEZpbGUudHh0 | @@ -243,7 +243,7 @@ Feature: upload resources on share using TUS protocol Scenario: sharer shares a file with correct checksum should return the checksum in the download header for sharee - Given user "Alice" has created a new TUS resource for the space "Personal" with content "" using the WebDAV API with these headers: + Given user "Alice" has created a new TUS resource in the space "Personal" with the following headers: | Upload-Length | 5 | # dGV4dEZpbGUudHh0 is the base64 encode of textFile.txt | Upload-Metadata | filename dGV4dEZpbGUudHh0 | @@ -309,7 +309,7 @@ Feature: upload resources on share using TUS protocol | shareType | user | | permissionsRole | Editor | And user "Brian" has a share "FOLDER" synced - And user "Alice" has created a new TUS resource for the space "Personal" with content "" using the WebDAV API with these headers: + And user "Alice" has created a new TUS resource in the space "Personal" with the following headers: | Upload-Length | 16 | # L0ZPTERFUi90ZXh0RmlsZS50eHQ= is the base64 encode of /FOLDER/textFile.txt | Upload-Metadata | filename L0ZPTERFUi90ZXh0RmlsZS50eHQ= | @@ -323,7 +323,7 @@ Feature: upload resources on share using TUS protocol Scenario: sharer uploads a chunked file with correct checksum and share it with sharee should work - Given user "Alice" has created a new TUS resource for the space "Personal" with content "" using the WebDAV API with these headers: + Given user "Alice" has created a new TUS resource in the space "Personal" with the following headers: | Upload-Length | 10 | # dGV4dEZpbGUudHh0 is the base64 encode of textFile.txt | Upload-Metadata | filename dGV4dEZpbGUudHh0 | @@ -345,7 +345,7 @@ Feature: upload resources on share using TUS protocol | shareType | user | | permissionsRole | Editor | And user "Brian" has a share "FOLDER" synced - And user "Brian" has created a new TUS resource for the space "Shares" with content "" using the WebDAV API with these headers: + And user "Brian" has created a new TUS resource in the space "Shares" with the following headers: | Upload-Length | 10 | # L0ZPTERFUi90ZXh0RmlsZS50eHQ= is the base64 encode of /FOLDER/textFile.txt | Upload-Metadata | filename L0ZPTERFUi90ZXh0RmlsZS50eHQ= | @@ -359,7 +359,7 @@ Feature: upload resources on share using TUS protocol Scenario: sharer uploads a file with checksum and as a sharee overwrites the shared file with new data and correct checksum - Given user "Alice" has created a new TUS resource for the space "Personal" with content "" using the WebDAV API with these headers: + Given user "Alice" has created a new TUS resource in the space "Personal" with the following headers: | Upload-Length | 16 | # dGV4dEZpbGUudHh0 is the base64 encode of textFile.txt | Upload-Metadata | filename dGV4dEZpbGUudHh0 | @@ -382,7 +382,7 @@ Feature: upload resources on share using TUS protocol @issue-1755 Scenario: sharer uploads a file with checksum and as a sharee overwrites the shared file with new data and invalid checksum - Given user "Alice" has created a new TUS resource for the space "Personal" with content "" using the WebDAV API with these headers: + Given user "Alice" has created a new TUS resource in the space "Personal" with the following headers: | Upload-Length | 16 | # dGV4dEZpbGUudHh0 is the base64 encode of textFile.txt | Upload-Metadata | filename dGV4dEZpbGUudHh0 | diff --git a/tests/acceptance/features/cliCommands/uploadSessions.feature b/tests/acceptance/features/cliCommands/uploadSessions.feature index 8190a2346f9..9262c954ce7 100644 --- a/tests/acceptance/features/cliCommands/uploadSessions.feature +++ b/tests/acceptance/features/cliCommands/uploadSessions.feature @@ -135,7 +135,7 @@ Feature: List upload sessions via CLI command | POSTPROCESSING_DELAY | 10s | And user "Alice" has uploaded file "filesForUpload/filesWithVirus/eicar.com" to "/virusFile.txt" And user "Alice" has uploaded file with content "upload content" to "/file1.txt" - And user "Alice" has created a new TUS resource for the space "Personal" with content "" using the WebDAV API with these headers: + And user "Alice" has created a new TUS resource in the space "Personal" with the following headers: | Upload-Length | 10 | # dGV4dEZpbGUudHh0 is the base64 encode of textFile.txt | Upload-Metadata | filename dGV4dEZpbGUudHh0 |