mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-01-08 05:09:46 -06:00
Merge pull request #2717 from owncloud/archiverAcceptanceTests
[tests-only] API tests for archiver endpoint
This commit is contained in:
@@ -237,6 +237,7 @@ def testPipelines(ctx):
|
||||
pipelines = [
|
||||
localApiTests(ctx, "ocis", "apiAccountsHashDifficulty", "default"),
|
||||
localApiTests(ctx, "ocis", "apiSpaces", "default"),
|
||||
localApiTests(ctx, "ocis", "apiArchiver", "default"),
|
||||
]
|
||||
|
||||
if "skip" not in config["apiTests"] or not config["apiTests"]["skip"]:
|
||||
|
||||
@@ -48,6 +48,23 @@ default:
|
||||
- TrashbinContext:
|
||||
- WebDavPropertiesContext:
|
||||
|
||||
apiArchiver:
|
||||
paths:
|
||||
- '%paths.base%/../features/apiArchiver'
|
||||
contexts:
|
||||
- ArchiverContext:
|
||||
- OccContext:
|
||||
- FeatureContext: &common_feature_context_params
|
||||
baseUrl: http://localhost:8080
|
||||
adminUsername: admin
|
||||
adminPassword: admin
|
||||
regularUserPassword: 123456
|
||||
ocPath: apps/testing/api/v1/occ
|
||||
- CapabilitiesContext:
|
||||
- ChecksumContext:
|
||||
- FilesVersionsContext:
|
||||
- PublicWebDavContext:
|
||||
|
||||
extensions:
|
||||
jarnaiz\JUnitFormatter\JUnitFormatterExtension:
|
||||
filename: report.xml
|
||||
|
||||
31
tests/acceptance/features/apiArchiver/downloadById.feature
Normal file
31
tests/acceptance/features/apiArchiver/downloadById.feature
Normal file
@@ -0,0 +1,31 @@
|
||||
@api @skipOnOcV10
|
||||
Feature: download multiple resources bundled into an archive
|
||||
As a user
|
||||
I want to be able to download multiple items at once
|
||||
So that I don't have to execute repetitive tasks
|
||||
|
||||
As a developer
|
||||
I want to be able to use the resource ID to download multiple items at once
|
||||
So that I don't have to know the full path of the resource
|
||||
|
||||
Background:
|
||||
Given user "Alice" has been created with default attributes and without skeleton files
|
||||
|
||||
Scenario: download a single file
|
||||
Given user "Alice" has uploaded file with content "some data" to "/textfile0.txt"
|
||||
When user "Alice" downloads the archive of "/textfile0.txt" using the resource id
|
||||
Then the HTTP status code should be "200"
|
||||
And the downloaded archive should contain these files:
|
||||
| name | content |
|
||||
| textfile0.txt | some data |
|
||||
|
||||
Scenario: download a single folder
|
||||
Given user "Alice" has created folder "my_data"
|
||||
And user "Alice" has uploaded file with content "some data" to "/my_data/textfile0.txt"
|
||||
And user "Alice" has uploaded file with content "more data" to "/my_data/an_other_file.txt"
|
||||
When user "Alice" downloads the archive of "/my_data" using the resource id
|
||||
Then the HTTP status code should be "200"
|
||||
And the downloaded archive should contain these files:
|
||||
| name | content |
|
||||
| my_data/textfile0.txt | some data |
|
||||
| my_data/an_other_file.txt | more data |
|
||||
114
tests/acceptance/features/bootstrap/ArchiverContext.php
Normal file
114
tests/acceptance/features/bootstrap/ArchiverContext.php
Normal file
@@ -0,0 +1,114 @@
|
||||
<?php
|
||||
/**
|
||||
* ownCloud
|
||||
*
|
||||
* @author Artur Neumann <artur@jankaritech.com>
|
||||
* @copyright Copyright (c) 2021 Artur Neumann artur@jankaritech.com
|
||||
*
|
||||
* This code is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License,
|
||||
* as published by the Free Software Foundation;
|
||||
* either version 3 of the License, or any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*
|
||||
*/
|
||||
|
||||
use Behat\Behat\Context\Context;
|
||||
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
|
||||
use Behat\Gherkin\Node\TableNode;
|
||||
use TestHelpers\HttpRequestHelper;
|
||||
use TestHelpers\SetupHelper;
|
||||
use wapmorgan\UnifiedArchive\UnifiedArchive;
|
||||
use PHPUnit\Framework\Assert;
|
||||
|
||||
require_once 'bootstrap.php';
|
||||
|
||||
/**
|
||||
* Context for Archiver specific steps
|
||||
*/
|
||||
class ArchiverContext implements Context {
|
||||
|
||||
/**
|
||||
* @var FeatureContext
|
||||
*/
|
||||
private $featureContext;
|
||||
|
||||
/**
|
||||
* @BeforeScenario
|
||||
*
|
||||
* @param BeforeScenarioScope $scope
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
public function setUpScenario(BeforeScenarioScope $scope): void {
|
||||
// Get the environment
|
||||
$environment = $scope->getEnvironment();
|
||||
// Get all the contexts you need in this context
|
||||
$this->featureContext = $environment->getContext('FeatureContext');
|
||||
SetupHelper::init(
|
||||
$this->featureContext->getAdminUsername(),
|
||||
$this->featureContext->getAdminPassword(),
|
||||
$this->featureContext->getBaseUrl(),
|
||||
$this->featureContext->getOcPath()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @When user :user downloads the archive of :resourceId using the resource id
|
||||
*
|
||||
* @param string $user
|
||||
* @param string $resource
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @throws \GuzzleHttp\Exception\GuzzleException
|
||||
*/
|
||||
public function userDownloadsTheArchiveOfUsingTheResourceId(string $user, string $resource): void {
|
||||
$resourceId = $this->featureContext->getFileIdForPath($user, $resource);
|
||||
$user = $this->featureContext->getActualUsername($user);
|
||||
$this->featureContext->setResponse(
|
||||
HttpRequestHelper::get(
|
||||
$this->featureContext->getBaseUrl() . '/archiver?id=' . $resourceId,
|
||||
'',
|
||||
$user,
|
||||
$this->featureContext->getPasswordForUser($user)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Then the downloaded archive should contain these files:
|
||||
*
|
||||
* @param TableNode $expectedFiles
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
public function theDownloadedArchiveShouldContainTheseFiles(TableNode $expectedFiles) {
|
||||
$this->featureContext->verifyTableNodeColumns($expectedFiles, ['name', 'content']);
|
||||
$tempFile = \tempnam(\sys_get_temp_dir(), 'OcAcceptanceTests_');
|
||||
\unlink($tempFile); // we only need the name
|
||||
$tempFile = $tempFile . '.tar'; // 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"
|
||||
);
|
||||
}
|
||||
\unlink($tempFile);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user