From 9a23ed9c8ab23f4e64656545a54071764762a412 Mon Sep 17 00:00:00 2001 From: Niraj Acharya Date: Mon, 20 Jan 2025 16:08:34 +0545 Subject: [PATCH] adding test for disabling mail notifications for space disabled event --- .../bootstrap/NotificationContext.php | 46 ++++++- .../acceptance/bootstrap/SettingsContext.php | 2 +- .../apiSettings/notificationSetting.feature | 114 +++++++++++++++++- 3 files changed, 157 insertions(+), 5 deletions(-) diff --git a/tests/acceptance/bootstrap/NotificationContext.php b/tests/acceptance/bootstrap/NotificationContext.php index ed97f466427..58466c522d2 100644 --- a/tests/acceptance/bootstrap/NotificationContext.php +++ b/tests/acceptance/bootstrap/NotificationContext.php @@ -380,6 +380,40 @@ public function filterNotificationsBySubjectAndResource( return $filteredNotifications; } + /** + * filter notification according to subject and space + * + * @param string $subject + * @param string $space + * @param ResponseInterface|null $response + * + * @return array + */ + public function filterNotificationsBySubjectAndSpace( + string $subject, + string $space, + ?ResponseInterface $response = null + ): array { + $filteredNotifications = []; + $response = $response ?? $this->featureContext->getResponse(); + $responseObject = $this->featureContext->getJsonDecodedResponseBodyContent($response); + if (!isset($responseObject->ocs->data)) { + Assert::fail("Response doesn't contain notification: " . print_r($responseObject, true)); + } + + $notifications = $responseObject->ocs->data; + foreach ($notifications as $notification) { + if (isset($notification->subject) && $notification->subject === $subject + && isset($notification->messageRichParameters->space->name) + && $notification->messageRichParameters->space->name === $space + ) { + $this->notificationIds[] = $notification->notification_id; + $filteredNotifications[] = $notification; + } + } + return $filteredNotifications; + } + /** * @Then /^user "([^"]*)" should (?:get|have) a notification with subject "([^"]*)" and message:$/ * @@ -466,21 +500,27 @@ public function userShouldGetNotificationForResourceWithMessage( } /** - * @Then user :user should not have a notification related to resource :resource with subject :subject + * @Then /^user "([^"]*)" should not have a notification related to (resource|space) "([^"]*)" with subject "([^"]*)"$/ * * @param string $user + * @param string $resourceOrSpace * @param string $resource * @param string $subject * * @return void */ - public function userShouldNotHaveANotificationRelatedToResourceWithSubject( + public function userShouldNotHaveANotificationRelatedToResourceOrSpaceWithSubject( string $user, + string $resourceOrSpace, string $resource, string $subject ): void { $response = $this->listAllNotifications($user); - $filteredResponse = $this->filterNotificationsBySubjectAndResource($subject, $resource, $response); + if ($resourceOrSpace === "space") { + $filteredResponse = $this->filterNotificationsBySubjectAndSpace($subject, $resource, $response); + } else { + $filteredResponse = $this->filterNotificationsBySubjectAndResource($subject, $resource, $response); + } Assert::assertCount( 0, $filteredResponse, diff --git a/tests/acceptance/bootstrap/SettingsContext.php b/tests/acceptance/bootstrap/SettingsContext.php index f52dc5fbb93..e043e726c01 100644 --- a/tests/acceptance/bootstrap/SettingsContext.php +++ b/tests/acceptance/bootstrap/SettingsContext.php @@ -590,7 +590,7 @@ public function getBodyForNotificationSetting(string $user, string $event): arra )->getBody()->getContents() )); foreach ($settingsValues->bundles[0]->settings as $settingsValue) { - if ($settingsValue->displayName === $event) { + if ($settingsValue->displayName === $event) { return [ "value" => [ "account_uuid" => "me", diff --git a/tests/acceptance/features/apiSettings/notificationSetting.feature b/tests/acceptance/features/apiSettings/notificationSetting.feature index 7735d304f08..061ca607539 100644 --- a/tests/acceptance/features/apiSettings/notificationSetting.feature +++ b/tests/acceptance/features/apiSettings/notificationSetting.feature @@ -13,7 +13,6 @@ Feature: Notification Settings Scenario: disable email notification - Given user "Alice" has uploaded file with content "some data" to "lorem.txt" When user "Brian" disables email notification using the settings API Then the HTTP status code should be "201" And the JSON data of the response should match @@ -444,3 +443,116 @@ Feature: Notification Settings | message | | Alice Hansen shared insideSpace.txt with you | But user "Brian" should not have a notification related to resource "insideSpace.txt" with subject "Resource unshared" + + + Scenario: disable in-app notification for Space disabled event + Given the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API + And user "Alice" has created a space "new-space" with the default quota using the Graph API + And user "Alice" has sent the following space share invitation: + | space | new-space | + | sharee | Brian | + | shareType | user | + | permissionsRole | Space Viewer | + When user "Brian" disables notification for the following events using the settings API: + | Space disabled | in-app | + Then the HTTP status code should be "201" + And the JSON data of the response should match + """ + { + "type": "object", + "required": ["value"], + "properties": { + "value": { + "type": "object", + "required": ["identifier","value"], + "properties": { + "identifier":{ + "type": "object", + "required": ["extension","bundle","setting"], + "properties": { + "extension":{ + "const": "ocis-accounts" + }, + "bundle":{ + "const": "profile" + }, + "setting":{ + "const": "event-space-disabled-options" + } + } + }, + "value":{ + "type": "object", + "required": [ + "id", + "bundleId", + "settingId", + "accountUuid", + "resource", + "collectionValue" + ], + "properties":{ + "id":{ + "pattern":"%user_id_pattern%" + }, + "bundleId":{ + "pattern":"%user_id_pattern%" + }, + "settingId":{ + "pattern":"%user_id_pattern%" + }, + "accountUuid":{ + "pattern":"%user_id_pattern%" + }, + "resource":{ + "type": "object", + "required":["type"], + "properties": { + "type":{ + "const": "TYPE_USER" + } + } + }, + "collectionValue":{ + "type": "object", + "required":["values"], + "properties": { + "values":{ + "type": "array", + "maxItems": 1, + "minItems": 1, + "uniqueItems": true, + "items": { + "oneOf": [ + { + "type": "object", + "required": [ + "key", + "boolValue" + ], + "properties": { + "key":{ + "const": "in-app" + }, + "boolValue":{ + "const": false + } + } + } + ] + } + } + } + } + } + } + } + } + } + } + """ + And user "Alice" has disabled a space "new-space" + When user "Brian" lists all notifications + Then the HTTP status code should be "200" + And there should be "1" notifications + But user "Brian" should not have a notification related to space "new-space" with subject "Space disabled"