[full-ci][tests-only] Check id file owner in response (#6627)

* check owner as spaceId in sharing response

* fix after review
This commit is contained in:
Viktor Scharf
2023-06-27 12:50:10 +02:00
committed by GitHub
parent 5524658f86
commit 753c8f2372
5 changed files with 118 additions and 61 deletions

View File

@@ -23,14 +23,10 @@ default:
regularUserPassword: 123456
ocPath: apps/testing/api/v1/occ
- CapabilitiesContext:
- ChecksumContext:
- FavoritesContext:
- FilesVersionsContext:
- NotificationContext:
- OCSContext:
- PublicWebDavContext:
- TrashbinContext:
- WebDavPropertiesContext:
apiSpaces:
paths:
@@ -41,16 +37,12 @@ default:
- SpacesContext:
- FeatureContext: *common_feature_context_params
- CapabilitiesContext:
- ChecksumContext:
- FavoritesContext:
- FilesVersionsContext:
- NotificationContext:
- OCSContext:
- PublicWebDavContext:
- SearchContext:
- TagContext:
- TrashbinContext:
- WebDavPropertiesContext:
- TUSContext:
- SpacesTUSContext:
- GraphContext:
@@ -87,14 +79,10 @@ default:
- SpacesContext:
- FeatureContext: *common_feature_context_params
- CapabilitiesContext:
- ChecksumContext:
- FavoritesContext:
- FilesVersionsContext:
- OCSContext:
- PublicWebDavContext:
- SearchContext:
- TrashbinContext:
- WebDavPropertiesContext:
- TUSContext:
- SpacesTUSContext:
- GraphContext:
@@ -109,13 +97,9 @@ default:
- SpacesContext:
- FeatureContext: *common_feature_context_params
- CapabilitiesContext:
- ChecksumContext:
- FilesVersionsContext:
- OCSContext:
- PublicWebDavContext:
- FavoritesContext:
- TrashbinContext:
- WebDavPropertiesContext:
- GraphContext:
apiGraph:
@@ -128,14 +112,10 @@ default:
- SpacesContext:
- FeatureContext: *common_feature_context_params
- CapabilitiesContext:
- ChecksumContext:
- FavoritesContext:
- FilesVersionsContext:
- OCSContext:
- PublicWebDavContext:
- SearchContext:
- TrashbinContext:
- WebDavPropertiesContext:
- TUSContext:
- SpacesTUSContext:
- OcisConfigContext:
@@ -147,12 +127,8 @@ default:
contexts:
- SpacesContext:
- FeatureContext: *common_feature_context_params
- WebDavPropertiesContext:
- FavoritesContext:
- ChecksumContext:
- FilesVersionsContext:
- OCSContext:
- TrashbinContext:
- GraphContext:
- OcisConfigContext:
@@ -164,11 +140,8 @@ default:
- SpacesContext:
- FeatureContext: *common_feature_context_params
- WebDavPropertiesContext:
- FavoritesContext:
- ChecksumContext:
- FilesVersionsContext:
- OCSContext:
- TrashbinContext:
- GraphContext:
- OcisConfigContext:
@@ -180,12 +153,8 @@ default:
- NotificationContext:
- SpacesContext:
- FeatureContext: *common_feature_context_params
- WebDavPropertiesContext:
- OCSContext:
- GraphContext:
- TrashbinContext:
- FavoritesContext:
- ChecksumContext:
- FilesVersionsContext:
- SettingsContext:
@@ -197,12 +166,8 @@ default:
- NotificationContext:
- SpacesContext:
- FeatureContext: *common_feature_context_params
- WebDavPropertiesContext:
- OCSContext:
- GraphContext:
- TrashbinContext:
- FavoritesContext:
- ChecksumContext:
- FilesVersionsContext:
- SettingsContext:
- OcisConfigContext:

View File

@@ -1,22 +1,22 @@
@api
@api
Feature: Share a file or folder that is inside a space via public link
As a user with manager space role
I want to be able to share the data inside the space via public link
So that an anonymous user can have access to certain resources
As a user with manager space role
I want to be able to share the data inside the space via public link
So that an anonymous user can have access to certain resources
folder permissions:
| role | permissions |
| internal | 0 |
| viewer | 1 |
| uploader | 4 |
| contributor | 5 |
| editor | 15 |
folder permissions:
| role | permissions |
| internal | 0 |
| viewer | 1 |
| uploader | 4 |
| contributor | 5 |
| editor | 15 |
file permissions:
| role | permissions |
| internal | 0 |
| viewer | 1 |
| editor | 3 |
file permissions:
| role | permissions |
| internal | 0 |
| viewer | 1 |
| editor | 3 |
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
@@ -44,7 +44,7 @@ Feature: Share a file or folder that is inside a space via public link
Then the HTTP status code should be "200"
And the OCS status code should be "200"
And the OCS status message should be "OK"
And the fields of the last response to user "Alice" should include
And the fields of the last response to user "Alice" and space "share sub-item" should include
| item_type | <item_type> |
| mimetype | <mimetype> |
| file_target | <file_target> |
@@ -53,6 +53,8 @@ Feature: Share a file or folder that is inside a space via public link
| share_type | public_link |
| displayname_owner | %displayname% |
| name | <name> |
| uid_file_owner | %space_id% |
| space_id | %space_id% |
Examples:
| entity | file_target | permissions | password | name | expireDate | item_type | mimetype |
| folder | /folder | 0 | | link | | folder | httpd/unix-directory |
@@ -79,7 +81,7 @@ Feature: Share a file or folder that is inside a space via public link
Then the HTTP status code should be "200"
And the OCS status code should be "200"
And the OCS status message should be "OK"
And the fields of the last response to user "Brian" should include
And the fields of the last response to user "Brian" and space "share sub-item" should include
| item_type | <item_type> |
| mimetype | <mimetype> |
| file_target | <file_target> |
@@ -87,6 +89,8 @@ Feature: Share a file or folder that is inside a space via public link
| share_type | public_link |
| displayname_owner | %displayname% |
| name | public link |
| uid_file_owner | %space_id% |
| space_id | %space_id% |
Examples:
| entity | file_target | item_type | mimetype |
| folder | /folder | folder | httpd/unix-directory |
@@ -115,7 +119,7 @@ Feature: Share a file or folder that is inside a space via public link
| folder/file.txt | viewer |
Scenario Outline: user creates a new public link share of a file with edit permissions
Scenario Outline: user creates a new public link share of a file inside the personal space with edit permissions
Given using OCS API version "<ocs_api_version>"
And user "Alice" has uploaded file with content "Random data" to "/file.txt"
When user "Alice" creates a public link share using the sharing API with settings
@@ -150,7 +154,7 @@ Feature: Share a file or folder that is inside a space via public link
| path | folder/file.txt |
| shareType | 3 |
| permissions | 1 |
Then the fields of the last response to user "Alice" should include
Then the fields of the last response to user "Alice" and space "share sub-item" should include
| item_type | file |
| mimetype | text/plain |
| file_target | /file.txt |
@@ -159,8 +163,9 @@ Feature: Share a file or folder that is inside a space via public link
| share_type | public_link |
| displayname_file_owner | |
| displayname_owner | %displayname% |
#| uid_file_owner | %username% |
| uid_owner | %username% |
| uid_file_owner | %space_id% |
| space_id | %space_id% |
And for user "Brian" the space "share sub-item" should contain the last created public link of the file "folder/file.txt"
Examples:
| spaceRole |

View File

@@ -162,6 +162,7 @@ class FeatureContext extends BehatVariablesContext {
public OCSContext $ocsContext;
public AuthContext $authContext;
public GraphContext $graphContext;
public SpacesContext $spacesContext;
public AppConfigurationContext $appConfigurationContext;
private array $initialTrustedServer;
@@ -3221,12 +3222,15 @@ class FeatureContext extends BehatVariablesContext {
$this->ocsContext = new OCSContext();
$this->authContext = new AuthContext();
$this->appConfigurationContext = new AppConfigurationContext();
$this->spacesContext = new SpacesContext();
$this->ocsContext->before($scope);
$this->authContext->setUpScenario($scope);
$this->appConfigurationContext->setUpScenario($scope);
$environment->registerContext($this->ocsContext);
$environment->registerContext($this->authContext);
$environment->registerContext($this->appConfigurationContext);
$this->spacesContext->setUpScenario($scope);
$environment->registerContext($this->spacesContext);
$scenarioLine = $scope->getScenario()->getLine();
$featureFile = $scope->getFeature()->getFile();
$suiteName = $scope->getSuite()->getName();

View File

@@ -2777,6 +2777,69 @@ trait Sharing {
}
}
/**
* @Then the fields of the last response to user :user and space :space should include
*
* @param string $user
* @param string $space
* @param TableNode|null $body
*
* @return void
* @throws Exception
*/
public function checkFieldsOfSpaceSharingResponse(string $user, string $space, ?TableNode $body):void {
$this->verifyTableNodeColumnsCount($body, 2);
$bodyRows = $body->getRowsHash();
$userRelatedFieldNames = [
"owner",
"user",
"uid_owner",
"uid_file_owner",
"share_with",
"displayname_file_owner",
"displayname_owner",
"additional_info_owner",
"additional_info_file_owner",
"space_id"
];
$this->setLastPublicShareData($this->getResponseXml(null, __METHOD__));
foreach ($bodyRows as $field => $value) {
if (\in_array($field, $userRelatedFieldNames)) {
$value = $this->substituteInLineCodes(
$value,
$user,
[],
[
[
"code" => "%space_id%",
"function" =>
[$this->spacesContext, "getSpaceIdByName"],
"parameter" => [$user, $space]
],
],
null,
null
);
if ($field === "uid_file_owner") {
$value = (explode("$", $value))[1];
}
if ($field === "space_id") {
$exploadedSpaceId = explode("$", $value);
$value = $exploadedSpaceId[0] . "$" . $exploadedSpaceId[1] . "!" . $exploadedSpaceId[1];
}
}
$value = $this->getActualUsername($value);
$value = $this->replaceValuesFromTable($field, $value);
Assert::assertTrue(
$this->isFieldInResponse($field, $value, true, $this->getLastPublicShareData()->data[0]),
"$field doesn't have value '$value'"
);
}
}
/**
* @Then /^the fields of the last response (?:to|about) user "([^"]*)" sharing with (?:user|group) "([^"]*)" should include$/
*

View File

@@ -204,6 +204,20 @@ class SpacesContext implements Context {
return $spaces[$spaceName];
}
/**
* The method finds available spaces to the user and returns the spaceId by spaceName
*
* @param string $user
* @param string $spaceName
*
* @return string
* @throws GuzzleException
*/
public function getSpaceIdByName(string $user, string $spaceName): string {
$space = $this->getSpaceByName($user, $spaceName);
return $space["id"];
}
/**
* This method sets space id by Space Name
* This is currently used to set space id from ocis in core so that we can reuse available resource (code) and avoid duplication
@@ -378,14 +392,20 @@ class SpacesContext implements Context {
public function setUpScenario(BeforeScenarioScope $scope): void {
// Get the environment
$environment = $scope->getEnvironment();
// register new context
$this->trashbinContext = new TrashbinContext();
$this->webDavPropertiesContext = new WebDavPropertiesContext();
$this->favoritesContext = new FavoritesContext();
$this->checksumContext = new ChecksumContext();
$this->filesVersionsContext = new FilesVersionsContext();
$environment->registerContext($this->trashbinContext);
$environment->registerContext($this->webDavPropertiesContext);
$environment->registerContext($this->favoritesContext);
$environment->registerContext($this->checksumContext);
$environment->registerContext($this->filesVersionsContext);
// Get all the contexts you need in this context
$this->featureContext = $environment->getContext('FeatureContext');
$this->ocsContext = $environment->getContext('OCSContext');
$this->trashbinContext = $environment->getContext('TrashbinContext');
$this->webDavPropertiesContext = $environment->getContext('WebDavPropertiesContext');
$this->favoritesContext = $environment->getContext('FavoritesContext');
$this->checksumContext = $environment->getContext('ChecksumContext');
$this->filesVersionsContext = $environment->getContext('FilesVersionsContext');
// Run the BeforeScenario function in OCSContext to set it up correctly
$this->ocsContext->before($scope);
$this->baseUrl = \trim($this->featureContext->getBaseUrl(), "/");