add test for downloading space

This commit is contained in:
Salipa-Gurung
2023-06-30 14:27:53 +05:45
committed by amrita
parent 309b59a665
commit 926e547f99
4 changed files with 78 additions and 10 deletions
+1
View File
@@ -47,6 +47,7 @@ default:
- SpacesTUSContext:
- GraphContext:
- OcisConfigContext:
- ArchiverContext:
apiSpacesShares:
paths:
@@ -0,0 +1,22 @@
@api
Feature: Download space
As a user
I want to download space
So that I can store it locally
Scenario: user downloads a space
Given user "Alice" has been created with default attributes and without skeleton files
And using spaces DAV path
And the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API
And user "Alice" has created a space "project-space" with the default quota using the GraphApi
And user "Alice" has uploaded a file inside space "project-space" with content "some data" to "file1.txt"
And user "Alice" has uploaded a file inside space "project-space" with content "other data" to "file2.txt"
And user "Alice" has uploaded a file inside space "project-space" with content "more data" to "file3.txt"
When user "Alice" downloads the space "project-space" using the WebDAV API
Then the HTTP status code should be "200"
And the downloaded "tar" archive should contain these files:
| name | content |
| file1.txt | some data |
| file2.txt | other data |
| file3.txt | more data |
@@ -26,7 +26,6 @@ use Behat\Gherkin\Node\TableNode;
use GuzzleHttp\Exception\GuzzleException;
use TestHelpers\HttpRequestHelper;
use TestHelpers\SetupHelper;
use wapmorgan\UnifiedArchive\UnifiedArchive;
use PHPUnit\Framework\Assert;
use \Psr\Http\Message\ResponseInterface;
@@ -219,18 +218,41 @@ class ArchiverContext implements Context {
*/
public function theDownloadedArchiveShouldContainTheseFiles(string $type, TableNode $expectedFiles):void {
$this->featureContext->verifyTableNodeColumns($expectedFiles, ['name', 'content']);
$contents = $this->featureContext->getResponse()->getBody()->getContents();
$tempFile = \tempnam(\sys_get_temp_dir(), 'OcAcceptanceTests_');
\unlink($tempFile); // we only need the name
$tempFile = $tempFile . '.' . $type; // it needs the extension
\file_put_contents($tempFile, $this->featureContext->getResponse()->getBody()->getContents());
$archive = UnifiedArchive::open($tempFile);
foreach ($expectedFiles->getHash() as $expectedFile) {
Assert::assertEquals(
$expectedFile['content'],
$archive->getFileContent($expectedFile['name']),
__METHOD__ .
" content of '" . $expectedFile['name'] . "' not as expected"
);
\file_put_contents($tempFile, $contents);
// open the archive
$archiveData = new RecursiveIteratorIterator(
new PharData($tempFile),
RecursiveIteratorIterator::SELF_FIRST
);
foreach ($expectedFiles->getHash() as $expectedItem) {
$expectedPath = trim($expectedItem['name'], "/");
$found = false;
foreach ($archiveData as $info) {
// get only the parent folder path for the given item
$actualPath = explode(".$type", $info->getPathname())[1];
$actualPath = trim($actualPath, "/");
if ($expectedPath === $actualPath) {
if (!$info->isDir()) {
Assert::assertEquals(
$expectedItem['content'],
$info->getContent(),
__METHOD__ .
" content of '" . $expectedPath . "' not as expected"
);
}
$found = true;
break;
}
}
if (!$found) {
Assert::fail("Resource '" . $expectedPath . "' is not in the downloaded archive.");
}
}
\unlink($tempFile);
}
@@ -3316,4 +3316,27 @@ class SpacesContext implements Context {
}
Assert::assertTrue($foundRoleInResponse, "the response does not contain the $recipientType $recipient");
}
/**
* @When user :user downloads the space :spaceName using the WebDAV API
*
* @param string $user
* @param string $spaceName
*
* @return void
*
* @throws GuzzleException
*/
public function userDownloadsTheSpaceUsingTheWebdavApi(string $user, string $spaceName):void {
$space = $this->getSpaceByName($user, $spaceName);
$url = $this->featureContext->getBaseUrl() . '/archiver?id=' . $space["id"];
$this->featureContext->setResponse(
HttpRequestHelper::get(
$url,
'',
$user,
$this->featureContext->getPasswordForUser($user),
)
);
}
}