diff --git a/tests/acceptance/features/apiSharingNg/shareInvitations.feature b/tests/acceptance/features/apiSharingNg/shareInvitations.feature index 5f2cc199b27..a30ac02a62e 100644 --- a/tests/acceptance/features/apiSharingNg/shareInvitations.feature +++ b/tests/acceptance/features/apiSharingNg/shareInvitations.feature @@ -1711,3 +1711,51 @@ 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" + 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 | | + 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 | diff --git a/tests/acceptance/features/bootstrap/SharingNgContext.php b/tests/acceptance/features/bootstrap/SharingNgContext.php index c0583997d55..d8b261ea333 100644 --- a/tests/acceptance/features/bootstrap/SharingNgContext.php +++ b/tests/acceptance/features/bootstrap/SharingNgContext.php @@ -139,7 +139,11 @@ public function theUserPermissionsListOfResource(string $user, string $fileOrFol */ public function sendShareInvitation(string $user, TableNode $table): ResponseInterface { $rows = $table->getRowsHash(); - $space = $this->spacesContext->getSpaceByName($user, $rows['space']); + 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 @@ -154,10 +158,9 @@ public function sendShareInvitation(string $user, TableNode $table): ResponseInt } else { $resource = $rows['resource'] ?? ''; - // for a disabled space, the state of the space is set to trashed - // resource id of disabled space cannot be accessed, but is in format: ($space['id'] . '!' . $space['owner']['user']['id']) - if (isset($space['root']['deleted']['state']) && $space['root']['deleted']['state'] === 'trashed') { - $itemId = $spaceId . '!' . $space['owner']['user']['id']; + // 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); } diff --git a/tests/acceptance/features/bootstrap/SpacesContext.php b/tests/acceptance/features/bootstrap/SpacesContext.php index 23107d7fe8f..de0020bb585 100644 --- a/tests/acceptance/features/bootstrap/SpacesContext.php +++ b/tests/acceptance/features/bootstrap/SpacesContext.php @@ -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 = []; @@ -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); + } } /** @@ -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)", @@ -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)",