From 385086b491409257a9bf24cff8eb27df79c68e12 Mon Sep 17 00:00:00 2001 From: Salipa-Gurung Date: Wed, 21 Aug 2024 16:22:59 +0545 Subject: [PATCH] add test for activity limit filter --- tests/TestHelpers/GraphHelper.php | 13 +- .../features/apiActivities/activities.feature | 97 ++++++++- .../apiActivities/activityFilter.feature | 187 ------------------ .../features/bootstrap/GraphContext.php | 13 +- 4 files changed, 110 insertions(+), 200 deletions(-) delete mode 100644 tests/acceptance/features/apiActivities/activityFilter.feature diff --git a/tests/TestHelpers/GraphHelper.php b/tests/TestHelpers/GraphHelper.php index 9d8b651826..99cad0d8c1 100644 --- a/tests/TestHelpers/GraphHelper.php +++ b/tests/TestHelpers/GraphHelper.php @@ -2326,7 +2326,7 @@ class GraphHelper { * @param string $user * @param string $password * @param string $resourceId - * @param string $depth + * @param array $filterParams * * @return ResponseInterface */ @@ -2336,14 +2336,15 @@ class GraphHelper { string $user, string $password, string $resourceId, - ?string $depth = null + ?array $filterParams = [] ): ResponseInterface { // 'kql=itemId' filter is required for the current implementation but it might change in future // See: https://github.com/owncloud/ocis/issues/9194 - if ($depth !== null) { - $fullUrl = self::getBetaFullUrl($baseUrl, "extensions/org.libregraph/activities?kql=itemid%3A$resourceId+AND+depth%3A$depth"); - } else { - $fullUrl = self::getBetaFullUrl($baseUrl, "extensions/org.libregraph/activities?kql=itemid%3A$resourceId"); + $fullUrl = self::getBetaFullUrl($baseUrl, "extensions/org.libregraph/activities?kql=itemid%3A$resourceId"); + if (!empty($filterParams)) { + foreach ($filterParams as $filter => $value) { + $fullUrl .= "+AND+$filter%3A$value"; + } } return HttpRequestHelper::get( $fullUrl, diff --git a/tests/acceptance/features/apiActivities/activities.feature b/tests/acceptance/features/apiActivities/activities.feature index 2f94a0bd82..1a7af58869 100644 --- a/tests/acceptance/features/apiActivities/activities.feature +++ b/tests/acceptance/features/apiActivities/activities.feature @@ -1327,7 +1327,7 @@ Feature: check activities } """ - @issue-9712 + @issue-9850 Scenario: check activity with depth filter Given user "Alice" has created folder "/New Folder" And user "Alice" has created folder "/New Folder/Sub Folder" @@ -1421,3 +1421,98 @@ Feature: check activities } } """ + + @issue-9880 + Scenario: check activity with limit filter + Given user "Alice" has created folder "/New Folder" + And user "Alice" has created folder "/New Folder/Sub Folder" + And user "Alice" has uploaded file with content "ownCloud test text file 0" to "/New Folder/Sub Folder/textfile0.txt" + When user "Alice" lists the activities for folder "New Folder" of space "Personal" with limit "2" using the Graph API + 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", + "minItems": 2, + "maxItems": 2, + "uniqueItems": true, + "items": { + "oneOf": [ + { + "type": "object", + "required": ["id", "template", "times"], + "properties": { + "template": { + "type": "object", + "required": ["message", "variables"], + "properties": { + "message": { + "const": "{user} added {resource} to {space}" + }, + "variables": { + "type": "object", + "required": ["resource", "space", "user"], + "properties": { + "resource": { + "type": "object", + "required": ["id", "name"], + "properties": { + "name": { + "const": "New Folder" + } + } + } + } + } + } + }, + "times": { + "type": "object", + "required": ["recordedTime"] + } + } + }, + { + "type": "object", + "required": ["id", "template", "times"], + "properties": { + "template": { + "type": "object", + "required": ["message", "variables"], + "properties": { + "message": { + "const": "{user} added {resource} to {space}" + }, + "variables": { + "type": "object", + "required": ["resource", "space", "user"], + "properties": { + "resource": { + "type": "object", + "required": ["id", "name"], + "properties": { + "name": { + "const": "Sub Folder" + } + } + } + } + } + } + }, + "times": { + "type": "object", + "required": ["recordedTime"] + } + } + } + ] + } + } + } + } + """ diff --git a/tests/acceptance/features/apiActivities/activityFilter.feature b/tests/acceptance/features/apiActivities/activityFilter.feature deleted file mode 100644 index 0e3e95f611..0000000000 --- a/tests/acceptance/features/apiActivities/activityFilter.feature +++ /dev/null @@ -1,187 +0,0 @@ -@issue-9712 -Feature: activity filter - As a user - I want to filter activities - So that I can track modifications of specific resource - - Background: - Given user "Alice" has been created with default attributes and without skeleton files - - - Scenario: check activity with depth filter - Given user "Alice" has created folder "/New Folder" - And user "Alice" has created folder "/New Folder/Sub Folder" - And user "Alice" has uploaded file with content "ownCloud test text file 0" to "/New Folder/Sub Folder/textfile0.txt" - When user "Alice" lists the activities for folder "New Folder" of space "Personal" with depth "0" using the Graph API - 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", - "minItems": 1, - "maxItems": 1, - "items": { - "type": "object", - "required": ["id", "template", "times"], - "properties": { - "template": { - "type": "object", - "required": ["message", "variables"], - "properties": { - "message": { - "const": "{user} added {resource} to {space}" - }, - "variables": { - "type": "object", - "required": ["resource", "space", "user"], - "properties": { - "resource": { - "type": "object", - "required": ["id", "name"], - "properties": { - "name": { - "const": "New Folder" - } - } - } - } - } - } - }, - "times": { - "type": "object", - "required": ["recordedTime"] - } - } - } - } - } - } - """ - When user "Alice" lists the activities for folder "New Folder" of space "Personal" with depth "2" using the Graph API - 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", - "minItems": 3, - "maxItems": 3, - "uniqueItems": true, - "items": { - "oneOf": [ - { - "type": "object", - "required": ["id", "template", "times"], - "properties": { - "template": { - "type": "object", - "required": ["message", "variables"], - "properties": { - "message": { - "const": "{user} added {resource} to {space}" - }, - "variables": { - "type": "object", - "required": ["resource", "space", "user"], - "properties": { - "resource": { - "type": "object", - "required": ["id", "name"], - "properties": { - "name": { - "const": "New Folder" - } - } - } - } - } - } - }, - "times": { - "type": "object", - "required": ["recordedTime"] - } - } - }, - { - "type": "object", - "required": ["id", "template", "times"], - "properties": { - "template": { - "type": "object", - "required": ["message", "variables"], - "properties": { - "message": { - "const": "{user} added {resource} to {space}" - }, - "variables": { - "type": "object", - "required": ["resource", "space", "user"], - "properties": { - "resource": { - "type": "object", - "required": ["id", "name"], - "properties": { - "name": { - "const": "Sub Folder" - } - } - } - } - } - } - }, - "times": { - "type": "object", - "required": ["recordedTime"] - } - } - }, - { - "type": "object", - "required": ["id", "template", "times"], - "properties": { - "template": { - "type": "object", - "required": ["message", "variables"], - "properties": { - "message": { - "const": "{user} added {resource} to {space}" - }, - "variables": { - "type": "object", - "required": ["resource", "space", "user"], - "properties": { - "resource": { - "type": "object", - "required": ["id", "name"], - "properties": { - "name": { - "const": "textfile0.txt" - } - } - } - } - } - } - }, - "times": { - "type": "object", - "required": ["recordedTime"] - } - } - } - ] - } - } - } - } - """ diff --git a/tests/acceptance/features/bootstrap/GraphContext.php b/tests/acceptance/features/bootstrap/GraphContext.php index d55272f98c..856da67d92 100644 --- a/tests/acceptance/features/bootstrap/GraphContext.php +++ b/tests/acceptance/features/bootstrap/GraphContext.php @@ -2840,16 +2840,17 @@ class GraphContext implements Context { } /** - * @When /^user "([^"]*)" lists the activities for (?:folder|file) "([^"]*)" of space "([^"]*)" with depth "([^"]*)" using the Graph API/ + * @When /^user "([^"]*)" lists the activities for (?:folder|file) "([^"]*)" of space "([^"]*)" with (depth|limit) "([^"]*)" using the Graph API/ * * @param string $user * @param string $resource * @param string $spaceName - * @param string $folderDepth + * @param string $filterType + * @param string $filterValue * * @return void */ - public function userListsTheActivitiesForFolderOfSpaceWithDepthUsingTheGraphApi(string $user, string $resource, string $spaceName, string $folderDepth): void { + public function userListsTheActivitiesForFolderOfSpaceWithDepthOrLimitUsingTheGraphApi(string $user, string $resource, string $spaceName, string $filterType, string $filterValue): void { $resourceId = $this->featureContext->spacesContext->getResourceId($user, $spaceName, $resource); $response = GraphHelper::getActivities( $this->featureContext->getBaseUrl(), @@ -2857,7 +2858,7 @@ class GraphContext implements Context { $user, $this->featureContext->getPasswordForUser($user), $resourceId, - $folderDepth + [$filterType => $filterValue] ); $this->featureContext->setResponse($response); } @@ -2872,7 +2873,7 @@ class GraphContext implements Context { */ public function theUserGetsFederatedUsersUsingTheGraphApi(?string $user = null): void { $credentials = $this->getAdminOrUserCredentials($user); - + $response = GraphHelper::getFederatedUsers( $this->featureContext->getBaseUrl(), $this->featureContext->getStepLineRef(), @@ -2893,7 +2894,7 @@ class GraphContext implements Context { */ public function theUserGetsAllUsersUsingTheGraphApi(?string $user = null): void { $credentials = $this->getAdminOrUserCredentials($user); - + $response = GraphHelper::getAllUsers( $this->featureContext->getBaseUrl(), $this->featureContext->getStepLineRef(),