From 367f55109fb85df8bca1b6fa4b113a41db1cb04e Mon Sep 17 00:00:00 2001 From: prashant-gurung899 Date: Fri, 6 Dec 2024 09:59:57 +0545 Subject: [PATCH] add test to download files and folders as archive Signed-off-by: prashant-gurung899 --- .../acceptance/bootstrap/ArchiverContext.php | 31 ++++++++++++----- .../acceptance/features/apiOcm/share.feature | 33 +++++++++++++++++++ 2 files changed, 55 insertions(+), 9 deletions(-) diff --git a/tests/acceptance/bootstrap/ArchiverContext.php b/tests/acceptance/bootstrap/ArchiverContext.php index 48f15eaf5..d29f19068 100644 --- a/tests/acceptance/bootstrap/ArchiverContext.php +++ b/tests/acceptance/bootstrap/ArchiverContext.php @@ -43,6 +43,7 @@ class ArchiverContext implements Context { * @var FeatureContext */ private FeatureContext $featureContext; + private SpacesContext $spacesContext; /** * @BeforeScenario @@ -58,6 +59,7 @@ class ArchiverContext implements Context { $environment = $scope->getEnvironment(); // Get all the contexts you need in this context $this->featureContext = BehatHelper::getContext($scope, $environment, 'FeatureContext'); + $this->spacesContext = BehatHelper::getContext($scope, $environment, 'SpacesContext'); } /** @@ -120,13 +122,15 @@ class ArchiverContext implements Context { case 'id': case 'ids': return 'id=' . $this->featureContext->getFileIdForPath($user, $resource); + case 'remoteItemIds': + return 'id=' . $this->spacesContext->getSharesRemoteItemId($user, $resource); case 'path': case 'paths': return 'path=' . $resource; default: throw new Exception( '"' . $addressType . - '" is not a legal value for $addressType, must be id|ids|path|paths' + '" is not a legal value for $addressType, must be id|ids|remoteItemIds|path|paths' ); } } @@ -276,7 +280,7 @@ class ArchiverContext implements Context { $tar = $this->getArchiveClass($type); $tar->open($tempFile); $archiveData = $tar->contents(); - + // extract the archive $tar->open($tempFile); $tar->extract($tempExtractFolder); @@ -291,13 +295,22 @@ class ArchiverContext implements Context { if ($expectedPath === $actualPath) { if (!$info->getIsdir()) { - $fileContent = \file_get_contents("$tempExtractFolder/$actualPath"); - Assert::assertEquals( - $expectedItem['content'], - $fileContent, - __METHOD__ . - " content of '" . $expectedPath . "' not as expected" - ); + $fileFullPath = "$tempExtractFolder/$actualPath"; + $fileMimeType = \mime_content_type($fileFullPath); + + if ($fileMimeType === "text/plain") { + $fileContent = \file_get_contents($fileFullPath); + Assert::assertEquals( + $expectedItem['content'], + $fileContent, + __METHOD__ . " content of '" . $expectedPath . "' not as expected" + ); + } else { + Assert::assertFileExists( + $fileFullPath, + __METHOD__ . " File '" . $expectedPath . "' is not in the downloaded archive." + ); + } } $found = true; break; diff --git a/tests/acceptance/features/apiOcm/share.feature b/tests/acceptance/features/apiOcm/share.feature index 4e31236f1..43266cd77 100755 --- a/tests/acceptance/features/apiOcm/share.feature +++ b/tests/acceptance/features/apiOcm/share.feature @@ -1297,3 +1297,36 @@ Feature: an user shares resources using ScienceMesh application | Viewer | | Uploader | | Editor | + + @issue-10272 + Scenario: federated user downloads shared resources as an archive + Given using spaces DAV path + And using server "REMOTE" + And "Brian" has created the federation share invitation + And using server "LOCAL" + And "Alice" has accepted invitation + And user "Alice" has uploaded file with content "some data" to "textfile.txt" + And user "Alice" has created folder "imageFolder" + And user "Alice" has uploaded file "filesForUpload/testavatar.png" to "imageFolder/testavatar.png" + And user "Alice" has sent the following resource share invitation to federated user: + | resource | textfile.txt | + | space | Personal | + | sharee | Brian | + | shareType | user | + | permissionsRole | Viewer | + And user "Alice" has sent the following resource share invitation to federated user: + | resource | imageFolder | + | space | Personal | + | sharee | Brian | + | shareType | user | + | permissionsRole | Viewer | + And using server "REMOTE" + When user "Brian" downloads the archive of these items using the resource remoteItemIds + | textfile.txt | + | imageFolder | + Then the HTTP status code should be "200" + And the downloaded zip archive should contain these files: + | name | content | + | textfile.txt | some data | + | imageFolder | | + | imageFolder/testavatar.png | |