Skip to content

Commit

Permalink
[tests-only][full-ci] added test to share a disabled project space (#…
Browse files Browse the repository at this point in the history
…8319)

* added test to share a disabled project space

* added test to share deleted project space
  • Loading branch information
PrajwolAmatya authored Jan 31, 2024
1 parent a01475c commit 95b6190
Show file tree
Hide file tree
Showing 3 changed files with 138 additions and 17 deletions.
95 changes: 95 additions & 0 deletions tests/acceptance/features/apiSharingNg/shareInvitations.feature
Original file line number Diff line number Diff line change
Expand Up @@ -1664,3 +1664,98 @@ Feature: Send a sharing invitations
| Space Editor |
| Co Owner |
| Manager |


Scenario Outline: send share invitation for disabled project space to user with different roles
Given 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 "NewSpace" with the default quota using the Graph API
And user "Admin" has disabled a space "NewSpace"
When user "Alice" sends the following share invitation for space using the Graph API:
| space | NewSpace |
| sharee | Brian |
| shareType | user |
| permissionsRole | <permissions-role> |
Then the HTTP status code should be "404"
And the JSON data of the response should match
"""
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "string",
"enum": ["itemNotFound"]
},
"message": {
"type": "string",
"pattern": "^stat: error: not found: %user_id_pattern%$"
}
}
}
}
}
"""
Examples:
| permissions-role |
| Space Viewer |
| Space Editor |
| Co Owner |
| Manager |


Scenario Outline: send share invitation for deleted project space to user with different roles
Given 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 "NewSpace" with the default quota using the Graph API
And user "Admin" has disabled a space "NewSpace"
And user "Admin" has deleted a space "NewSpace"
When user "Alice" sends the following share invitation for space using the Graph API:
| space | NewSpace |
| sharee | Brian |
| shareType | user |
| permissionsRole | <permissions-role> |
Then the HTTP status code should be "404"
And the JSON data of the response should match
"""
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "string",
"enum": ["itemNotFound"]
},
"message": {
"type": "string",
"enum": ["stat: error: not found: "]
}
}
}
}
}
"""
Examples:
| permissions-role |
| Space Viewer |
| Space Editor |
| Co Owner |
| Manager |
15 changes: 13 additions & 2 deletions tests/acceptance/features/bootstrap/SharingNgContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,12 @@ public function theUserPermissionsListOfResource(string $user, string $fileOrFol
*/
public function sendShareInvitation(string $user, TableNode $table): ResponseInterface {
$rows = $table->getRowsHash();
$spaceId = ($this->spacesContext->getSpaceByName($user, $rows['space']))["id"];
if ($rows['space'] === 'Personal' || $rows['space'] === 'Shares') {
$space = $this->spacesContext->getSpaceByName($user, $rows['space']);
} else {
$space = $this->spacesContext->getCreatedSpace($rows['space']);
}
$spaceId = $space['id'];

// for resharing a resource, "item-id" in API endpoint takes shareMountId
if ($rows['space'] === 'Shares') {
Expand All @@ -152,7 +157,13 @@ public function sendShareInvitation(string $user, TableNode $table): ResponseInt
);
} else {
$resource = $rows['resource'] ?? '';
$itemId = $this->spacesContext->getResourceId($user, $rows['space'], $resource);

// for a disabled and deleted space, resource id is not accessible, so get resource id from the saved response
if ($resource === '' && $rows['space'] !== 'Personal') {
$itemId = $space['fileId'];
} else {
$itemId = $this->spacesContext->getResourceId($user, $rows['space'], $resource);
}
}

if (\array_key_exists('shareeId', $rows)) {
Expand Down
45 changes: 30 additions & 15 deletions tests/acceptance/features/bootstrap/SpacesContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -83,17 +83,31 @@ public function getSpaceCreator(string $spaceName): string {
if (!\array_key_exists($spaceName, $this->createdSpaces)) {
throw new Exception(__METHOD__ . " space '$spaceName' has not been created in this scenario");
}
return $this->createdSpaces[$spaceName];
return $this->createdSpaces[$spaceName]['spaceCreator'];
}

/**
* @param string $spaceName
* @param string $spaceCreator
* @param ResponseInterface $response
*
* @return void
*/
public function setSpaceCreator(string $spaceName, string $spaceCreator): void {
$this->createdSpaces[$spaceName] = $spaceCreator;
public function addCreatedSpace(string $spaceCreator, ResponseInterface $response): void {
$response = $this->featureContext->getJsonDecodedResponseBodyContent($response);
$spaceName = $response->name;
$this->createdSpaces[$spaceName] = [];
$this->createdSpaces[$spaceName]['id'] = $response->id;
$this->createdSpaces[$spaceName]['spaceCreator'] = $spaceCreator;
$this->createdSpaces[$spaceName]['fileId'] = $response->id . '!' . $response->owner->user->id;
}

/**
* @param string $spaceName
*
* @return array
*/
public function getCreatedSpace(string $spaceName): array {
return $this->createdSpaces[$spaceName];
}

private array $availableSpaces = [];
Expand Down Expand Up @@ -695,16 +709,17 @@ public function theUserCreatesASpaceWithQuotaUsingTheGraphApi(
): void {
$space = ["Name" => $spaceName, "driveType" => $spaceType, "quota" => ["total" => $quota]];
$body = json_encode($space);
$this->featureContext->setResponse(
GraphHelper::createSpace(
$this->featureContext->getBaseUrl(),
$user,
$this->featureContext->getPasswordForUser($user),
$body,
$this->featureContext->getStepLineRef()
)
$response = GraphHelper::createSpace(
$this->featureContext->getBaseUrl(),
$user,
$this->featureContext->getPasswordForUser($user),
$body,
$this->featureContext->getStepLineRef()
);
$this->setSpaceCreator($spaceName, $user);
$this->featureContext->setResponse($response);
if ($response->getStatusCode() === '201') {
$this->addCreatedSpace($user, $response);
}
}

/**
Expand Down Expand Up @@ -1645,7 +1660,7 @@ public function userHasCreatedSpace(
): void {
$space = ["Name" => $spaceName, "driveType" => $spaceType, "quota" => ["total" => $quota]];
$response = $this->createSpace($user, $space);
$this->setSpaceCreator($spaceName, $user);
$this->addCreatedSpace($user, $response);
$this->featureContext->theHTTPStatusCodeShouldBe(
201,
"Expected response status code should be 201 (Created)",
Expand All @@ -1670,7 +1685,7 @@ public function theUserHasCreatedASpaceByDefaultUsingTheGraphApi(
): void {
$space = ["Name" => $spaceName];
$response = $this->createSpace($user, $space);
$this->setSpaceCreator($spaceName, $user);
$this->addCreatedSpace($user, $response);
$this->featureContext->theHTTPStatusCodeShouldBe(
201,
"Expected response status code should be 201 (Created)",
Expand Down

0 comments on commit 95b6190

Please sign in to comment.