copy feature files from core

This commit is contained in:
Saw-jan
2023-01-05 09:22:52 +05:45
committed by Phil Davis
parent 35d4cb53ae
commit c59392bc1e
336 changed files with 52903 additions and 0 deletions
@@ -0,0 +1,342 @@
@api
Feature: download file
As a user
I want to be able to download files
So that I can work wih local copies of files on my client system
Background:
Given user "Alice" has been created with default attributes and without skeleton files
And user "Alice" has uploaded file with content "ownCloud test text file 0" to "/textfile0.txt"
And user "Alice" has uploaded file with content "Welcome this is just an example file for developers." to "/welcome.txt"
@smokeTest
Scenario Outline: download a file
Given using <dav_version> DAV path
When user "Alice" downloads file "/textfile0.txt" using the WebDAV API
Then the HTTP status code should be "200"
And the downloaded content should be "ownCloud test text file 0"
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
@issue-ocis-reva-12
Scenario Outline: download a file with range
Given using <dav_version> DAV path
When user "Alice" downloads file "/welcome.txt" with range "bytes=24-50" using the WebDAV API
Then the HTTP status code should be "206"
And the downloaded content should be "example file for developers"
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
Scenario Outline: download a file larger than 4MB (ref: https://github.com/sabre-io/http/pull/119 )
Given using <dav_version> DAV path
And user "Alice" has uploaded file "/file9000000.txt" ending with "text at end of file" of size 9000000 bytes
When user "Alice" downloads file "/file9000000.txt" using the WebDAV API
Then the HTTP status code should be "200"
And the size of the downloaded file should be 9000000 bytes
And the downloaded content should end with "text at end of file"
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
@smokeTest @notToImplementOnOCIS
Scenario Outline: Downloading a file should serve security headers
Given using <dav_version> DAV path
When user "Alice" downloads file "/welcome.txt" using the WebDAV API
Then the HTTP status code should be "200"
And the following headers should be set
| header | value |
| Content-Disposition | attachment; filename*=UTF-8''welcome.txt; filename="welcome.txt" |
| Content-Security-Policy | default-src 'none'; |
| X-Content-Type-Options | nosniff |
| X-Download-Options | noopen |
| X-Frame-Options | SAMEORIGIN |
| X-Permitted-Cross-Domain-Policies | none |
| X-Robots-Tag | none |
| X-XSS-Protection | 0 |
And the downloaded content should start with "Welcome"
Examples:
| dav_version |
| old |
| new |
@notToImplementOnOCIS
Scenario Outline: Doing a GET with a web login should work without CSRF token on the new backend
Given using <dav_version> DAV path
And user "Alice" has logged in to a web-style session
When the client sends a "GET" to "/remote.php/dav/files/%username%/welcome.txt" of user "Alice" without requesttoken
Then the HTTP status code should be "200"
And the downloaded content should start with "Welcome"
Examples:
| dav_version |
| old |
| new |
@notToImplementOnOCIS
Scenario Outline: Doing a GET with a web login should work with CSRF token on the new backend
Given using <dav_version> DAV path
And user "Alice" has logged in to a web-style session
When the client sends a "GET" to "/remote.php/dav/files/%username%/welcome.txt" of user "Alice" with requesttoken
Then the HTTP status code should be "200"
And the downloaded content should start with "Welcome"
Examples:
| dav_version |
| old |
| new |
Scenario Outline: Get the size of a file
Given using <dav_version> DAV path
And user "Alice" has uploaded file with content "This is a test file" to "test-file.txt"
When user "Alice" gets the size of file "test-file.txt" using the WebDAV API
Then the HTTP status code should be "207"
And the size of the file should be "19"
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
@issue-ocis-reva-98
Scenario Outline: Get the content-length response header of a pdf file
Given using <dav_version> DAV path
And user "Alice" has uploaded file "filesForUpload/simple.pdf" to "/simple.pdf"
When user "Alice" downloads file "/simple.pdf" using the WebDAV API
Then the HTTP status code should be "200"
And the following headers should be set
| header | value |
| Content-Length | 9622 |
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
@issue-ocis-reva-98
Scenario Outline: Get the content-length response header of an image file
Given using <dav_version> DAV path
And user "Alice" has uploaded file "filesForUpload/testavatar.png" to "/testavatar.png"
When user "Alice" downloads file "/testavatar.png" using the WebDAV API
Then the HTTP status code should be "200"
And the following headers should be set
| header | value |
| Content-Length | 35323 |
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
Scenario Outline: Download a file with comma in the filename
Given using <dav_version> DAV path
And user "Alice" has uploaded file with content "file with comma in filename" to <filename>
When user "Alice" downloads file <filename> using the WebDAV API
Then the HTTP status code should be "200"
And the downloaded content should be "file with comma in filename"
Examples:
| dav_version | filename |
| old | "sample,1.txt" |
| old | ",,,.txt" |
| old | ",,,.," |
| new | "sample,1.txt" |
| new | ",,,.txt" |
| new | ",,,.," |
@skipOnOcV10 @personalSpace
Examples:
| dav_version | filename |
| spaces | "sample,1.txt" |
| spaces | ",,,.txt" |
| spaces | ",,,.," |
Scenario Outline: download a file with single part ranges
Given using <dav_version> DAV path
When user "Alice" downloads file "/welcome.txt" with range "bytes=0-51" using the WebDAV API
Then the HTTP status code should be "206"
And the following headers should be set
| header | value |
| Content-Length | 52 |
| Content-Range | bytes 0-51/52 |
And the downloaded content should be "Welcome this is just an example file for developers."
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
Scenario Outline: download a file with multipart ranges
Given using <dav_version> DAV path
When user "Alice" downloads file "/welcome.txt" with range "bytes=0-6, 40-51" using the WebDAV API
Then the HTTP status code should be "206" or "200"
And if the HTTP status code was "206" then the following headers should match these regular expressions
| Content-Length | /\d+/ |
| Content-Type | /^multipart\/byteranges; boundary=[a-zA-Z0-9_.-]*$/ |
And if the HTTP status code was "206" then the downloaded content for multipart byterange should be:
"""
Content-type: text/plain;charset=UTF-8
Content-range: bytes 0-6/52
Welcome
Content-type: text/plain;charset=UTF-8
Content-range: bytes 40-51/52
developers.
"""
But if the HTTP status code was "200" then the downloaded content should be "Welcome this is just an example file for developers."
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
Scenario Outline: download a file with last byte range out of bounds
Given using <dav_version> DAV path
When user "Alice" downloads file "/welcome.txt" with range "bytes=0-55" using the WebDAV API
Then the HTTP status code should be "206"
And the downloaded content should be "Welcome this is just an example file for developers."
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
Scenario Outline: download a range at the end of a file
Given using <dav_version> DAV path
When user "Alice" downloads file "/welcome.txt" with range "bytes=-11" using the WebDAV API
Then the HTTP status code should be "206"
And the downloaded content should be "developers."
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
Scenario Outline: download a file with range out of bounds
Given using <dav_version> DAV path
When user "Alice" downloads file "/welcome.txt" with range "bytes=55-60" using the WebDAV API
Then the HTTP status code should be "416"
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
Scenario Outline: download hidden files
Given using <dav_version> DAV path
And user "Alice" has created folder "/FOLDER"
And user "Alice" has uploaded the following files with content "hidden file"
| path |
| .hidden_file |
| /FOLDER/.hidden_file |
When user "Alice" downloads the following files using the WebDAV API
| path |
| .hidden_file |
| /FOLDER/.hidden_file |
Then the HTTP status code of responses on all endpoints should be "200"
And the content of the following files for user "Alice" should be "hidden file"
| path |
| .hidden_file |
| /FOLDER/.hidden_file |
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
@smokeTest @skipOnOcV10
Scenario Outline: Downloading a file should serve security headers
Given using <dav_version> DAV path
When user "Alice" downloads file "/welcome.txt" using the WebDAV API
Then the HTTP status code should be "200"
And the following headers should be set
| header | value |
| Content-Disposition | attachment; filename*=UTF-8''welcome.txt; filename="welcome.txt" |
| Content-Security-Policy | default-src 'none'; |
| X-Content-Type-Options | nosniff |
| X-Download-Options | noopen |
| X-Frame-Options | SAMEORIGIN |
| X-Permitted-Cross-Domain-Policies | none |
| X-Robots-Tag | none |
| X-XSS-Protection | 1; mode=block |
And the downloaded content should start with "Welcome"
Examples:
| dav_version |
| old |
| new |
@personalSpace
Examples:
| dav_version |
| spaces |
Scenario: download a zero byte size file
Given user "Alice" has uploaded file "filesForUpload/zerobyte.txt" to "/zerobyte.txt"
When user "Alice" downloads file "/zerobyte.txt" using the WebDAV API
Then the HTTP status code should be "200"
And the size of the downloaded file should be 0 bytes
@@ -0,0 +1,433 @@
@api
Feature: list files
As a user
I want to be able to list my files and folders (resources)
So that I can understand my file structure in owncloud
Background:
Given user "Alice" has been created with default attributes and without skeleton files
And user "Alice" has created the following folders
| path |
| simple-folder |
| simple-folder/simple-folder1 |
| simple-folder/simple-empty-folder |
| simple-folder/simple-folder1/simple-folder2 |
And user "Alice" has uploaded the following files with content "simple-test-content"
| path |
| textfile0.txt |
| welcome.txt |
| simple-folder/textfile0.txt |
| simple-folder/welcome.txt |
| simple-folder/simple-folder1/textfile0.txt |
| simple-folder/simple-folder1/welcome.txt |
| simple-folder/simple-folder1/simple-folder2/textfile0.txt |
| simple-folder/simple-folder1/simple-folder2/welcome.txt |
Scenario Outline: Get the list of resources in the root folder with depth 0
Given using <dav_version> DAV path
When user "Alice" lists the resources in "/" with depth "0" using the WebDAV API
Then the HTTP status code should be "207"
And the last DAV response for user "Alice" should not contain these nodes
| name |
| textfile0.txt |
| welcome.txt |
| simple-folder/ |
| simple-folder/welcome.txt |
| simple-folder/textfile0.txt |
| simple-folder/simple-empty-folder |
| simple-folder/simple-folder1 |
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
Scenario Outline: Get the list of resources in the root folder with depth 1
Given using <dav_version> DAV path
When user "Alice" lists the resources in "/" with depth "1" using the WebDAV API
Then the HTTP status code should be "207"
And the last DAV response for user "Alice" should contain these nodes
| name |
| textfile0.txt |
| welcome.txt |
| simple-folder/ |
And the last DAV response for user "Alice" should not contain these nodes
| name |
| simple-folder/welcome.txt |
| simple-folder/textfile0.txt |
| simple-folder/simple-empty-folder |
| simple-folder/simple-folder1 |
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
@depthInfinityPropfindEnabled
Scenario Outline: Get the list of resources in the root folder with depth infinity
Given using <dav_version> DAV path
And the administrator has set depth_infinity_allowed to 1
When user "Alice" lists the resources in "/" with depth "infinity" using the WebDAV API
Then the HTTP status code should be "207"
And the last DAV response for user "Alice" should contain these nodes
| name |
| textfile0.txt |
| welcome.txt |
| simple-folder/ |
| simple-folder/textfile0.txt |
| simple-folder/welcome.txt |
| simple-folder/simple-empty-folder/ |
| simple-folder/simple-folder1/ |
| simple-folder/simple-folder1/simple-folder2 |
| simple-folder/simple-folder1/textfile0.txt |
| simple-folder/simple-folder1/welcome.txt |
| simple-folder/simple-folder1/simple-folder2/textfile0.txt |
| simple-folder/simple-folder1/simple-folder2/welcome.txt |
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
Scenario Outline: Get the list of resources in a folder with depth 0
Given using <dav_version> DAV path
When user "Alice" lists the resources in "/simple-folder" with depth "0" using the WebDAV API
Then the HTTP status code should be "207"
And the last DAV response for user "Alice" should contain these nodes
| name |
| simple-folder/ |
And the last DAV response for user "Alice" should not contain these nodes
| name |
| simple-folder/welcome.txt |
| simple-folder/textfile0.txt |
| simple-folder/simple-empty-folder |
| simple-folder/simple-folder1 |
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
Scenario Outline: Get the list of resources in a folder with depth 1
Given using <dav_version> DAV path
When user "Alice" lists the resources in "/simple-folder" with depth "1" using the WebDAV API
Then the HTTP status code should be "207"
And the last DAV response for user "Alice" should contain these nodes
| name |
| simple-folder/welcome.txt |
| simple-folder/textfile0.txt |
| simple-folder/simple-empty-folder |
| simple-folder/simple-folder1 |
And the last DAV response for user "Alice" should not contain these nodes
| name |
| simple-folder/simple-folder1/simple-folder2 |
| simple-folder/simple-folder1/textfile0.txt |
| simple-folder/simple-folder1/welcome.txt |
| simple-folder/simple-folder1/simple-folder2/textfile0.txt |
| simple-folder/simple-folder1/simple-folder2/welcome.txt |
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
@depthInfinityPropfindEnabled
Scenario Outline: Get the list of resources in a folder with depth infinity
Given using <dav_version> DAV path
And the administrator has set depth_infinity_allowed to 1
When user "Alice" lists the resources in "/simple-folder" with depth "infinity" using the WebDAV API
Then the HTTP status code should be "207"
And the last DAV response for user "Alice" should contain these nodes
| name |
| /simple-folder/textfile0.txt |
| /simple-folder/welcome.txt |
| /simple-folder/simple-folder1/ |
| simple-folder/simple-folder1/simple-folder2 |
| simple-folder/simple-folder1/textfile0.txt |
| simple-folder/simple-folder1/welcome.txt |
| simple-folder/simple-folder1/simple-folder2/textfile0.txt |
| simple-folder/simple-folder1/simple-folder2/welcome.txt |
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
Scenario Outline: Get the list of resources in a folder shared through public link with depth 0
Given using <dav_version> DAV path
And user "Alice" has created the following folders
| path |
| /simple-folder/simple-folder1/simple-folder2/simple-folder3 |
| /simple-folder/simple-folder1/simple-folder2/simple-folder3/simple-folder4 |
And user "Alice" has created a public link share of folder "simple-folder"
When the public lists the resources in the last created public link with depth "0" using the WebDAV API
Then the HTTP status code should be "207"
And the last public link DAV response should not contain these nodes
| name |
| /textfile0.txt |
| /welcome.txt |
| /simple-folder1/ |
| /simple-folder1/welcome.txt |
| /simple-folder1/simple-folder2 |
| /simple-folder1/textfile0.txt |
| /simple-folder1/simple-folder2/textfile0.txt |
| /simple-folder1/simple-folder2/welcome.txt |
| /simple-folder1/simple-folder2/simple-folder3 |
| /simple-folder1/simple-folder2/simple-folder3/simple-folder4 |
@notToImplementOnOCIS @issue-ocis-2079
Examples:
| dav_version |
| old |
Examples:
| dav_version |
| new |
Scenario Outline: Get the list of resources in a folder shared through public link with depth 1
Given using <dav_version> DAV path
And user "Alice" has created the following folders
| path |
| /simple-folder/simple-folder1/simple-folder2/simple-folder3 |
| /simple-folder/simple-folder1/simple-folder2/simple-folder3/simple-folder4 |
And user "Alice" has created a public link share of folder "simple-folder"
When the public lists the resources in the last created public link with depth "1" using the WebDAV API
Then the HTTP status code should be "207"
And the last public link DAV response should contain these nodes
| name |
| /textfile0.txt |
| /welcome.txt |
| /simple-folder1/ |
And the last public link DAV response should not contain these nodes
| name |
| /simple-folder1/simple-folder2/textfile0.txt |
| /simple-folder1/simple-folder2/welcome.txt |
| /simple-folder1/simple-folder2/simple-folder3 |
| /simple-folder1/welcome.txt |
| /simple-folder1/simple-folder2 |
| /simple-folder1/textfile0.txt |
| /simple-folder1/simple-folder2/simple-folder3/simple-folder4 |
@notToImplementOnOCIS @issue-ocis-2079
Examples:
| dav_version |
| old |
Examples:
| dav_version |
| new |
@depthInfinityPropfindEnabled
Scenario Outline: Get the list of resources in a folder shared through public link with depth infinity
Given using <dav_version> DAV path
And the administrator has set depth_infinity_allowed to 1
And user "Alice" has created the following folders
| path |
| /simple-folder/simple-folder1/simple-folder2/simple-folder3 |
| /simple-folder/simple-folder1/simple-folder2/simple-folder3/simple-folder4 |
And user "Alice" has created a public link share of folder "simple-folder"
When the public lists the resources in the last created public link with depth "infinity" using the WebDAV API
Then the HTTP status code should be "207"
And the last public link DAV response should contain these nodes
| name |
| /textfile0.txt |
| /welcome.txt |
| /simple-folder1/ |
| /simple-folder1/welcome.txt |
| /simple-folder1/simple-folder2 |
| /simple-folder1/textfile0.txt |
| /simple-folder1/simple-folder2/textfile0.txt |
| /simple-folder1/simple-folder2/welcome.txt |
| /simple-folder1/simple-folder2/simple-folder3 |
| /simple-folder1/simple-folder2/simple-folder3/simple-folder4 |
@notToImplementOnOCIS @issue-ocis-2079
Examples:
| dav_version |
| old |
Examples:
| dav_version |
| new |
Scenario Outline: Get the list of files in the trashbin with depth 0
Given using <dav_version> DAV path
And user "Alice" has deleted the following resources
| path |
| textfile0.txt |
| welcome.txt |
| simple-folder/ |
When user "Alice" lists the resources in the trashbin with depth "0" using the WebDAV API
Then the HTTP status code should be "207"
And the trashbin DAV response should not contain these nodes
| name |
| textfile0.txt |
| welcome.txt |
| simple-folder/ |
| simple-folder/textfile0.txt |
| simple-folder/welcome.txt |
| simple-folder/simple-folder1/textfile0.txt |
| simple-folder/simple-folder1/welcome.txt |
| simple-folder/simple-folder1/simple-folder2/textfile0.txt |
| simple-folder/simple-folder1/simple-folder2/welcome.txt |
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
Scenario Outline: Get the list of files in the trashbin with depth 1
Given using <dav_version> DAV path
And user "Alice" has deleted the following resources
| path |
| textfile0.txt |
| welcome.txt |
| simple-folder/ |
When user "Alice" lists the resources in the trashbin with depth "1" using the WebDAV API
Then the HTTP status code should be "207"
And the trashbin DAV response should contain these nodes
| name |
| textfile0.txt |
| welcome.txt |
| simple-folder/ |
And the trashbin DAV response should not contain these nodes
| name |
| simple-folder/textfile0.txt |
| simple-folder/welcome.txt |
| simple-folder/simple-folder1/textfile0.txt |
| simple-folder/simple-folder1/welcome.txt |
| simple-folder/simple-folder1/simple-folder2/textfile0.txt |
| simple-folder/simple-folder1/simple-folder2/welcome.txt |
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
@depthInfinityPropfindEnabled
Scenario Outline: Get the list of files in the trashbin with depth infinity
Given using <dav_version> DAV path
And the administrator has set depth_infinity_allowed to 1
And user "Alice" has deleted the following resources
| path |
| textfile0.txt |
| welcome.txt |
| simple-folder/ |
When user "Alice" lists the resources in the trashbin with depth "infinity" using the WebDAV API
Then the HTTP status code should be "207"
And the trashbin DAV response should contain these nodes
| name |
| textfile0.txt |
| welcome.txt |
| simple-folder/ |
| simple-folder/textfile0.txt |
| simple-folder/welcome.txt |
| simple-folder/simple-folder1/textfile0.txt |
| simple-folder/simple-folder1/welcome.txt |
| simple-folder/simple-folder1/simple-folder2/textfile0.txt |
| simple-folder/simple-folder1/simple-folder2/welcome.txt |
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
@depthInfinityPropfindDisabled
Scenario Outline: Get the list of resources in the root folder with depth infinity when depth infinity is not allowed
Given using <dav_version> DAV path
When user "Alice" lists the resources in "/" with depth "infinity" using the WebDAV API
Then the HTTP status code should be "412"
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
@depthInfinityPropfindDisabled
Scenario Outline: Get the list of resources in a folder shared through public link with depth infinity when depth infinity is not allowed
Given using <dav_version> DAV path
And user "Alice" has created the following folders
| path |
| /simple-folder/simple-folder1/simple-folder2/simple-folder3 |
| /simple-folder/simple-folder1/simple-folder2/simple-folder3/simple-folder4 |
And user "Alice" has created a public link share of folder "simple-folder"
When the public lists the resources in the last created public link with depth "infinity" using the WebDAV API
Then the HTTP status code should be "412"
@notToImplementOnOCIS @issue-ocis-2079
Examples:
| dav_version |
| old |
Examples:
| dav_version |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
@depthInfinityPropfindDisabled
Scenario Outline: Get the list of files in the trashbin with depth infinity when depth infinity is not allowed
Given using <dav_version> DAV path
And user "Alice" has deleted the following resources
| path |
| textfile0.txt |
| welcome.txt |
| simple-folder/ |
When user "Alice" lists the resources in the trashbin with depth "infinity" using the WebDAV API
Then the HTTP status code should be "412"
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
@@ -0,0 +1,50 @@
@api
Feature: PROPFIND
@issue-ocis-751
Scenario Outline: PROPFIND to "/remote.php/dav/(files|spaces)"
Given user "Alice" has been created with default attributes and without skeleton files
When user "Alice" requests "<dav_path>" with "PROPFIND" using basic auth
Then the HTTP status code should be "405"
Examples:
| dav_path |
| /remote.php/dav/files |
@skipOnOcV10 @personalSpace
Examples:
| dav_path |
| /remote.php/dav/spaces |
Scenario Outline: PROPFIND to "/remote.php/dav/(files|spaces)" with depth header
Given user "Alice" has been created with default attributes and without skeleton files
And the administrator has set depth_infinity_allowed to <depth_infinity_allowed>
When user "Alice" requests "<dav_path>" with "PROPFIND" using basic auth and with headers
| header | value |
| depth | <depth> |
Then the HTTP status code should be "<http_status>"
@notToImplementOnOCIS @depthInfinityPropfindEnabled
Examples:
| dav_path | depth_infinity_allowed | depth | http_status |
| /remote.php/dav/files/alice | 1 | 0 | 207 |
| /remote.php/dav/files/alice | 1 | infinity | 207 |
@notToImplementOnOCIS @depthInfinityPropfindDisabled
Examples:
| dav_path | depth_infinity_allowed | depth | http_status |
| /remote.php/dav/files/alice | 0 | 0 | 207 |
| /remote.php/dav/files/alice | 0 | infinity | 412 |
@skipOnOcV10 @depthInfinityPropfindEnabled
Examples:
| dav_path | depth_infinity_allowed | depth | http_status |
| /remote.php/dav/files/alice | 1 | 0 | 207 |
| /remote.php/dav/files/alice | 1 | infinity | 207 |
@skipOnOcV10 @personalSpace @depthInfinityPropfindDisabled
Examples:
| dav_path | depth_infinity_allowed | depth | http_status |
| /remote.php/dav/spaces/%spaceid% | 0 | 0 | 207 |
| /remote.php/dav/spaces/%spaceid% | 0 | infinity | 207 |
@skipOnOcV10 @personalSpace @depthInfinityPropfindEnabled
Examples:
| dav_path | depth_infinity_allowed | depth | http_status |
| /remote.php/dav/spaces/%spaceid% | 1 | 0 | 207 |
| /remote.php/dav/spaces/%spaceid% | 1 | infinity | 207 |
@@ -0,0 +1,41 @@
@api
Feature: refuse access
As an administrator
I want to refuse access to unauthenticated and disabled users
So that I can secure the system
Background:
Given using OCS API version "1"
@smokeTest
Scenario Outline: Unauthenticated call
# cannot perform with spaces WebDAV due to the absence of user
Given using <dav_version> DAV path
When an unauthenticated client connects to the DAV endpoint using the WebDAV API
Then the HTTP status code should be "401"
And there should be no duplicate headers
And the following headers should be set
| header | value |
| WWW-Authenticate | Basic realm="%productname%", charset="UTF-8" |
Examples:
| dav_version |
| old |
| new |
Scenario Outline: A disabled user cannot use webdav
Given using <dav_version> DAV path
And user "Alice" has been created with default attributes and without skeleton files
And user "Alice" has uploaded file "filesForUpload/textfile.txt" to "textfile0.txt"
And user "Alice" has been disabled
When user "Alice" downloads file "/textfile0.txt" using the WebDAV API
Then the HTTP status code should be "401"
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
@@ -0,0 +1,337 @@
@api @issue-ocis-reva-39
Feature: Search
As a user
I would like to be able to search for files
So that I can find needed files quickly
Background:
Given user "Alice" has been created with default attributes and without skeleton files
And user "Alice" has created folder "/just-a-folder"
And user "Alice" has created folder "/ näme"
And user "Alice" has created folder "/upload folder"
And user "Alice" has created folder "/upload😀 😁"
And user "Alice" has uploaded file with content "does-not-matter" to "/upload.txt"
And user "Alice" has uploaded file with content "does-not-matter" to "/a-image.png"
And user "Alice" has uploaded file with content "does-not-matter" to "/just-a-folder/upload.txt"
And user "Alice" has uploaded file with content "does-not-matter" to "/just-a-folder/lolol.txt"
And user "Alice" has uploaded file with content "does-not-matter" to "/just-a-folder/a-image.png"
And user "Alice" has uploaded file with content "does-not-matter" to "/just-a-folder/uploadÜिF.txt"
And user "Alice" has uploaded file with content "does-not-matter" to "/ näme/upload.txt"
And user "Alice" has uploaded file with content "does-not-matter" to "/ näme/a-image.png"
And user "Alice" has uploaded file with content "does-not-matter" to "/upload😀 😁/upload😀 😁.txt"
And user "Alice" has uploaded file with content "file with comma in filename" to "/upload😀 😁/upload,1.txt"
@smokeTest
Scenario Outline: search for entry by pattern
Given using <dav_version> DAV path
When user "Alice" searches for "upload" using the WebDAV API
Then the HTTP status code should be "207"
And the search result of user "Alice" should contain these entries:
| /upload.txt |
| /just-a-folder/upload.txt |
| /upload folder |
| /just-a-folder/uploadÜिF.txt |
| / näme/upload.txt |
| /upload😀 😁 |
| /upload😀 😁/upload😀 😁.txt |
| /upload😀 😁/upload,1.txt |
But the search result of user "Alice" should not contain these entries:
| /a-image.png |
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
Scenario Outline: search for entries by only some letters from the middle of the entry name
Given using <dav_version> DAV path
And user "Alice" has created folder "FOLDER"
When user "Alice" searches for "ol" using the WebDAV API
Then the HTTP status code should be "207"
And the search result should contain "4" entries
And the search result of user "Alice" should contain these entries:
| /just-a-folder |
| /upload folder |
| /FOLDER |
| /just-a-folder/lolol.txt |
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
Scenario Outline: search for files by extension
Given using <dav_version> DAV path
When user "Alice" searches for "png" using the WebDAV API
Then the HTTP status code should be "207"
And the search result of user "Alice" should contain these entries:
| /a-image.png |
| /just-a-folder/a-image.png |
| / näme/a-image.png |
But the search result of user "Alice" should not contain these entries:
| /upload.txt |
| /just-a-folder/upload.txt |
| /just-a-folder/uploadÜिF.txt |
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
Scenario Outline: search with empty field
Given using <dav_version> DAV path
When user "Alice" searches for "" using the WebDAV API
Then the HTTP status code should be "400"
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
Scenario Outline: limit returned search entries
Given using <dav_version> DAV path
When user "Alice" searches for "upload" and limits the results to "3" items using the WebDAV API
Then the HTTP status code should be "207"
And the search result of user "Alice" should contain any "3" of these entries:
| /just-a-folder/upload.txt |
| /just-a-folder/uploadÜिF.txt |
| /upload folder |
| /upload.txt |
| / näme/upload.txt |
| /upload😀 😁 |
| /upload😀 😁/upload😀 😁.txt |
| /upload😀 😁/upload,1.txt |
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
Scenario Outline: limit returned search entries to only 1 entry
Given using <dav_version> DAV path
When user "Alice" searches for "upload" and limits the results to "1" items using the WebDAV API
Then the HTTP status code should be "207"
And the search result of user "Alice" should contain any "1" of these entries:
| /just-a-folder/upload.txt |
| /just-a-folder/uploadÜिF.txt |
| /upload folder |
| /upload.txt |
| / näme/upload.txt |
| /upload😀 😁 |
| /upload😀 😁/upload😀 😁.txt |
| /upload😀 😁/upload,1.txt |
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
Scenario Outline: limit returned search entries to more entires than there are
Given using <dav_version> DAV path
When user "Alice" searches for "upload" and limits the results to "100" items using the WebDAV API
Then the HTTP status code should be "207"
And the search result should contain "8" entries
And the search result of user "Alice" should contain these entries:
| /upload.txt |
| /just-a-folder/upload.txt |
| /upload folder |
| /just-a-folder/uploadÜिF.txt |
| / näme/upload.txt |
| /upload😀 😁 |
| /upload😀 😁/upload😀 😁.txt |
| /upload😀 😁/upload,1.txt |
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
@issue-ocis-4712
Scenario Outline: report extra properties in search entries for a file
Given using <dav_version> DAV path
When user "Alice" searches for "upload" using the WebDAV API requesting these properties:
| oc:fileid |
| oc:permissions |
| a:getlastmodified |
| a:getetag |
| a:getcontenttype |
| oc:size |
| oc:owner-id |
| oc:owner-display-name |
Then the HTTP status code should be "207"
And file "/upload.txt" in the search result of user "Alice" should contain these properties:
| name | value |
| {http://owncloud.org/ns}fileid | \d* |
| {http://owncloud.org/ns}permissions | ^(RDNVW\|RMDNVW)$ |
| {DAV:}getlastmodified | ^[MTWFS][uedhfriatno]{2},\s(\d){2}\s[JFMAJSOND][anebrpyulgctov]{2}\s\d{4}\s\d{2}:\d{2}:\d{2} GMT$ |
| {DAV:}getetag | ^\"[a-f0-9:\.]{1,32}\"$ |
| {DAV:}getcontenttype | text\/plain |
| {http://owncloud.org/ns}size | 15 |
| {http://owncloud.org/ns}owner-id | %username% |
| {http://owncloud.org/ns}owner-display-name | %displayname% |
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
@issue-ocis-4712
Scenario Outline: report extra properties in search entries for a folder
Given using <dav_version> DAV path
When user "Alice" searches for "upload" using the WebDAV API requesting these properties:
| oc:fileid |
| oc:permissions |
| a:getlastmodified |
| a:getetag |
| a:getcontenttype |
| oc:size |
| oc:owner-id |
| oc:owner-display-name |
Then the HTTP status code should be "207"
And folder "/upload folder" in the search result of user "Alice" should contain these properties:
| name | value |
| {http://owncloud.org/ns}fileid | \d* |
| {http://owncloud.org/ns}permissions | ^(RDNVCK\|RMDNVCK)$ |
| {DAV:}getlastmodified | ^[MTWFS][uedhfriatno]{2},\s(\d){2}\s[JFMAJSOND][anebrpyulgctov]{2}\s\d{4}\s\d{2}:\d{2}:\d{2} GMT$ |
| {DAV:}getetag | ^\"[a-f0-9:\.]{1,32}\"$ |
| {http://owncloud.org/ns}size | 0 |
| {http://owncloud.org/ns}owner-id | %username% |
| {http://owncloud.org/ns}owner-display-name | %displayname% |
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
Scenario Outline: search for entry with emoji by pattern
Given using <dav_version> DAV path
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 these entries:
| /upload😀 😁 |
| /upload😀 😁/upload😀 😁.txt |
But the search result of user "Alice" should not contain these entries:
| /a-image.png |
| /upload.txt |
| /just-a-folder/upload.txt |
| /upload folder |
| /just-a-folder/uploadÜिF.txt |
| / näme/upload.txt |
Examples:
| dav_version |
| old |
| new |
@skipOnOcV10 @personalSpace
Examples:
| dav_version |
| spaces |
Scenario: search for entry by tags using REPORT method
Given user "Alice" has created a "normal" tag with name "JustARegularTag1"
And user "Alice" has created a "normal" tag with name "JustARegularTag2"
And user "Alice" has added tag "JustARegularTag1" to folder " näme"
And user "Alice" has added tag "JustARegularTag1" to file "upload.txt"
And user "Alice" has added tag "JustARegularTag2" to file "upload.txt"
When user "Alice" searches for resources tagged with tag "JustARegularTag1" using the webDAV API
Then the HTTP status code should be "207"
And the search result by tags for user "Alice" should contain these entries:
| näme |
| upload.txt |
When user "Alice" searches for resources tagged with tag "JustARegularTag2" using the webDAV API
Then the HTTP status code should be "207"
And the search result by tags for user "Alice" should contain these entries:
| upload.txt |
Scenario: share a tagged resource to another internal user and sharee searches for tag using REPORT method
Given user "Brian" has been created with default attributes and without skeleton files
And user "Alice" has created a "normal" tag with name "JustARegularTag1"
And user "Alice" has created a "normal" tag with name "JustARegularTag2"
And user "Alice" has added tag "JustARegularTag1" to folder " näme"
And user "Alice" has added tag "JustARegularTag1" to file "upload.txt"
And user "Alice" has added tag "JustARegularTag2" to file "upload.txt"
And user "Alice" has shared file " näme" with user "Brian"
And user "Alice" has shared file "upload.txt" with user "Brian"
When user "Brian" searches for resources tagged with tag "JustARegularTag1" using the webDAV API
Then the HTTP status code should be "207"
And the search result by tags for user "Brian" should contain these entries:
| näme |
| upload.txt |
When user "Brian" searches for resources tagged with tag "JustARegularTag2" using the webDAV API
Then the HTTP status code should be "207"
And the search result by tags for user "Brian" should contain these entries:
| upload.txt |
When user "Brian" searches for resources tagged with all of the following tags using the webDAV API
| JustARegularTag1 |
| JustARegularTag2 |
Then the HTTP status code should be "207"
And as user "Brian" the response should contain file "upload.txt"
And as user "Brian" the response should not contain file " näme"
Scenario: search for entries across various folders by tags using REPORT method
Given user "Alice" has created folder "/just-a-folder/inner-folder"
And user "Alice" has uploaded file with content "inner file" to "/just-a-folder/inner-folder/upload.txt"
And user "Alice" has created a "normal" tag with name "JustARegularTag1"
And user "Alice" has created a "normal" tag with name "JustARegularTag2"
And user "Alice" has added tag "JustARegularTag1" to folder "/just-a-folder/upload.txt"
And user "Alice" has added tag "JustARegularTag1" to file "/ näme/upload.txt"
And user "Alice" has added tag "JustARegularTag1" to file "/just-a-folder/inner-folder/upload.txt"
And user "Alice" has added tag "JustARegularTag2" to file "/upload😀 😁/upload,1.txt"
And user "Alice" has added tag "JustARegularTag2" to file "/upload.txt"
When user "Alice" searches for resources tagged with tag "JustARegularTag1" using the webDAV API
Then the HTTP status code should be "207"
And the search result by tags for user "Alice" should contain these entries:
| upload.txt |
| upload.txt |
| upload.txt |
When user "Alice" searches for resources tagged with tag "JustARegularTag2" using the webDAV API
Then the HTTP status code should be "207"
And the search result by tags for user "Alice" should contain these entries:
| upload,1.txt |
| upload.txt |