Skip to content

Commit

Permalink
add test for downloading space
Browse files Browse the repository at this point in the history
  • Loading branch information
Salipa-Gurung committed Jul 10, 2023
1 parent 5f9934a commit 797a1cb
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 0 deletions.
1 change: 1 addition & 0 deletions tests/acceptance/config/behat.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ default:
- SpacesTUSContext:
- GraphContext:
- OcisConfigContext:
- ArchiverContext:

apiSpacesShares:
paths:
Expand Down
24 changes: 24 additions & 0 deletions tests/acceptance/features/apiSpaces/space_download.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
@api
Feature: Download space
As a user
I want to be able to download space
so that I can have it in my local storage


Scenario: user downloads a space
Given these users have been created with default attributes and without skeleton files:
| username |
| Alice |
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 "download space" with the default quota using the GraphApi
And user "Alice" has uploaded a file inside space "download space" with content "some data" to "file1.txt"
And user "Alice" has uploaded a file inside space "download space" with content "other data" to "file2.txt"
And user "Alice" has uploaded a file inside space "download space" with content "more data" to "file3.txt"
When user "Alice" downloads the space "download space" using the WebDAV API
Then the HTTP status code should be "200"
And the downloaded "tar" space archive should contain these files:
| name | content |
| file1.txt | some data |
| file2.txt | other data |
| file3.txt | more data |
82 changes: 82 additions & 0 deletions tests/acceptance/features/bootstrap/SpacesContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@
use TestHelpers\SetupHelper;
use TestHelpers\GraphHelper;
use PHPUnit\Framework\Assert;
use wapmorgan\UnifiedArchive\Exceptions\NonExistentArchiveFileException;
use wapmorgan\UnifiedArchive\UnifiedArchive;

require_once 'bootstrap.php';

Expand Down Expand Up @@ -3198,4 +3200,84 @@ public function theUserShouldHaveSpaceWithRecipient(
}
Assert::assertTrue($foundRoleInResponse, "the response does not contain the $recipientType $recipient");
}

/**
* @When /^user "([^"]*)" downloads the space "([^"]*)" using the WebDAV API/
*
* @param string $user
* @param string $spaceName
*
* @return void
*
* @throws Exception
* @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),
)
);
}

/**
* @Then the downloaded :arg1 space archive should contain these files:
*
* @param string $type
* @param TableNode $expectedFiles
*
* @return void
*
* @throws NonExistentArchiveFileException
*/
public function theDownloadedSpaceArchiveShouldContainTheseFiles(string $type, TableNode $expectedFiles):void {
$dataVal = $this->featureContext->getResponse()->getBody()->getContents();
$placeValue = [];
$filePos = '';

foreach ($expectedFiles->getHash() as $file) {
print_r($file);
$place = stripos($dataVal, $file['name']);
echo $place . "\n";
$placeValue[] = $place;
}

print_r($placeValue, true) . "\n";
$min = min($placeValue);
echo "Min = " . $min;

foreach ($expectedFiles->getHash() as $file) {
$place = stripos($dataVal, $file['name']);
if ($place == $min) {
$filePos = $file['name'];
}
}

echo "\n" . $filePos . "\n";
$fileData = strstr($dataVal, $filePos);
echo $fileData . "\n";

$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, $fileData);
$archive = UnifiedArchive::open($tempFile);
foreach ($expectedFiles->getHash() as $expectedFile) {
// print_r($archive);
echo $expectedFile['content'];
echo($archive->getFileContent($expectedFile['name']));
Assert::assertEquals(
$expectedFile['content'],
$archive->getFileContent($expectedFile['name']),
__METHOD__ .
" content of '" . $expectedFile['name'] . "' not as expected"
);
}
\unlink($tempFile);
}
}

0 comments on commit 797a1cb

Please sign in to comment.