diff --git a/tests/acceptance/bootstrap/ArchiverContext.php b/tests/acceptance/bootstrap/ArchiverContext.php index 48f15eaf50f..895880f197e 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 @@ public function before(BeforeScenarioScope $scope): void { $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 @@ private function getArchiverQueryString( 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 @@ public function theDownloadedArchiveShouldContainTheseFiles(string $type, TableN $tar = $this->getArchiveClass($type); $tar->open($tempFile); $archiveData = $tar->contents(); - + // extract the archive $tar->open($tempFile); $tar->extract($tempExtractFolder); diff --git a/tests/acceptance/features/apiOcm/share.feature b/tests/acceptance/features/apiOcm/share.feature index 9fd1e0db627..9e92090a4bd 100755 --- a/tests/acceptance/features/apiOcm/share.feature +++ b/tests/acceptance/features/apiOcm/share.feature @@ -1229,3 +1229,54 @@ Feature: an user shares resources using ScienceMesh application } } """ + + @issue-10272 + Scenario: federated user downloads multiple files and folders as 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 "textfile0.txt" + And user "Alice" has uploaded file with content "other data" to "textfile1.txt" + And user "Alice" has created folder "my_data" + And user "Alice" has uploaded file with content "some data" to "/my_data/textfile2.txt" + And user "Alice" has created folder "more_data" + And user "Alice" has uploaded file with content "more data" to "/more_data/an_other_file.txt" + And user "Alice" has sent the following resource share invitation to federated user: + | resource | textfile0.txt | + | space | Personal | + | sharee | Brian | + | shareType | user | + | permissionsRole | Viewer | + And user "Alice" has sent the following resource share invitation to federated user: + | resource | textfile1.txt | + | space | Personal | + | sharee | Brian | + | shareType | user | + | permissionsRole | Viewer | + And user "Alice" has sent the following resource share invitation to federated user: + | resource | my_data | + | space | Personal | + | sharee | Brian | + | shareType | user | + | permissionsRole | Viewer | + And user "Alice" has sent the following resource share invitation to federated user: + | resource | more_data | + | 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 + | textfile0.txt | + | textfile1.txt | + | my_data | + | more_data | + Then the HTTP status code should be "200" + And the downloaded zip archive should contain these files: + | name | content | + | textfile0.txt | some data | + | textfile1.txt | other data | + | my_data/textfile2.txt | some data | + | more_data/an_other_file.txt | more data |