From 5c16ddca19f652c7107d4472f5bf4323cc5dae69 Mon Sep 17 00:00:00 2001 From: Florian Schade Date: Sun, 3 Sep 2023 09:11:55 +0200 Subject: [PATCH] kql search tests --- .../features/apiSearch/apiSpaceSearch.feature | 144 +++++++++++++++--- .../features/apiSearch/contentSearch.feature | 33 ++-- .../features/apiSearch/tagSearch.feature | 56 ++++--- .../features/bootstrap/SearchContext.php | 24 --- 4 files changed, 184 insertions(+), 73 deletions(-) diff --git a/tests/acceptance/features/apiSearch/apiSpaceSearch.feature b/tests/acceptance/features/apiSearch/apiSpaceSearch.feature index fdbd277a705..137f19a04c5 100644 --- a/tests/acceptance/features/apiSearch/apiSpaceSearch.feature +++ b/tests/acceptance/features/apiSearch/apiSpaceSearch.feature @@ -16,10 +16,10 @@ Feature: Search And user "Alice" has created a space "find data" with the default quota using the GraphApi And user "Alice" has created a folder "folderMain/SubFolder1/subFOLDER2" in space "find data" And user "Alice" has uploaded a file inside space "find data" with content "some content" to "folderMain/SubFolder1/subFOLDER2/insideTheFolder.txt" - And using new DAV path - Scenario: user can find data from the project space + Scenario Outline: user can find data from the project space + Given using DAV path When user "Alice" searches for "*fol*" using the WebDAV API Then the HTTP status code should be "207" And the search result should contain "4" entries @@ -28,9 +28,15 @@ Feature: Search | /folderMain/SubFolder1 | | /folderMain/SubFolder1/subFOLDER2 | | /folderMain/SubFolder1/subFOLDER2/insideTheFolder.txt | + Examples: + | dav-path-version | + | old | + | new | + | spaces | - Scenario: user can only find data that they searched for from the project space + Scenario Outline: user can only find data that they searched for from the project space + Given using DAV path When user "Alice" searches for "*SUB*" using the WebDAV API Then the HTTP status code should be "207" And the search result should contain "2" entries @@ -40,10 +46,16 @@ Feature: Search But the search result of user "Alice" should not contain these entries: | /folderMain | | /folderMain/SubFolder1/subFOLDER2/insideTheFolder.txt | + Examples: + | dav-path-version | + | old | + | new | + | spaces | - Scenario: user can find data from the shares - Given user "Alice" has created a share inside of space "find data" with settings: + Scenario Outline: user can find data from the shares + Given using DAV path + And user "Alice" has created a share inside of space "find data" with settings: | path | folderMain | | shareWith | Brian | | role | viewer | @@ -56,19 +68,31 @@ Feature: Search | /SubFolder1/subFOLDER2 | | /SubFolder1/subFOLDER2/insideTheFolder.txt | And for user "Brian" the search result should contain space "mountpoint/folderMain" + Examples: + | dav-path-version | + | old | + | new | + | spaces | - Scenario: user can find hidden file - Given user "Alice" has created a folder ".space" in space "find data" + Scenario Outline: user can find hidden file + Given using DAV path + And user "Alice" has created a folder ".space" in space "find data" When user "Alice" searches for "*.sp*" 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: | /.space | + Examples: + | dav-path-version | + | old | + | new | + | spaces | - Scenario: user cannot find pending share - Given user "Alice" has created a share inside of space "find data" with settings: + Scenario Outline: user cannot find pending share + Given using DAV path + And user "Alice" has created a share inside of space "find data" with settings: | path | folderMain | | shareWith | Brian | | role | viewer | @@ -79,10 +103,16 @@ Feature: Search | /SubFolder1 | | /SubFolder1/subFOLDER2 | | /SubFolder1/subFOLDER2/insideTheFolder.txt | + Examples: + | dav-path-version | + | old | + | new | + | spaces | - Scenario: user cannot find declined share - Given user "Alice" has created a share inside of space "find data" with settings: + Scenario Outline: user cannot find declined share + Given using DAV path + And user "Alice" has created a share inside of space "find data" with settings: | path | folderMain | | shareWith | Brian | | role | viewer | @@ -94,23 +124,41 @@ Feature: Search | /SubFolder1 | | /SubFolder1/subFOLDER2 | | /SubFolder1/subFOLDER2/insideTheFolder.txt | + Examples: + | dav-path-version | + | old | + | new | + | spaces | - Scenario: user cannot find deleted folder - Given user "Alice" has removed the folder "folderMain" from space "find data" + Scenario Outline: user cannot find deleted folder + Given using DAV path + And user "Alice" has removed the folder "folderMain" from space "find data" When user "Alice" searches for "*folderMain*" using the WebDAV API Then the HTTP status code should be "207" And the search result should contain "0" entries + Examples: + | dav-path-version | + | old | + | new | + | spaces | - Scenario: user can find project space by name + Scenario Outline: user can find project space by name + Given using DAV path When user "Alice" searches for '"*find data*"' using the WebDAV API Then the HTTP status code should be "207" And the search result should contain "1" entries And for user "Alice" the search result should contain space "find data" + Examples: + | dav-path-version | + | old | + | new | + | spaces | - Scenario: user can search inside folder in space + Scenario Outline: user can search inside folder in space + Given using DAV path When user "Alice" searches for "*folder*" inside folder "/folderMain" in space "find data" using the WebDAV API Then the HTTP status code should be "207" And the search result should contain "3" entries @@ -120,10 +168,16 @@ Feature: Search | /SubFolder1/subFOLDER2/insideTheFolder.txt | But the search result of user "Alice" should not contain these entries: | /folderMain | + Examples: + | dav-path-version | + | old | + | new | + | spaces | - Scenario: search inside folder in shares - Given user "Alice" has created a share inside of space "find data" with settings: + Scenario Outline: search inside folder in shares + Given using DAV path + And user "Alice" has created a share inside of space "find data" with settings: | path | folderMain | | shareWith | Brian | | role | viewer | @@ -136,10 +190,38 @@ Feature: Search | /SubFolder1/subFOLDER2/insideTheFolder.txt | But the search result of user "Brian" should not contain these entries: | /folderMain | + Examples: + | dav-path-version | + | old | + | new | + | spaces | - @issue-enterprise-6000 - Scenario: sharee cannot find resources that are not shared - Given user "Alice" has created a folder "foo/sharedToBrian" in space "Alice Hansen" + + @skipOnStable3.0 + Scenario Outline: search files inside the folder + Given using DAV path + And user "Alice" has uploaded file with content "hello world inside root" to "file1.txt" + And user "Alice" has created folder "/Folder" + And user "Alice" has uploaded file with content "hello world inside folder" to "/Folder/file2.txt" + And user "Alice" has created folder "/Folder/SubFolder" + And user "Alice" has uploaded file with content "hello world inside sub-folder" to "/Folder/SubFolder/file3.txt" + When user "Alice" searches for "*file*" inside folder "/Folder" using the WebDAV API + Then the HTTP status code should be "207" + And the search result of user "Alice" should contain only these entries: + | file2.txt | + | file3.txt | + But the search result of user "Alice" should not contain these entries: + | file1.txt | + Examples: + | dav-path-version | + | old | + | new | + | spaces | + + @issue-enterprise-6000 @issue-7028 @issue-7092 + Scenario Outline: sharee cannot find resources that are not shared + Given using DAV path + And user "Alice" has created a folder "foo/sharedToBrian" in space "Alice Hansen" And user "Alice" has created a folder "sharedToCarol" in space "Alice Hansen" And user "Alice" has created a share inside of space "Alice Hansen" with settings: | path | foo | @@ -152,3 +234,25 @@ Feature: Search | /sharedToBrian | But the search result of user "Brian" should not contain these entries: | /sharedToCarol | + Examples: + | dav-path-version | + | old | + | new | + | spaces | + + + Scenario Outline: search resources using different search patterns (KQL feature) + Given using spaces DAV path + And user "Alice" has created a folder "subfolder" in space "find data" + When user "Alice" searches for '' 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: + | | + Examples: + | description | pattern | search-result | + | starts with | fold* | /folderMain | + | ends with | *der1 | /folderMain/SubFolder1 | + | strict search | subfolder | /subfolder | + | using patern "name:" | name:*der2 | /folderMain/SubFolder1/subFOLDER2 | + | using the pattern "name:" where the value is in quotes | name:"*der2" | /folderMain/SubFolder1/subFOLDER2 | diff --git a/tests/acceptance/features/apiSearch/contentSearch.feature b/tests/acceptance/features/apiSearch/contentSearch.feature index 7be1880d201..d80b92ae890 100644 --- a/tests/acceptance/features/apiSearch/contentSearch.feature +++ b/tests/acceptance/features/apiSearch/contentSearch.feature @@ -46,10 +46,6 @@ Feature: content search | dav-path-version | | old | | new | - - @skipOnStable3.0 - Examples: - | dav-path-version | | spaces | @@ -125,10 +121,6 @@ Feature: content search | dav-path-version | | old | | new | - - @skipOnStable3.0 - Examples: - | dav-path-version | | spaces | @@ -156,8 +148,27 @@ Feature: content search | dav-path-version | | old | | new | + | spaces | + - @skipOnStable3.0 + Scenario Outline: search resources using different search patterns (KQL feature) + Given using spaces DAV path + And user "Alice" has uploaded file with content "hello world, let start to test" to "technical task.txt" + And user "Alice" has uploaded file with content "it's been hell" to "task comments.txt" + And user "Alice" has tagged the following files of the space "Personal": + | path | tagName | + | technical task.txt | test | + When user "Alice" searches for '' using the WebDAV API + Then the HTTP status code should be "207" + And the search result should contain "" entries + And the search result of user "Alice" should contain these entries: + | | + | | Examples: - | dav-path-version | - | spaces | + | pattern | result-count | search-result-1 | search-result-2 | + | Content:hello | 1 | /technical task.txt | | + | content:hello | 1 | /technical task.txt | | + | content:"hello" | 1 | /technical task.txt | | + | content:hel* | 2 | /technical task.txt | /task comments.txt | + | content:hel* AND tag:test | 1 | /technical task.txt | | + | (name:*task* AND content:hel*) NOT tag:test | 1 | /task comments.txt | | diff --git a/tests/acceptance/features/apiSearch/tagSearch.feature b/tests/acceptance/features/apiSearch/tagSearch.feature index 239192a6200..0701a829a41 100644 --- a/tests/acceptance/features/apiSearch/tagSearch.feature +++ b/tests/acceptance/features/apiSearch/tagSearch.feature @@ -235,23 +235,43 @@ Feature: tag search | new | | spaces | - @skipOnStable3.0 - Scenario Outline: search files inside the folder - Given using DAV path - And user "Alice" has uploaded file with content "hello world inside root" to "file1.txt" - And user "Alice" has created folder "/Folder" - And user "Alice" has uploaded file with content "hello world inside folder" to "/Folder/file2.txt" - And user "Alice" has created folder "/Folder/SubFolder" - And user "Alice" has uploaded file with content "hello world inside sub-folder" to "/Folder/SubFolder/file3.txt" - When user "Alice" searches for "*file*" inside folder "/Folder" using the WebDAV API + + Scenario Outline: search resources using different search patterns (KQL feature) + Given using spaces DAV path + And user "Alice" has created the following folders + | path | + | exercises | + | answers | + | verification work | + | withoutTagFolder | + And user "Alice" has tagged the following folders of the space "Personal": + | path | tagName | + | exercises | klass10 | + | exercises | mathe | + | exercises | physik | + | answers | klass10 | + | answers | mathe | + | answers | chemi | + | verification work | klass10 | + When user "Alice" searches for '' using the WebDAV API Then the HTTP status code should be "207" - And the search result of user "Alice" should contain only these entries: - | file2.txt | - | file3.txt | - But the search result of user "Alice" should not contain these entries: - | file1.txt | + And the search result should contain "" entries + And the search result of user "Alice" should contain these entries: + | | + | | Examples: - | dav-path-version | - | old | - | new | - | spaces | + | pattern | result-count | search-result-1 | search-result-2 | + | Tags:mathe | 2 | /exercises | /answers | + | tag:mathe | 2 | /exercises | /answers | + | tag:(mathe klass10) | 2 | /exercises | /answers | + | tag:klass10 AND tag:chemi | 1 | /answers | | + | tag:chemi OR tag:physik | 2 | /exercises | /answers | + # why we need use quotes? it'll be fixed in future. Actual: search result gives all user content + #| (tag:klass10) NOT tag:physik | 2 | /answers | verification work | + | (tag:(mathe klass10)) NOT tag:chemi | 1 | /exercises | | + | (tag:mathe OR tag:klass10) NOT tag:physik | 2 | /answers | /verification work | + | tag:mathe NOT name:exercises | 1 | /answers | | + | tag:mathe AND NOT name:exercises | 1 | /answers | | + # The third finding is the personal space itself + | NOT tag:mathe | 3 | /verification work | /withoutTagFolder | + diff --git a/tests/acceptance/features/bootstrap/SearchContext.php b/tests/acceptance/features/bootstrap/SearchContext.php index b0fd1e81357..a3163aa304b 100644 --- a/tests/acceptance/features/bootstrap/SearchContext.php +++ b/tests/acceptance/features/bootstrap/SearchContext.php @@ -169,28 +169,4 @@ public function before(BeforeScenarioScope $scope):void { // Get all the contexts you need in this context $this->featureContext = $environment->getContext('FeatureContext'); } - - /** - * @Then the search result by tags for user :user should contain these entries: - * - * @param string|null $user - * @param TableNode $expectedEntries - * - * @return void - * @throws Exception - */ - public function theSearchResultByTagsForUserShouldContainTheseEntries( - ?string $user, - TableNode $expectedEntries - ):void { - $user = $this->featureContext->getActualUsername($user); - $this->featureContext->verifyTableNodeColumnsCount($expectedEntries, 1); - $expectedEntries = $expectedEntries->getRows(); - $expectedEntriesArray = []; - $responseResourcesArray = $this->featureContext->findEntryFromReportResponse($user); - foreach ($expectedEntries as $item) { - $expectedEntriesArray[] = $item[0]; - } - Assert::assertEqualsCanonicalizing($expectedEntriesArray, $responseResourcesArray); - } }