From e54dd584b1ef559eb7005462f8af615ac526d142 Mon Sep 17 00:00:00 2001 From: Viktor Scharf Date: Mon, 16 Mar 2026 17:02:14 +0100 Subject: [PATCH] api-tests: search for favorites --- .../acceptance/bootstrap/FavoritesContext.php | 67 ------- .../features/apiGraph/favorites.feature | 19 +- .../apiSearch1/favoriteSearch.feature | 165 ++++++++++++++++++ 3 files changed, 182 insertions(+), 69 deletions(-) diff --git a/tests/acceptance/bootstrap/FavoritesContext.php b/tests/acceptance/bootstrap/FavoritesContext.php index c7637af539..18481e4795 100644 --- a/tests/acceptance/bootstrap/FavoritesContext.php +++ b/tests/acceptance/bootstrap/FavoritesContext.php @@ -20,8 +20,6 @@ use Behat\Behat\Context\Context; use Behat\Behat\Hook\Scope\BeforeScenarioScope; -use Behat\Gherkin\Node\TableNode; -use TestHelpers\WebDavHelper; use TestHelpers\BehatHelper; require_once 'bootstrap.php'; @@ -30,72 +28,8 @@ * context containing favorites related API steps */ class FavoritesContext implements Context { - private FeatureContext $featureContext; private WebDavPropertiesContext $webDavPropertiesContext; - /** - * @Then /^user "([^"]*)" should (not|)\s?have the following favorited items$/ - * - * @param string $user - * @param string $shouldOrNot (not|) - * @param TableNode $expectedElements - * - * @return void - */ - public function checkFavoritedElements( - string $user, - string $shouldOrNot, - TableNode $expectedElements - ): void { - $user = $this->featureContext->getActualUsername($user); - $this->userListsFavorites($user); - $this->featureContext->propfindResultShouldContainEntries( - $shouldOrNot, - $expectedElements, - $user - ); - } - - /** - * @When /^user "([^"]*)" lists the favorites and limits the result to ([\d*]) elements using the WebDAV API$/ - * - * @param string $user - * @param int|null $limit - * - * @return void - */ - public function userListsFavorites(string $user, ?int $limit = null): void { - $renamedUser = $this->featureContext->getActualUsername($user); - $baseUrl = $this->featureContext->getBaseUrl(); - $password = $this->featureContext->getPasswordForUser($user); - $body - = "\n" . - " \n" . - " \n" . - " 1\n"; - - if ($limit !== null) { - $body .= " \n" . - " $limit\n" . - " \n"; - } - - $body .= " "; - $response = WebDavHelper::makeDavRequest( - $baseUrl, - $renamedUser, - $password, - "REPORT", - "/", - null, - null, - $this->featureContext->getStepLineRef(), - $body, - $this->featureContext->getDavPathVersion() - ); - $this->featureContext->setResponse($response); - } - /** * @Then /^as user "([^"]*)" (?:file|folder|entry) "([^"]*)" should be favorited$/ * @@ -149,7 +83,6 @@ public function before(BeforeScenarioScope $scope): void { // Get the environment $environment = $scope->getEnvironment(); // Get all the contexts you need in this context - $this->featureContext = BehatHelper::getContext($scope, $environment, 'FeatureContext'); $this->webDavPropertiesContext = BehatHelper::getContext( $scope, $environment, diff --git a/tests/acceptance/features/apiGraph/favorites.feature b/tests/acceptance/features/apiGraph/favorites.feature index a1c90db4ea..95bbc93d80 100644 --- a/tests/acceptance/features/apiGraph/favorites.feature +++ b/tests/acceptance/features/apiGraph/favorites.feature @@ -88,11 +88,9 @@ Feature: favorites And as user "Alice" file "parent/" should be favorited Examples: | file | size | mimeType | - | textfile.txt | 28 | text/plain | | simple.odt | 10119 | application/vnd.oasis.opendocument.text | | testavatar.jpg | 45343 | image/jpeg | | simple.pdf | 17684 | application/pdf | - | testaudio.mp3 | 6144 | audio/mpeg | Scenario: add a folder to favorites in the personal space @@ -601,3 +599,20 @@ Feature: favorites And user "Brian" has marked folder "space-folder" as favorite from space "new-space" When user "Brian" unmarks folder "space-folder" as favorite from space "new-space" using the Graph API Then the HTTP status code should be "204" + + + Scenario: add a file to favorites after unmarking it as favorite in the personal space + Given user "Alice" has uploaded file "filesForUpload/testavatar.jpg" to "/testavatar.jpg" + And user "Alice" has marked file "testavatar.jpg" as favorite from space "Personal" + And user "Alice" has unmarked file "testavatar.jpg" as favorite from space "Personal" + When user "Alice" marks file "/testavatar.jpg" as favorite from space "Personal" using the Graph API + Then the HTTP status code should be "201" + And as user "Alice" file "testavatar.jpg" should be favorited + + + Scenario: add a file to favorites twice + Given user "Alice" has uploaded file "filesForUpload/testavatar.jpg" to "/testavatar.jpg" + And user "Alice" has marked file "testavatar.jpg" as favorite from space "Personal" + When user "Alice" marks file "/testavatar.jpg" as favorite from space "Personal" using the Graph API + Then the HTTP status code should be "201" + And as user "Alice" file "testavatar.jpg" should be favorited diff --git a/tests/acceptance/features/apiSearch1/favoriteSearch.feature b/tests/acceptance/features/apiSearch1/favoriteSearch.feature index e69de29bb2..d087d045d9 100644 --- a/tests/acceptance/features/apiSearch1/favoriteSearch.feature +++ b/tests/acceptance/features/apiSearch1/favoriteSearch.feature @@ -0,0 +1,165 @@ +Feature: search for favorites + As a user + I want to be able to search for my favorite files and folders + + Background: + Given user "Alice" has been created with default attributes + And using spaces DAV path + + + Scenario: search by favorite files and folders in the Personal space + Given user "Alice" has created folder "first" + And user "Alice" has created folder "first/second" + And user "Alice" has uploaded file "filesForUpload/testavatar.jpg" to "first/second/testavatar.jpg" + And user "Alice" has marked file "first/second/testavatar.jpg" as favorite from space "Personal" + And user "Alice" has marked folder "first" as favorite from space "Personal" + When user "Alice" searches for 'is:favorite' using the WebDAV API + Then the HTTP status code should be "207" + And the search result should contain "2" entries + And the search result of user "Alice" should contain these entries: + | first | + | testavatar.jpg | + But the search result of user "Alice" should not contain these entries: + | second | + + + Scenario: search for favorite files and folders in a project space + Given user "Brian" has been created with default attributes + And 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 uploaded a file inside space "new-space" with content "hello world" to "text.txt" + And user "Alice" has uploaded a file inside space "new-space" with content "hello world" to "text2.txt" + And user "Alice" has created a folder "space-folder" in space "new-space" + And user "Alice" has sent the following space share invitation: + | space | new-space | + | sharee | Brian | + | shareType | user | + | permissionsRole | Space Viewer | + And user "Brian" has marked file "text.txt" as favorite from space "new-space" + And user "Brian" has marked folder "space-folder" as favorite from space "new-space" + When user "Brian" searches for 'is:favorite' using the WebDAV API + Then the HTTP status code should be "207" + And the search result should contain "2" entries + And the search result of user "Brian" should contain these entries: + | text.txt | + | space-folder | + But the search result of user "Brian" should not contain these entries: + | text2.txt | + When user "Alice" searches for 'is:favorite' using the WebDAV API + Then the HTTP status code should be "207" + And the search result should contain "0" entries + + @issue-2488 + Scenario: search for favorite shared files and folders + Given user "Brian" has been created with default attributes + And user "Alice" has created folder "parent" + And user "Alice" has created folder "parent/sub" + And user "Alice" has created folder "parent/sub/sub2" + And user "Alice" has uploaded file with content "OpenCloud test text file" to "parent/sub/sub2/textfile.txt" + And user "Alice" has sent the following resource share invitation: + | resource | parent | + | space | Personal | + | sharee | Brian | + | shareType | user | + | permissionsRole | Viewer | + And user "Alice" has sent the following resource share invitation: + | resource | parent/sub/sub2/textfile.txt | + | space | Personal | + | sharee | Brian | + | shareType | user | + | permissionsRole | Viewer | + And user "Brian" has a share "textfile.txt" synced + And user "Brian" has a share "parent" synced + And user "Brian" has marked file "textfile.txt" as favorite from space "Shares" + And user "Brian" has marked folder "parent/sub" as favorite from space "Shares" + When user "Brian" searches for 'is:favorite' using the WebDAV API + Then the HTTP status code should be "207" + And the search result should contain "3" entries + And the search result of user "Brian" should contain these entries: + | textfile.txt | + | sub | + But the search result of user "Brian" should not contain these entries: + | parent | + | parent/sub/sub2 | + When user "Alice" searches for 'is:favorite' using the WebDAV API + Then the HTTP status code should be "207" + And the search result should contain "0" entries + + + Scenario Outline: search for favorite files by name and media type in the Personal space + Given user "Alice" has uploaded file "filesForUpload/textfile.txt" to "test-textfile.txt" + And user "Alice" has uploaded file "filesForUpload/simple.odt" to "test.odt" + And user "Alice" has uploaded file "filesForUpload/lorem.txt" to "test-not-favorite.txt" + And user "Alice" has marked file "test-textfile.txt" as favorite from space "Personal" + And user "Alice" has marked file "test.odt" as favorite from space "Personal" + When user "Alice" searches for '' using the WebDAV API + Then the HTTP status code should be "207" + And the search result should contain "2" entries + And the search result of user "Alice" should contain these entries: + | test-textfile.txt | + | test.odt | + But the search result of user "Alice" should not contain these entries: + | test-not-favorite.txt | + Examples: + | search-patern | + | name:"test*" AND is:favorite | + | mediatype:("document") AND is:favorite | + + + Scenario: search for favorite files after unmarking a file as favorite + Given user "Alice" has uploaded file "filesForUpload/textfile.txt" to "textfile.txt" + And user "Alice" has marked file "textfile.txt" as favorite from space "Personal" + And user "Alice" has unmarked file "textfile.txt" as favorite from space "Personal" + When user "Alice" searches for 'is:favorite' using the WebDAV API + Then the HTTP status code should be "207" + And the search result should contain "0" entries + + + Scenario: search for favorite files after deleting a file + Given user "Alice" has uploaded file "filesForUpload/textfile.txt" to "textfile.txt" + And user "Alice" has marked file "textfile.txt" as favorite from space "Personal" + And user "Alice" has deleted file "textfile.txt" + When user "Alice" searches for 'is:favorite' using the WebDAV API + Then the HTTP status code should be "207" + And the search result should contain "0" entries + + + Scenario: search for favorite files after restoring a file + Given user "Alice" has uploaded file "filesForUpload/textfile.txt" to "textfile.txt" + And user "Alice" has marked file "textfile.txt" as favorite from space "Personal" + And user "Alice" has deleted file "textfile.txt" + And user "Alice" has restored the file with original path "textfile.txt" + When user "Alice" searches for 'is:favorite' using the WebDAV API + Then the HTTP status code should be "207" + And the search result should contain "1" entries + And the search result of user "Alice" should contain these entries: + | textfile.txt | + + + Scenario: search for favorite files after moving a file + Given user "Alice" has created folder "parent" + And user "Alice" has uploaded file "filesForUpload/textfile.txt" to "textfile.txt" + And user "Alice" has marked file "textfile.txt" as favorite from space "Personal" + And user "Alice" has moved file "textfile.txt" to "parent/textfile.txt" + When user "Alice" searches for 'is:favorite' using the WebDAV API + Then the HTTP status code should be "207" + And the search result should contain "1" entries + And the search result of user "Alice" should contain these entries: + | textfile.txt | + + + Scenario: search for favorite shared files after removing the access to the shared file + Given user "Brian" has been created with default attributes + And user "Alice" has uploaded file with content "OpenCloud test text file" to "textfile.txt" + And user "Alice" has sent the following resource share invitation: + | resource | textfile.txt | + | space | Personal | + | sharee | Brian | + | shareType | user | + | permissionsRole | Viewer | + And user "Brian" has a share "textfile.txt" synced + And user "Brian" has marked file "textfile.txt" as favorite from space "Shares" + And user "Alice" has removed the access of user "Brian" from resource "textfile.txt" of space "Personal" + When user "Brian" searches for 'is:favorite' using the WebDAV API + Then the HTTP status code should be "207" + And the search result should contain "0" entries