diff --git a/tests/TestHelpers/GraphHelper.php b/tests/TestHelpers/GraphHelper.php index 71aead1b142..a96d5f32453 100644 --- a/tests/TestHelpers/GraphHelper.php +++ b/tests/TestHelpers/GraphHelper.php @@ -1585,6 +1585,7 @@ public static function getRoleIdByName( * @param string $shareType * @param string|null $role * @param string|null $permission + * @param string|null $expireDate * * @return ResponseInterface * @throws \JsonException @@ -1600,7 +1601,8 @@ public static function sendSharingInvitation( string $shareeId, string $shareType, ?string $role, - ?string $permission + ?string $permission, + ?string $expireDate ): ResponseInterface { $url = self::getBetaFullUrl($baseUrl, "drives/$spaceId/items/$itemId/invite"); $body = []; @@ -1619,6 +1621,10 @@ public static function sendSharingInvitation( $body['@libre.graph.permissions.actions'] = ['libre.graph/driveItem/' . $permission]; } + if ($expireDate !== null) { + $body['expirationDateTime'] = $expireDate; + } + return HttpRequestHelper::post( $url, $xRequestId, diff --git a/tests/acceptance/features/apiSharingNg/shareInvitations.feature b/tests/acceptance/features/apiSharingNg/shareInvitations.feature index 35888e53380..a168c66cc60 100644 --- a/tests/acceptance/features/apiSharingNg/shareInvitations.feature +++ b/tests/acceptance/features/apiSharingNg/shareInvitations.feature @@ -580,3 +580,197 @@ Feature: Send a sharing invitations | permissions/delete | | deleted/delete | | permissions/deny | + + + Scenario Outline: send share invitation with expiration date to user with different roles + Given user "Alice" has uploaded file with content "to share" to "/textfile1.txt" + And user "Alice" has created folder "FolderToShare" + When user "Alice" sends the following share invitation using the Graph API: + | resourceType | | + | resource | | + | space | Personal | + | sharee | Brian | + | shareType | user | + | role | | + | expireDate | 2043-07-15T14:00:00.000Z | + Then the HTTP status code should be "200" + And the JSON data of the response should match + """ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "roles", + "grantedToV2", + "expirationDateTime" + ], + "properties": { + "id": { + "type": "string", + "pattern": "^%share_id_pattern%$" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "pattern": "^%role_id_pattern%$" + } + }, + "grantedToV2": { + "type": "object", + "required": [ + "user" + ], + "properties": { + "user": { + "type": "object", + "required": [ + "id", + "displayName" + ], + "properties": { + "id": { + "type": "string", + "pattern": "^%user_id_pattern%$" + }, + "displayName": { + "type": "string", + "enum": [ + "Brian Murphy" + ] + } + } + } + } + }, + "expirationDateTime": { + "type": "string", + "enum": [ + "2043-07-15T14:00:00Z" + ] + } + } + } + } + } + } + """ + Examples: + | role | resource-type | path | + | Viewer | file | /textfile1.txt | + | File Editor | file | /textfile1.txt | + | Co Owner | file | /textfile1.txt | + | Manager | file | /textfile1.txt | + | Viewer | folder | FolderToShare | + | Editor | folder | FolderToShare | + | Co Owner | folder | FolderToShare | + | Uploader | folder | FolderToShare | + | Manager | folder | FolderToShare | + + + Scenario Outline: send share invitation with expiration date to group with different roles + Given user "Carol" has been created with default attributes and without skeleton files + And group "grp1" has been created + And the following users have been added to the following groups + | username | groupname | + | Brian | grp1 | + | Carol | grp1 | + And user "Alice" has uploaded file with content "to share" to "/textfile1.txt" + And user "Alice" has created folder "FolderToShare" + When user "Alice" sends the following share invitation using the Graph API: + | resourceType | | + | resource | | + | space | Personal | + | sharee | grp1 | + | shareType | group | + | role | | + | expireDate | 2043-07-15T14:00:00.000Z | + Then the HTTP status code should be "200" + And the JSON data of the response should match + """ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "roles", + "grantedToV2", + "expirationDateTime" + ], + "properties": { + "id": { + "type": "string", + "pattern": "^%share_id_pattern%$" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "pattern": "^%role_id_pattern%$" + } + }, + "grantedToV2": { + "type": "object", + "required": [ + "group" + ], + "properties": { + "group": { + "type": "object", + "required": [ + "id", + "displayName" + ], + "properties": { + "id": { + "type": "string", + "pattern": "^%group_id_pattern%$" + }, + "displayName": { + "type": "string", + "enum": [ + "grp1" + ] + } + } + } + } + }, + "expirationDateTime": { + "type": "string", + "enum": [ + "2043-07-15T14:00:00Z" + ] + } + } + } + } + } + } + """ + Examples: + | role | resource-type | path | + | Viewer | file | /textfile1.txt | + | File Editor | file | /textfile1.txt | + | Co Owner | file | /textfile1.txt | + | Manager | file | /textfile1.txt | + | Viewer | folder | FolderToShare | + | Editor | folder | FolderToShare | + | Co Owner | folder | FolderToShare | + | Uploader | folder | FolderToShare | + | Manager | folder | FolderToShare | diff --git a/tests/acceptance/features/bootstrap/SharingNgContext.php b/tests/acceptance/features/bootstrap/SharingNgContext.php index 9828ffbb6ac..9a37d1cdebc 100644 --- a/tests/acceptance/features/bootstrap/SharingNgContext.php +++ b/tests/acceptance/features/bootstrap/SharingNgContext.php @@ -106,6 +106,7 @@ public function userSendsTheFollowingShareInvitationUsingTheGraphApi(string $use $role = $rows['role'] ?? null; $permission = $rows['permission'] ?? null; + $expireDate = $rows["expireDate"] ?? null; $this->featureContext->setResponse( GraphHelper::sendSharingInvitation( @@ -118,7 +119,8 @@ public function userSendsTheFollowingShareInvitationUsingTheGraphApi(string $use $shareeId, $rows['shareType'], $role, - $permission + $permission, + $expireDate ) ); }