add basic API test for spaces

This commit is contained in:
Michael Barz
2021-09-14 17:38:08 +02:00
parent 806d224ed7
commit 490bea0eba
5 changed files with 229 additions and 41 deletions

View File

@@ -6,6 +6,7 @@ default:
apiAccountsHashDifficulty:
paths:
- '%paths.base%/../features/apiAccountsHashDifficulty'
- '%paths.base%/../features/apiSpaces'
context: &common_ldap_suite_context
parameters:
ldapAdminPassword: admin
@@ -13,7 +14,7 @@ default:
ldapGroupsOU: TestGroups
ldapInitialUserFilePath: /../../config/ldap-users.ldif
contexts:
- RevaContext:
- GraphApiContext:
- OccContext:
- FeatureContext: &common_feature_context_params
baseUrl: http://localhost:8080

View File

@@ -0,0 +1,15 @@
@api @skipOnOcV10
Feature: List and create spaces
As a user
I want to be able to work with personal and project spaces to collaborate with individuals and teams
Note - this feature is run in CI with ACCOUNTS_HASH_DIFFICULTY set to the default for production
See https://github.com/owncloud/ocis/issues/1542 and https://github.com/owncloud/ocis/pull/839
Scenario: list own spaces
Given user "Alice" has been created with default attributes and without skeleton files
And user "Alice" lists all available spaces via the GraphApi
Then the HTTP status code should be "200"
And the webDavUrl of the personal space has been found
And user "Alice" lists the content of the personal space root using the WebDav Api
And the HTTP status code should be "207"

View File

@@ -0,0 +1,211 @@
<?php
use Behat\Behat\Context\Context;
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
use Psr\Http\Message\ResponseInterface;
use TestHelpers\HttpRequestHelper;
use TestHelpers\SetupHelper;
use PHPUnit\Framework\Assert;
require_once 'bootstrap.php';
/**
* Context for GraphApi specific steps
*/
class GraphApiContext implements Context {
/**
* @var FeatureContext
*/
private FeatureContext $featureContext;
/**
* @var string
*/
private string $personalDriveWebDavUrl;
/**
* @return string
*/
public function getPersonalDriveWebDavUrl(): string
{
return $this->personalDriveWebDavUrl;
}
/**
* @param string $personalDriveWebDavUrl
*/
public function setPersonalDriveWebDavUrl(string $personalDriveWebDavUrl): void
{
$this->personalDriveWebDavUrl = $personalDriveWebDavUrl;
}
/**
* @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()
);
}
/**
* Send Graph List Drives Request
*
* @param $baseUrl
* @param $user
* @param $password
* @param $arguments
* @param string $xRequestId
* @param array $body
* @param array $headers
* @return ResponseInterface
*/
public function listSpacesRequest(
$baseUrl,
$user,
$password,
$arguments,
string $xRequestId = '',
array $body = [],
array $headers = []
) {
$fullUrl = $baseUrl;
if (!str_ends_with($fullUrl, '/')) {
$fullUrl .= '/';
}
$fullUrl .= "graph/v1.0/me/drives/" . $arguments;
return HttpRequestHelper::sendRequest($fullUrl, $xRequestId, 'GET', $user, $password, $headers, $body);
}
/**
* Send Graph List Drives Request
*
* @param $baseUrl
* @param $user
* @param $password
* @param string $spaceName
* @param string $xRequestId
* @param array $headers
* @return ResponseInterface
*/
public function sendCreateSpaceRequest(
$baseUrl,
$user,
$password,
string $spaceName,
string $xRequestId = '',
array $headers = []
): ResponseInterface
{
$fullUrl = $baseUrl;
if (!str_ends_with($fullUrl, '/')) {
$fullUrl .= '/';
}
$fullUrl .= "drives/" . $spaceName;
return HttpRequestHelper::sendRequest($fullUrl, $xRequestId, 'POST', $user, $password, $headers);
}
/**
* Send Propfind Request to Url
*
* @param $fullUrl
* @param $user
* @param $password
* @param string $xRequestId
* @param array $headers
* @return ResponseInterface
*/
public function sendPropfindRequestToUrl(
$fullUrl,
$user,
$password,
string $xRequestId = '',
array $headers = []
): ResponseInterface
{
return HttpRequestHelper::sendRequest($fullUrl, $xRequestId, 'PROPFIND', $user, $password, $headers);
}
/**
* @When /^user "([^"]*)" lists all available spaces via the GraphApi$/
*
* @param $user
* @return void
*/
public function theUserListsAllHisAvailableSpacesUsingTheGraphApi($user): void
{
$this->featureContext->setResponse(
$this->listSpacesRequest(
$this->featureContext->getBaseUrl(),
$user,
$this->featureContext->getPasswordForUser($user),
"",
""
)
);
}
/**
* @Then the webDavUrl of the personal space has been found
*
* @return void
*/
public function theWebDavUrlOfThePersonalSpaceHasBeenFound(): void
{
$rawBody = $this->featureContext->getResponse()->getBody()->getContents();
$drives = [];
if (isset(\json_decode($rawBody, true)["value"])) {
$drives = \json_decode($rawBody, true)["value"];
}
Assert::assertArrayHasKey(0, $drives, "No drives were found on that endpoint");
foreach($drives as $drive) {
if (isset($drive["driveType"]) && $drive["driveType"] === "personal") {
$this->setPersonalDriveWebDavUrl($drive["root"]["webDavUrl"]);
Assert::assertNotEmpty(
$drive["root"]["webDavUrl"],
"The personal space attributes contain no webDavUrl"
);
}
}
}
/**
* @When /^user "([^"]*)" lists the content of the personal space root using the WebDav Api$/
*
* @param $user
*
* @return void
*/
public function theUserListsTheContentOfASpaceRootUsingTheWebDAvApi($user): void
{
$this->featureContext->setResponse(
$this->sendPropfindRequestToUrl(
$this->getPersonalDriveWebDavUrl(),
$user,
$this->featureContext->getPasswordForUser($user),
"",
[],
[],
[]
)
);
}
}

View File

@@ -1,40 +0,0 @@
<?php
use Behat\Behat\Context\Context;
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
use TestHelpers\AppConfigHelper;
use TestHelpers\SetupHelper;
require_once 'bootstrap.php';
/**
* Context for Reva specific steps
*/
class RevaContext implements Context {
/**
* @var FeatureContext
*/
private $featureContext;
/**
* @BeforeScenario
*
* @param BeforeScenarioScope $scope
*
* @return void
* @throws Exception
*/
public function setUpScenario(BeforeScenarioScope $scope) {
// 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()
);
}
}