diff --git a/.drone.star b/.drone.star index 102c53b7c5..c11ead2c59 100644 --- a/.drone.star +++ b/.drone.star @@ -932,6 +932,8 @@ def localApiTestPipeline(ctx): return pipelines def localApiTests(suite, storage, extra_environment = {}): + expectedFailuresFile = "%s/tests/acceptance/expected-failures-localAPI-on-%s-storage.md" % (dirs["base"], storage.upper()) + environment = { "PATH_TO_OCIS": dirs["base"], "TEST_SERVER_URL": OCIS_URL, @@ -945,6 +947,7 @@ def localApiTests(suite, storage, extra_environment = {}): "EXPECTED_FAILURES_FILE": "%s/tests/acceptance/expected-failures-localAPI-on-%s-storage.md" % (dirs["base"], storage.upper()), "UPLOAD_DELETE_WAIT_TIME": "1" if storage == "owncloud" else 0, "OCIS_WRAPPER_URL": "http://ocis-server:5200", + "WITH_REMOTE_PHP": False, } for item in extra_environment: @@ -955,7 +958,9 @@ def localApiTests(suite, storage, extra_environment = {}): "image": OC_CI_PHP % DEFAULT_PHP_VERSION, "environment": environment, "commands": [ - "make test-acceptance-api", + "cat %s/tests/acceptance/expected-failures-without-remotephp.md >> %s" % (dirs["base"], expectedFailuresFile), + "make -C %s test-acceptance-api" % (dirs["base"]), + "cat %s" % expectedFailuresFile, ], }] @@ -1143,9 +1148,12 @@ def coreApiTests(ctx, part_number = 1, number_of_parts = 1, storage = "ocis", ac "EXPECTED_FAILURES_FILE": expectedFailuresFile, "UPLOAD_DELETE_WAIT_TIME": "1" if storage == "owncloud" else 0, "OCIS_WRAPPER_URL": "http://ocis-server:5200", + "WITH_REMOTE_PHP": False, }, "commands": [ + "cat %s/tests/acceptance/expected-failures-without-remotephp.md >> %s" % (dirs["base"], expectedFailuresFile), "make -C %s test-acceptance-api" % (dirs["base"]), + "cat %s" % expectedFailuresFile, ], }, ] + diff --git a/tests/acceptance/TestHelpers/HttpRequestHelper.php b/tests/acceptance/TestHelpers/HttpRequestHelper.php index 66bb859d62..f19b30472c 100644 --- a/tests/acceptance/TestHelpers/HttpRequestHelper.php +++ b/tests/acceptance/TestHelpers/HttpRequestHelper.php @@ -104,6 +104,27 @@ class HttpRequestHelper { $timeout ); } + + if (WebdavHelper::isDAVRequest($url) && \str_starts_with($url, OcisHelper::getServerUrl())) { + $withRemotePhp = \getenv("WITH_REMOTE_PHP") === "true"; + $urlHasRemotePhp = \str_contains($url, 'remote.php'); + if (!$withRemotePhp && $urlHasRemotePhp) { + throw new Exception("remote.php is disabled but found in the URL: $url"); + } + if ($withRemotePhp && !$urlHasRemotePhp) { + throw new Exception("remote.php is enabled but not found in the URL: $url"); + } + + if ($headers && \array_key_exists("Destination", $headers)) { + if (!$withRemotePhp && $urlHasRemotePhp) { + throw new Exception("remote.php is disabled but found in the URL: $url"); + } + if ($withRemotePhp && !$urlHasRemotePhp) { + throw new Exception("remote.php is enabled but not found in the URL: $url"); + } + } + } + $request = self::createRequest( $url, $xRequestId, diff --git a/tests/acceptance/TestHelpers/OcisHelper.php b/tests/acceptance/TestHelpers/OcisHelper.php index ca6d46d9ba..2aa14ad34a 100644 --- a/tests/acceptance/TestHelpers/OcisHelper.php +++ b/tests/acceptance/TestHelpers/OcisHelper.php @@ -33,6 +33,16 @@ use GuzzleHttp\Exception\GuzzleException; * @package TestHelpers */ class OcisHelper { + /** + * @return string + */ + public static function getServerUrl(): string { + if (\getenv('TEST_SERVER_URL')) { + return \getenv('TEST_SERVER_URL'); + } + return 'https://localhost:9200'; + } + /** * @return bool */ diff --git a/tests/acceptance/TestHelpers/UploadHelper.php b/tests/acceptance/TestHelpers/UploadHelper.php index ca8779215a..47849e7985 100644 --- a/tests/acceptance/TestHelpers/UploadHelper.php +++ b/tests/acceptance/TestHelpers/UploadHelper.php @@ -170,7 +170,7 @@ class UploadHelper extends Assert { if ($chunkingVersion === 2) { $source = $v2ChunksDestination . '/.file'; $headers['Destination'] = $baseUrl . "/" . - WebDavHelper::getDavPath($user, $davPathVersionToUse) . + WebDavHelper::getDavPath($davPathVersionToUse, $user) . $destination; $result = WebDavHelper::makeDavRequest( $baseUrl, diff --git a/tests/acceptance/TestHelpers/WebDavHelper.php b/tests/acceptance/TestHelpers/WebDavHelper.php index 6f182cad92..2078d42b8f 100644 --- a/tests/acceptance/TestHelpers/WebDavHelper.php +++ b/tests/acceptance/TestHelpers/WebDavHelper.php @@ -46,6 +46,30 @@ class WebDavHelper { */ public static array $spacesIdRef = []; + /** + * clear space id reference for user + * + * @param string $urlPath + * + * @return string + */ + public static function withRemotePhp(string $urlPath): string { + if (\getenv("WITH_REMOTE_PHP") === "true") { + return "remote.php/$urlPath"; + } + return $urlPath; + } + + /** + * @param string $url + * + * @return bool + */ + public static function isDAVRequest(string $url): bool { + $found = \preg_match("/(\bwebdav\b|\bdav\b)/", $url); + return (bool)$found; + } + /** * clear space id reference for user * @@ -534,7 +558,7 @@ class WebDavHelper { if ($json === null) { // the graph endpoint did not give a useful answer // try getting the information from the webdav endpoint - $fullUrl = $trimmedBaseUrl . '/remote.php/webdav'; + $fullUrl = "$trimmedBaseUrl/" . self::getDavPath(self::DAV_VERSION_NEW, $user); $response = HttpRequestHelper::sendRequest( $fullUrl, $xRequestId, @@ -702,12 +726,12 @@ class WebDavHelper { } // get space id if testing with spaces dav - if ($spaceId === null && $davPathVersionToUse === self::DAV_VERSION_SPACES) { + if ($spaceId === null && $davPathVersionToUse === self::DAV_VERSION_SPACES && !\in_array($type, ["public-files", "versions"])) { $path = \ltrim($path, "/"); if (\str_starts_with($path, "Shares/")) { $spaceId = self::getSharesSpaceIdForUser( $baseUrl, - $doDavRequestAsUser ?? $user, + $user, $password, $xRequestId ); @@ -715,14 +739,22 @@ class WebDavHelper { } else { $spaceId = self::getPersonalSpaceIdForUserOrFakeIfNotFound( $baseUrl, - $doDavRequestAsUser ?? $user, + $user, $password, $xRequestId ); } } - $davPath = self::getDavPath($doDavRequestAsUser ?? $user, $davPathVersionToUse, $type, $spaceId); + $uniquePath = $user; + if ($davPathVersionToUse === self::DAV_VERSION_SPACES && !\in_array($type, ["archive", "versions", "public-files"])) { + $uniquePath = $spaceId; + } elseif ($type === "versions") { + // $path is file-id in case of versions + $uniquePath = $path; + } + + $davPath = self::getDavPath($davPathVersionToUse, $uniquePath, $type); //replace %, # and ? and in the path, Guzzle will not encode them $urlSpecialChar = [['%', '#', '?'], ['%25', '%23', '%3F']]; @@ -732,14 +764,18 @@ class WebDavHelper { $urlParameter = \http_build_query($urlParameter, '', '&'); $path .= '?' . $urlParameter; } - $fullUrl = self::sanitizeUrl($baseUrl . "/$davPath" . $path); + $fullUrl = self::sanitizeUrl("{$baseUrl}/{$davPath}"); + // NOTE: no need to append path for archive and versions endpoints + if (!\in_array($type, ["archive", "versions"])) { + $fullUrl .= "/" . \ltrim($path, "/"); + } if ($authType === 'bearer') { $headers['Authorization'] = 'Bearer ' . $password; $user = null; $password = null; } - if ($type === "public-files-new") { + if ($type === "public-files") { if ($password === null || $password === "") { $user = null; } else { @@ -769,7 +805,7 @@ class WebDavHelper { $fullUrl, $xRequestId, $method, - $user, + $doDavRequestAsUser ?? $user, $password, $headers, $body, @@ -785,67 +821,66 @@ class WebDavHelper { /** * get the dav path * - * @param string|null $user - * @param int|null $davPathVersionToUse (1|2) + * @param int $davPathVersion (1|2|3) + * @param string|null $userOrItemIdOrSpaceIdOrToken 'user' or 'file-id' or 'space-id' or 'public-token' * @param string|null $type - * @param string|null $spaceId * * @return string */ public static function getDavPath( - ?string $user, - ?int $davPathVersionToUse = null, - ?string $type = "files", - ?string $spaceId = null + int $davPathVersion, + ?string $userOrItemIdOrSpaceIdOrToken = null, + ?string $type = "files" ):string { - $newTrashbinDavPath = "remote.php/dav/trash-bin/$user/"; - switch ($type) { - case 'public-files': - case 'public-files-old': - return "public.php/webdav/"; - case 'public-files-new': - return "remote.php/dav/public-files/$user/"; case 'archive': - return "remote.php/dav/archive/$user/files"; + return self::withRemotePhp("dav/archive/$userOrItemIdOrSpaceIdOrToken/files"); case 'versions': - case 'customgroups': - return "remote.php/dav/"; + return self::withRemotePhp("dav/meta/$userOrItemIdOrSpaceIdOrToken/v"); + case 'comments': + return self::withRemotePhp("dav/comments/files"); default: break; } - if ($davPathVersionToUse === self::DAV_VERSION_SPACES) { + if ($davPathVersion === self::DAV_VERSION_SPACES) { + if ($type === "trash-bin") { + if ($userOrItemIdOrSpaceIdOrToken === null) { + throw new InvalidArgumentException("Space ID is required for trash-bin endpoint"); + } + return self::withRemotePhp("dav/spaces/trash-bin/$userOrItemIdOrSpaceIdOrToken"); + } elseif ($type === "public-files") { + // spaces DAV path doesn't have own public-files endpoint + return self::withRemotePhp("dav/public-files/$userOrItemIdOrSpaceIdOrToken"); + } // return spaces root path if spaceid is null // REPORT request uses spaces root path - if ($spaceId === null) { - return "remote.php/dav/spaces/"; + if ($userOrItemIdOrSpaceIdOrToken === null) { + return self::withRemotePhp("dav/spaces"); } - if ($type === "trash-bin") { - return "remote.php/dav/spaces/trash-bin/" . $spaceId . '/'; - } - return "remote.php/dav/spaces/" . $spaceId . '/'; + return self::withRemotePhp("dav/spaces/$userOrItemIdOrSpaceIdOrToken"); } else { - if ($davPathVersionToUse === self::DAV_VERSION_OLD) { - if ($type === "trash-bin") { - // Since there is no trash bin endpoint for old dav version, new dav version's endpoint is used here. - return $newTrashbinDavPath; - } - return "remote.php/webdav/"; - } elseif ($davPathVersionToUse === self::DAV_VERSION_NEW) { - if ($type === "files") { - $path = 'remote.php/dav/files/'; - return $path . $user . '/'; - } elseif ($type === "trash-bin") { - return $newTrashbinDavPath; - } else { - return "remote.php/dav"; - } - } else { - throw new InvalidArgumentException( - "DAV path version $davPathVersionToUse is unknown" - ); + if ($type === "trash-bin") { + // Since there is no trash bin endpoint for old dav version, + // new dav version's endpoint is used here. + return self::withRemotePhp("dav/trash-bin/$userOrItemIdOrSpaceIdOrToken"); } + if ($davPathVersion === self::DAV_VERSION_OLD) { + if ($type === "public-files") { + // TODO: cleanup + // this endpoint does not exist + return self::withRemotePhp("public.php/webdav"); + } + return self::withRemotePhp("webdav"); + } elseif ($davPathVersion === self::DAV_VERSION_NEW) { + if ($type === "files") { + return self::withRemotePhp("dav/files/$userOrItemIdOrSpaceIdOrToken"); + } elseif ($type === "public-files") { + return self::withRemotePhp("dav/public-files/$userOrItemIdOrSpaceIdOrToken"); + } + return self::withRemotePhp("dav"); + } + throw new InvalidArgumentException("Invalid DAV path: $davPathVersion"); } } @@ -917,12 +952,12 @@ class WebDavHelper { $baseUrl, null, null, - "/public-files/$token/$fileName", + "{$token}/{$fileName}", ['d:getlastmodified'], $xRequestId, '1', null, - null, + "public-files", $davVersionToUse ); $responseXmlObject = HttpRequestHelper::getResponseXml( diff --git a/tests/acceptance/bootstrap/ArchiverContext.php b/tests/acceptance/bootstrap/ArchiverContext.php index 6e3146f144..48f15eaf50 100644 --- a/tests/acceptance/bootstrap/ArchiverContext.php +++ b/tests/acceptance/bootstrap/ArchiverContext.php @@ -60,6 +60,15 @@ class ArchiverContext implements Context { $this->featureContext = BehatHelper::getContext($scope, $environment, 'FeatureContext'); } + /** + * @param string $query + * + * @return string + */ + public function getArchiverUrl(string $query): string { + return $this->featureContext->getBaseUrl() . '/archiver?' . $query; + } + /** * @param string $type * @@ -203,7 +212,7 @@ class ArchiverContext implements Context { $queryString .= '&output-format=' . $archiveType; } return HttpRequestHelper::get( - $this->featureContext->getBaseUrl() . '/archiver?' . $queryString, + $this->getArchiverUrl($queryString), $this->featureContext->getStepLineRef(), $downloader, $this->featureContext->getPasswordForUser($downloader), @@ -215,8 +224,8 @@ class ArchiverContext implements Context { * @When user :user downloads the archive of these items using the resource :addressType * * @param string $user - * @param TableNode $items * @param string $addressType ids|paths + * @param TableNode $items * * @return void * @@ -224,19 +233,19 @@ class ArchiverContext implements Context { */ public function userDownloadsTheArchiveOfTheseItems( string $user, - TableNode $items, - string $addressType + string $addressType, + TableNode $items ): void { $user = $this->featureContext->getActualUsername($user); - $queryString = ''; + $queryString = []; foreach ($items->getRows() as $item) { - $queryString .= $this->getArchiverQueryString($user, $item[0], $addressType) . '&'; + $queryString[] = $this->getArchiverQueryString($user, $item[0], $addressType); } + $queryString = \join('&', $queryString); - $queryString = \rtrim($queryString, '&'); $this->featureContext->setResponse( HttpRequestHelper::get( - $this->featureContext->getBaseUrl() . '/archiver?' . $queryString, + $this->getArchiverUrl($queryString), $this->featureContext->getStepLineRef(), $user, $this->featureContext->getPasswordForUser($user), diff --git a/tests/acceptance/bootstrap/AuthContext.php b/tests/acceptance/bootstrap/AuthContext.php index 41ffe10867..ab4358568b 100644 --- a/tests/acceptance/bootstrap/AuthContext.php +++ b/tests/acceptance/bootstrap/AuthContext.php @@ -75,8 +75,16 @@ class AuthContext implements Context { ?string $body = null, ?array $headers = [] ): ResponseInterface { - $fullUrl = $this->featureContext->getBaseUrl() . $url; - + // NOTE: preserving '/' for tests with special cases + // E.g: coreApiAuth/webDavSpecialURLs.feature + $url = \substr($url, 1); + $trimmedUrl = \ltrim($url, '/'); + $slashCount = \strlen($url) - \strlen($trimmedUrl); + if (WebdavHelper::isDAVRequest($url)) { + $url = WebdavHelper::withRemotePhp($trimmedUrl); + } + $url = \str_repeat("/", $slashCount) . $url; + $fullUrl = $this->featureContext->getBaseUrl() . "/$url"; return HttpRequestHelper::sendRequest( $fullUrl, $this->featureContext->getStepLineRef(), @@ -391,10 +399,11 @@ class AuthContext implements Context { $ofUser ); if (isset($row['destination'])) { - $headers['Destination'] = $this->featureContext->substituteInLineCodes( - $this->featureContext->getBaseUrl() . $row['destination'], + $destination = $this->featureContext->substituteInLineCodes( + $row['destination'], $ofUser ); + $headers['Destination'] = $this->featureContext->getBaseUrl() . "/" . WebdavHelper::withRemotePhp(\ltrim($destination, "/")); } $response = $this->sendRequest( $row['endpoint'], @@ -440,10 +449,11 @@ class AuthContext implements Context { $ofUser ); if (isset($row['destination'])) { - $headers['Destination'] = $this->featureContext->substituteInLineCodes( - $this->featureContext->getBaseUrl() . $row['destination'], + $destination = $this->featureContext->substituteInLineCodes( + $row['destination'], $ofUser ); + $headers['Destination'] = $this->featureContext->getBaseUrl() . "/" . WebdavHelper::withRemotePhp(\ltrim($destination, "/")); } $response = $this->sendRequest( $row['endpoint'], @@ -583,10 +593,10 @@ class AuthContext implements Context { $baseUrl = $this->featureContext->getBaseUrl(); $suffix = ""; if ($this->featureContext->getDavPathVersion() === WebDavHelper::DAV_VERSION_SPACES) { - $suffix = $this->featureContext->spacesContext->getSpaceIdByName($user, "Personal") . "/"; + $suffix = $this->featureContext->spacesContext->getSpaceIdByName($user, "Personal"); } - $davPath = WebDavHelper::getDavPath($user, $this->featureContext->getDavPathVersion()); - $headers['Destination'] = "{$baseUrl}/{$davPath}{$suffix}moved"; + $davPath = WebDavHelper::getDavPath($this->featureContext->getDavPathVersion(), $user); + $headers['Destination'] = "{$baseUrl}/{$davPath}/{$suffix}/moved"; } foreach ($table->getHash() as $row) { @@ -625,7 +635,11 @@ class AuthContext implements Context { $endpoint, $username ); - $fullUrl = $this->featureContext->getBaseUrl() . $endpoint; + $endpoint = \ltrim($endpoint, '/'); + if (WebdavHelper::isDAVRequest($endpoint)) { + $endpoint = WebdavHelper::withRemotePhp($endpoint); + } + $fullUrl = $this->featureContext->getBaseUrl() . "/$endpoint"; $response = HttpRequestHelper::sendRequestOnce( $fullUrl, $this->featureContext->getStepLineRef(), diff --git a/tests/acceptance/bootstrap/CollaborationContext.php b/tests/acceptance/bootstrap/CollaborationContext.php index 0fdf4242a5..d3487dd969 100644 --- a/tests/acceptance/bootstrap/CollaborationContext.php +++ b/tests/acceptance/bootstrap/CollaborationContext.php @@ -150,9 +150,10 @@ class CollaborationContext implements Context { */ public function createFile(string $file, string $password, string $folder = ""): void { $token = $this->featureContext->shareNgGetLastCreatedLinkShareToken(); - $davPath = WebDavHelper::getDavPath($token, null, "public-files-new") . "/$folder"; + $baseUrl = $this->featureContext->getBaseUrl(); + $davPath = WebDavHelper::getDavPath(WebDavHelper::DAV_VERSION_NEW, $token, "public-files"); $response = HttpRequestHelper::sendRequest( - $this->featureContext->getBaseUrl() . "/$davPath", + "$baseUrl/$davPath/$folder", $this->featureContext->getStepLineRef(), "PROPFIND", "public", diff --git a/tests/acceptance/bootstrap/FeatureContext.php b/tests/acceptance/bootstrap/FeatureContext.php index 0b30bf6497..ddfc13f45b 100644 --- a/tests/acceptance/bootstrap/FeatureContext.php +++ b/tests/acceptance/bootstrap/FeatureContext.php @@ -492,8 +492,7 @@ class FeatureContext extends BehatVariablesContext { $this->alternateAdminPassword = "IHave99LotsOfPriv"; $this->publicLinkSharePassword = "publicPwd:1"; - // in case of CI deployment we take the server url from the environment - $testServerUrl = \getenv('TEST_SERVER_URL'); + $testServerUrl = OcisHelper::getServerUrl(); if ($testServerUrl !== false) { $this->baseUrl = \rtrim($testServerUrl, '/'); $this->localBaseUrl = $this->baseUrl; @@ -808,15 +807,6 @@ class FeatureContext extends BehatVariablesContext { return \ltrim($this->getBasePath() . "/ocs/v$ocsApiVersion.php", "/"); } - /** - * returns the complete DAV path including the base path e.g. owncloud-core/remote.php/dav - * - * @return string - */ - public function getDAVPathIncludingBasePath(): string { - return \ltrim($this->getBasePath() . "/" . $this->getDavPath(), "/"); - } - /** * returns the base URL but without "http(s)://" in front of it * @@ -1339,8 +1329,8 @@ class FeatureContext extends BehatVariablesContext { */ public function userSendsHTTPMethodToUrl(string $user, string $verb, string $url): void { $user = $this->getActualUsername($user); - $url = $this->substituteInLineCodes($url, $user); - $this->setResponse($this->sendingToWithDirectUrl($user, $verb, $url)); + $endpoint = $this->substituteInLineCodes($url, $user); + $this->setResponse($this->sendingToWithDirectUrl($user, $verb, $endpoint)); } /** @@ -1458,7 +1448,11 @@ class FeatureContext extends BehatVariablesContext { * @throws GuzzleException */ public function sendingToWithDirectUrl(string $user, string $verb, string $url, ?string $body = null, ?string $password = null, ?array $headers = null): ResponseInterface { - $fullUrl = $this->getBaseUrl() . $url; + $url = \ltrim($url, '/'); + if (WebdavHelper::isDAVRequest($url)) { + $url = WebdavHelper::withRemotePhp($url); + } + $fullUrl = $this->getBaseUrl() . "/$url"; if ($password === null) { $password = $this->getPasswordForUser($user); @@ -1947,8 +1941,6 @@ class FeatureContext extends BehatVariablesContext { } } - // TODO do similar for other usernames for e.g. %regularuser% or %test-user-1% - /** * @param string|null $functionalUsername * @@ -2119,7 +2111,8 @@ class FeatureContext extends BehatVariablesContext { */ public function getCommentUrlRegExp(): string { $basePath = \ltrim($this->getBasePath() . "/", "/"); - return "/{$basePath}remote.php/dav/comments/files/([0-9]+)"; + $commentsPath = WebDAVHelper::getDavPath(WebDavHelper::DAV_VERSION_NEW, null, "comments"); + return "/{$basePath}/{$commentsPath}/([0-9]+)"; } /** @@ -2226,14 +2219,6 @@ class FeatureContext extends BehatVariablesContext { ], "parameter" => [] ], - [ - "code" => "%dav_path%", - "function" => [ - $this, - "getDAVPathIncludingBasePath" - ], - "parameter" => [] - ], [ "code" => "%ocs_path_v1%", "function" => [ diff --git a/tests/acceptance/bootstrap/FilesVersionsContext.php b/tests/acceptance/bootstrap/FilesVersionsContext.php index 7c71b65e2f..ed66e4ffe5 100644 --- a/tests/acceptance/bootstrap/FilesVersionsContext.php +++ b/tests/acceptance/bootstrap/FilesVersionsContext.php @@ -37,15 +37,6 @@ require_once 'bootstrap.php'; class FilesVersionsContext implements Context { private FeatureContext $featureContext; - /** - * @param string $fileId - * - * @return string - */ - private function getVersionsPathForFileId(string $fileId):string { - return "/meta/$fileId/v"; - } - /** * @When user :user tries to get versions of file :file from :fileOwner * @@ -74,26 +65,26 @@ class FilesVersionsContext implements Context { } /** - * @When the public tries to get the number of versions of file :file with password :password using file-id path :endpoint + * @When the public tries to get the number of versions of file :file with password :password using file-id :endpoint * * @param string $file * @param string $password - * @param string $endpoint + * @param string $fileId * * @return void */ - public function thePublicGetsTheNumberOfVersionsOfFileWithPasswordUsingFileIdPath(string $file, string $password, string $endpoint): void { + public function thePublicTriesToGetTheNumberOfVersionsOfFileWithPasswordUsingFileId(string $file, string $password, string $fileId): void { $password = $this->featureContext->getActualPassword($password); $this->featureContext->setResponse( $this->featureContext->makeDavRequest( "public", "PROPFIND", - $endpoint, + $fileId, null, null, null, "versions", - (string)$this->featureContext->getDavPathVersion(), + $this->featureContext->getDavPathVersion(), false, $password ) @@ -123,35 +114,33 @@ class FilesVersionsContext implements Context { return $this->featureContext->makeDavRequest( $user, "PROPFIND", - $this->getVersionsPathForFileId($fileId), + $fileId, null, null, $spaceId, - null, - '2' + "versions" ); } /** - * @When user :user gets the number of versions of file :resource using file-id path :endpoint - * @When user :user tries to get the number of versions of file :resource using file-id path :endpoint + * @When user :user gets the number of versions of file :resource using file-id :fileId + * @When user :user tries to get the number of versions of file :resource using file-id :fileId * * @param string $user - * @param string $endpoint + * @param string $fileId * * @return void */ - public function userGetsTheNumberOfVersionsOfFileOfTheSpace(string $user, string $endpoint):void { + public function userGetsTheNumberOfVersionsOfFileOfTheSpace(string $user, string $fileId):void { $this->featureContext->setResponse( $this->featureContext->makeDavRequest( $user, "PROPFIND", - $endpoint, + $fileId, null, null, null, - "versions", - (string)$this->featureContext->getDavPathVersion() + "versions" ) ); } @@ -190,12 +179,11 @@ class FilesVersionsContext implements Context { return $this->featureContext->makeDavRequest( $user, "PROPFIND", - $this->getVersionsPathForFileId($fileId), + $fileId, null, $body, null, - null, - '2' + "versions", ); } @@ -219,7 +207,7 @@ class FilesVersionsContext implements Context { $xmlPart = $responseXml->xpath("//d:response/d:href"); //restoring the version only works with DAV path v2 $destinationUrl = $this->featureContext->getBaseUrl() . "/" . - WebDavHelper::getDavPath($user, 2) . \trim($path, "/"); + WebDavHelper::getDavPath(WebDavHelper::DAV_VERSION_NEW, $user) . \trim($path, "/"); $fullUrl = $this->featureContext->getBaseUrlWithoutPath() . $xmlPart[$versionIndex]; return HttpRequestHelper::sendRequest( @@ -306,7 +294,7 @@ class FilesVersionsContext implements Context { ):void { $user = $this->featureContext->getActualUsername($user); $fileId = $this->featureContext->getFileIdForPath($user, $path); - Assert::assertNotNull($fileId, __METHOD__ . " file '$path' for user '$user' not found (the file may not exist)"); + Assert::assertNotNull($fileId, __METHOD__ . ". file '$path' for user '$user' not found (the file may not exist)"); $this->assertFileVersionsCount($user, $fileId, $count); } @@ -548,7 +536,7 @@ class FilesVersionsContext implements Context { $this->featureContext->getBaseUrl(), $user, $password, - $this->getVersionsPathForFileId($fileId), + $fileId, $properties, $this->featureContext->getStepLineRef(), (string) $folderDepth, diff --git a/tests/acceptance/bootstrap/GraphContext.php b/tests/acceptance/bootstrap/GraphContext.php index e6db73a4bb..95d945d7fd 100644 --- a/tests/acceptance/bootstrap/GraphContext.php +++ b/tests/acceptance/bootstrap/GraphContext.php @@ -52,48 +52,6 @@ class GraphContext implements Context { $this->spacesContext = BehatHelper::getContext($scope, $environment, 'SpacesContext'); } - /** - * @param string $user - * @param string|null $userName - * @param string|null $password - * @param string|null $email - * @param string|null $displayName - * @param string|null $requester - * @param string|null $requesterPassword - * - * @return void - * @throws JsonException - * @throws GuzzleException - */ - public function userHasBeenEditedUsingTheGraphApi( - string $user, - ?string $userName = null, - ?string $password = null, - ?string $email = null, - ?string $displayName = null, - ?string $requester = null, - ?string $requesterPassword = null - ): void { - if (!$requester) { - $requester = $this->featureContext->getAdminUsername(); - $requesterPassword = $this->featureContext->getAdminPassword(); - } - $userId = $this->featureContext->getAttributeOfCreatedUser($user, 'id'); - $response = GraphHelper::editUser( - $this->featureContext->getBaseUrl(), - $this->featureContext->getStepLineRef(), - $requester, - $requesterPassword, - $userId, - $userName, - $password, - $email, - $displayName - ); - $this->featureContext->setResponse($response); - $this->featureContext->theHttpStatusCodeShouldBe(200); // TODO 204 when prefer=minimal header was sent - } - /** * @When /^the user "([^"]*)" changes the email of user "([^"]*)" to "([^"]*)" using the Graph API$/ * @When /^the user "([^"]*)" tries to change the email of user "([^"]*)" to "([^"]*)" using the Graph API$/ diff --git a/tests/acceptance/bootstrap/OcmContext.php b/tests/acceptance/bootstrap/OcmContext.php index edda80a492..725664f162 100644 --- a/tests/acceptance/bootstrap/OcmContext.php +++ b/tests/acceptance/bootstrap/OcmContext.php @@ -56,7 +56,7 @@ class OcmContext implements Context { * @return string */ public function getOcisDomain(): string { - return $this->extractDomain(\getenv('TEST_SERVER_URL')); + return $this->extractDomain(OcisHelper::getServerUrl()); } /** diff --git a/tests/acceptance/bootstrap/PublicWebDavContext.php b/tests/acceptance/bootstrap/PublicWebDavContext.php index 2bdfaa5a88..d016f6e5b5 100644 --- a/tests/acceptance/bootstrap/PublicWebDavContext.php +++ b/tests/acceptance/bootstrap/PublicWebDavContext.php @@ -37,6 +37,20 @@ require_once 'bootstrap.php'; class PublicWebDavContext implements Context { private FeatureContext $featureContext; + /** + * @param string $versionString (old|new) + * + * @return int + */ + public function getPublicDavVersion(string $versionString): int { + if ($versionString === "old") { + return WebDavHelper::DAV_VERSION_OLD; + } elseif ($versionString === "new") { + return WebDavHelper::DAV_VERSION_NEW; + } + throw new Exception("Unknown public WebDAV version: $versionString"); + } + /** * @param string $range ignore if empty * @param string $publicWebDAVAPIVersion @@ -128,15 +142,15 @@ class PublicWebDavContext implements Context { * * @return ResponseInterface */ - public function deleteFileFromPublicShare(string $fileName, string $password = ""):ResponseInterface { + public function deleteFileFromPublicShare(string $fileName, string $password = ""): ResponseInterface { $token = ($this->featureContext->isUsingSharingNG()) ? $this->featureContext->shareNgGetLastCreatedLinkShareToken() : $this->featureContext->getLastCreatedPublicShareToken(); $davPath = WebDavHelper::getDavPath( + $this->getPublicDavVersion("new"), $token, - 0, - "public-files-new" + "public-files" ); $password = $this->featureContext->getActualPassword($password); - $fullUrl = $this->featureContext->getBaseUrl() . "/$davPath$fileName"; + $fullUrl = $this->featureContext->getBaseUrl() . "/$davPath/$fileName"; $userName = $this->getUsernameForPublicWebdavApi( $token, $password, @@ -211,13 +225,13 @@ class PublicWebDavContext implements Context { public function renameFileFromPublicShare(string $fileName, string $toFileName, string $publicWebDAVAPIVersion, ?string $password = ""):ResponseInterface { $token = ($this->featureContext->isUsingSharingNG()) ? $this->featureContext->shareNgGetLastCreatedLinkShareToken() : $this->featureContext->getLastCreatedPublicShareToken(); $davPath = WebDavHelper::getDavPath( + $this->getPublicDavVersion($publicWebDAVAPIVersion), $token, - 0, - "public-files-$publicWebDAVAPIVersion" + "public-files" ); - $fullUrl = $this->featureContext->getBaseUrl() . "/$davPath$fileName"; + $fullUrl = $this->featureContext->getBaseUrl() . "/$davPath/$fileName"; $password = $this->featureContext->getActualPassword($password); - $destination = $this->featureContext->getBaseUrl() . "/$davPath$toFileName"; + $destination = $this->featureContext->getBaseUrl() . "/$davPath/$toFileName"; $userName = $this->getUsernameForPublicWebdavApi( $token, $password, @@ -326,14 +340,14 @@ class PublicWebDavContext implements Context { $token = ($this->featureContext->isUsingSharingNG()) ? $this->featureContext->shareNgGetLastCreatedLinkShareToken() : $this->featureContext->getLastCreatedPublicShareToken(); $davPath = WebDavHelper::getDavPath( + $this->featureContext->getDavPathVersion(), $token, - 0, - "public-files-new" + "public-files" ); $username = $this->featureContext->getActualUsername($user); $password = $this->featureContext->getPasswordForUser($user); - $fullUrl = $this->featureContext->getBaseUrl() . "/$davPath$path"; + $fullUrl = $this->featureContext->getBaseUrl() . "/$davPath/$path"; return HttpRequestHelper::get( $fullUrl, @@ -366,11 +380,11 @@ class PublicWebDavContext implements Context { $token = $this->featureContext->getLastCreatedPublicShareToken(); } $davPath = WebDavHelper::getDavPath( + $this->getPublicDavVersion($publicWebDAVAPIVersion), $token, - 0, - "public-files-$publicWebDAVAPIVersion" + "public-files" ); - $fullUrl = $this->featureContext->getBaseUrl() . "/$davPath$path"; + $fullUrl = $this->featureContext->getBaseUrl() . "/$davPath/$path"; $userName = $this->getUsernameForPublicWebdavApi( $token, $password, @@ -442,9 +456,9 @@ class PublicWebDavContext implements Context { string $source, string $destination ):ResponseInterface { - $fullSourceUrl = $baseUrl . $source; + $fullSourceUrl = "$baseUrl/$source"; $fullDestUrl = WebDavHelper::sanitizeUrl( - $baseUrl . $destination + "$baseUrl/$destination" ); $headers["Destination"] = $fullDestUrl; @@ -470,9 +484,9 @@ class PublicWebDavContext implements Context { public function thePublicCopiesFileUsingTheWebDAVApi(string $source, string $destination, string $publicWebDAVAPIVersion):void { $token = ($this->featureContext->isUsingSharingNG()) ? $this->featureContext->shareNgGetLastCreatedLinkShareToken() : $this->featureContext->getLastCreatedPublicShareToken(); $davPath = WebDavHelper::getDavPath( + $this->getPublicDavVersion($publicWebDAVAPIVersion), $token, - 0, - "public-files-$publicWebDAVAPIVersion" + "public-files" ); $baseUrl = $this->featureContext->getLocalBaseUrl() . '/' . $davPath; @@ -674,46 +688,18 @@ class PublicWebDavContext implements Context { } /** - * @param string $filename target file name - * @param string $body content to upload - * @param string $publicWebDAVAPIVersion - * - * @return ResponseInterface - */ - public function publiclyUploadingContent( - string $filename, - string $body = 'test', - string $publicWebDAVAPIVersion = "old" - ):ResponseInterface { - return $this->publicUploadContent( - $filename, - '', - $body, - false, - [], - $publicWebDAVAPIVersion - ); - } - - /** - * @When /^the public uploads file "([^"]*)" with content "([^"]*)" using the (old|new) public WebDAV API$/ + * @When /^the public uploads file "([^"]*)" with content "([^"]*)" using the (?:old|new) public WebDAV API$/ * * @param string $filename target file name * @param string $body content to upload - * @param string $publicWebDAVAPIVersion * * @return void */ public function thePublicUploadsFileWithContentUsingThePublicWebDavApi( string $filename, - string $body = 'test', - string $publicWebDAVAPIVersion = "old" + string $body = 'test' ):void { - $response = $this->publiclyUploadingContent( - $filename, - $body, - $publicWebDAVAPIVersion - ); + $response = $this->publicUploadContent($filename, '', $body); $this->featureContext->setResponse($response); $this->featureContext->pushToLastStatusCodesArrays(); } @@ -723,20 +709,11 @@ class PublicWebDavContext implements Context { * * @param string $filename target file name * @param string $body content to upload - * @param string $publicWebDAVAPIVersion * * @return void */ - public function thePublicHasUploadedFileWithContentUsingThePublicWebDavApi( - string $filename, - string $body = 'test', - string $publicWebDAVAPIVersion = "old" - ):void { - $response = $this->publiclyUploadingContent( - $filename, - $body, - $publicWebDAVAPIVersion - ); + public function thePublicHasUploadedFileWithContent(string $filename, string $body): void { + $response = $this->publicUploadContent($filename, '', $body); $this->featureContext->theHTTPStatusCodeShouldBe([201, 204], "", $response); } @@ -1205,14 +1182,6 @@ class PublicWebDavContext implements Context { $publicWebDAVAPIVersion, $shareNg ); - - $responseContent = $response->getBody()->getContents(); - \libxml_use_internal_errors(true); - Assert::assertNotFalse( - \simplexml_load_string($responseContent), - "response body is not valid XML, maybe download did work\n" . - "response body: \n$responseContent\n" - ); $this->featureContext->theHTTPStatusCodeShouldBe($expectedHttpCode, "", $response); } @@ -1575,11 +1544,11 @@ class PublicWebDavContext implements Context { ):ResponseInterface { $token = ($this->featureContext->isUsingSharingNG()) ? $this->featureContext->shareNgGetLastCreatedLinkShareToken() : $this->featureContext->getLastCreatedPublicShareToken(); $davPath = WebDavHelper::getDavPath( + $this->featureContext->getDavPathVersion(), $token, - 0, - "public-files-new" + "public-files" ); - $url = $this->featureContext->getBaseUrl() . "/$davPath"; + $url = $this->featureContext->getBaseUrl() . "/$davPath/"; $password = $this->featureContext->getActualPassword($password); $userName = $this->getUsernameForPublicWebdavApi( $token, @@ -1731,11 +1700,10 @@ class PublicWebDavContext implements Context { $token = $this->featureContext->getLastCreatedPublicShareToken(); } $davPath = WebDavHelper::getDavPath( + $this->getPublicDavVersion("new"), $token, - 0, - "public-files-new" + "public-files" ); - $url = $this->featureContext->getBaseUrl() . "/$davPath"; $userName = $this->getUsernameForPublicWebdavApi( $token, $password, @@ -1746,7 +1714,8 @@ class PublicWebDavContext implements Context { '/', \array_map('rawurlencode', \explode('/', $filename)) ); - $url .= \ltrim($filename, '/'); + $encodedFilePath = \ltrim($filename, '/'); + $url = $this->featureContext->getBaseUrl() . "/$davPath/$encodedFilePath"; // Trim any "/" from the end. For example, if we are putting content to a // single file that has been shared with a link, then the URL should end // with the link token and no "/" at the end. @@ -1836,9 +1805,9 @@ class PublicWebDavContext implements Context { } $token = ($this->featureContext->isUsingSharingNG()) ? $this->featureContext->shareNgGetLastCreatedLinkShareToken() : $this->featureContext->getLastCreatedPublicShareToken(); $davPath = WebDavHelper::getDavPath( - null, - null, - "public-files-$publicWebDAVAPIVersion" + $this->getPublicDavVersion($publicWebDAVAPIVersion), + $token, + "public-files" ); $password = $this->featureContext->getActualPassword($password); $username = $this->getUsernameForPublicWebdavApi( @@ -1846,7 +1815,7 @@ class PublicWebDavContext implements Context { $password, $publicWebDAVAPIVersion ); - $fullUrl = $this->featureContext->getBaseUrl() . "/$davPath$token"; + $fullUrl = $this->featureContext->getBaseUrl() . "/$davPath"; $response = HttpRequestHelper::sendRequest( $fullUrl, $this->featureContext->getStepLineRef(), diff --git a/tests/acceptance/bootstrap/SearchContext.php b/tests/acceptance/bootstrap/SearchContext.php index dcec6458d8..f5d1c864d4 100644 --- a/tests/acceptance/bootstrap/SearchContext.php +++ b/tests/acceptance/bootstrap/SearchContext.php @@ -103,16 +103,15 @@ class SearchContext implements Context { $body .= " "; } $body .= " "; + $davPathVersionToUse = $this->featureContext->getDavPathVersion(); - $davPath = WebDavHelper::getDavPath($doDavRequestAsUser ?? $user, $davPathVersionToUse, 'files', null); - - if ($davPathVersionToUse == WebDavHelper::DAV_VERSION_NEW) { - // Removes the last component('username' in this case) from the WebDAV path by going up one level in the directory structure. - // e.g. remote.php/dav/files/Alice ==> remote.php/dav/files/ - $davPath = \dirname($davPath, 1); - } - + // $davPath will be one of the followings: + // - webdav + // - dav/files + // - dav/spaces + $davPath = WebDavHelper::getDavPath($davPathVersionToUse); $fullUrl = WebDavHelper::sanitizeUrl("$baseUrl/$davPath"); + return HttpRequestHelper::sendRequest( $fullUrl, $this->featureContext->getStepLineRef(), diff --git a/tests/acceptance/bootstrap/Sharing.php b/tests/acceptance/bootstrap/Sharing.php index 096a098f41..c7f57f0a78 100755 --- a/tests/acceptance/bootstrap/Sharing.php +++ b/tests/acceptance/bootstrap/Sharing.php @@ -31,6 +31,7 @@ use TestHelpers\OcsApiHelper; use TestHelpers\SharingHelper; use TestHelpers\HttpRequestHelper; use TestHelpers\TranslationHelper; +use TestHelpers\WebDavHelper; use GuzzleHttp\Exception\GuzzleException; /** @@ -3245,8 +3246,9 @@ trait Sharing { * @return ResponseInterface */ public function getPublicPreviewOfFile(string $fileName, string $token):ResponseInterface { - $url = $this->getBaseUrl() . - "/remote.php/dav/public-files/$token/$fileName?preview=1"; + $baseUrl = $this->getBaseUrl(); + $davPath = WebdavHelper::getDavPath($this->getDavPathVersion(), $token, "public-files"); + $url = "{$baseUrl}/{$davPath}/$fileName?preview=1"; return HttpRequestHelper::get( $url, $this->getStepLineRef() diff --git a/tests/acceptance/bootstrap/SpacesContext.php b/tests/acceptance/bootstrap/SpacesContext.php index e39b1771be..e52f93d4b4 100644 --- a/tests/acceptance/bootstrap/SpacesContext.php +++ b/tests/acceptance/bootstrap/SpacesContext.php @@ -49,13 +49,13 @@ class SpacesContext implements Context { private FavoritesContext $favoritesContext; private ChecksumContext $checksumContext; private FilesVersionsContext $filesVersionsContext; + private ArchiverContext $archiverContext; /** * key is space name and value is the username that created the space */ private array $createdSpaces; private string $ocsApiUrl = '/ocs/v2.php/apps/files_sharing/api/v1/shares'; - private string $davSpacesUrl = '/remote.php/dav/spaces/'; /** * @var array map with user as key, spaces and file etags as value @@ -267,7 +267,9 @@ class SpacesContext implements Context { */ public function getFileData(string $user, string $spaceName, string $fileName): ResponseInterface { $space = $this->getSpaceByName($user, $spaceName); - $fullUrl = $this->featureContext->getBaseUrl() . $this->davSpacesUrl . $space["id"] . "/" . $fileName; + $baseUrl = $this->featureContext->getBaseUrl(); + $davPath = WebdavHelper::getDavPath(WebDavHelper::DAV_VERSION_SPACES, $space["id"]); + $fullUrl = "{$baseUrl}/{$davPath}/{$fileName}"; return HttpRequestHelper::get( $fullUrl, @@ -310,7 +312,12 @@ class SpacesContext implements Context { if ($folderName === $space["name"]) { $folderName = ''; } - $fullUrl = $space["root"]["webDavUrl"] . "/" . \rawurlencode($folderName); + + $encodedName = \rawurlencode($folderName); + $baseUrl = $this->featureContext->getBaseUrl(); + $davPath = WebDavHelper::getDavPath(WebDavHelper::DAV_VERSION_SPACES, $space["id"]); + $fullUrl = "{$baseUrl}/{$davPath}/{$encodedName}"; + $response = HttpRequestHelper::sendRequest( $fullUrl, $this->featureContext->getStepLineRef(), @@ -400,6 +407,7 @@ class SpacesContext implements Context { $this->favoritesContext = BehatHelper::getContext($scope, $environment, 'FavoritesContext'); $this->checksumContext = BehatHelper::getContext($scope, $environment, 'ChecksumContext'); $this->filesVersionsContext = BehatHelper::getContext($scope, $environment, 'FilesVersionsContext'); + $this->archiverContext = BehatHelper::getContext($scope, $environment, 'ArchiverContext'); } /** @@ -1690,7 +1698,11 @@ class SpacesContext implements Context { $spaceName ); - $fullUrl = $space["root"]["webDavUrl"] . '/' . ltrim($fileSource, "/"); + $encodedName = \rawurlencode(ltrim($fileSource, "/")); + $baseUrl = $this->featureContext->getBaseUrl(); + $davPath = WebdavHelper::getDavPath(WebDavHelper::DAV_VERSION_SPACES, $space["id"]); + $fullUrl = "{$baseUrl}/{$davPath}/{$encodedName}"; + $this->featureContext->setResponse($this->copyFilesAndFoldersRequest($user, $fullUrl, $headers)); } @@ -1717,8 +1729,11 @@ class SpacesContext implements Context { ); $headers['Overwrite'] = 'F'; - $fileSource = $this->escapePath(\trim($fileSource, "/")); - $fullUrl = $space["root"]["webDavUrl"] . '/' . $fileSource; + $encodedName = \rawurlencode(ltrim($fileSource, "/")); + $baseUrl = $this->featureContext->getBaseUrl(); + $davPath = WebdavHelper::getDavPath(WebDavHelper::DAV_VERSION_SPACES, $space["id"]); + $fullUrl = "{$baseUrl}/{$davPath}/{$encodedName}"; + return $this->moveFilesAndFoldersRequest($user, $fullUrl, $headers); } @@ -1831,7 +1846,11 @@ class SpacesContext implements Context { } } - $fullUrl = $space["root"]["webDavUrl"] . '/' . ltrim($fileSource, "/"); + $encodedName = \rawurlencode(ltrim($fileSource, "/")); + $baseUrl = $this->featureContext->getBaseUrl(); + $davPath = WebdavHelper::getDavPath(WebDavHelper::DAV_VERSION_SPACES, $space["id"]); + $fullUrl = "{$baseUrl}/{$davPath}/{$encodedName}"; + $this->featureContext->setResponse($this->copyFilesAndFoldersRequest($user, $fullUrl, $headers)); } @@ -1859,7 +1878,12 @@ class SpacesContext implements Context { $space = $this->getSpaceByName($user, $fromSpaceName); $headers['Destination'] = $this->destinationHeaderValueWithSpaceName($user, $fileDestination, $toSpaceName); $headers['Overwrite'] = 'T'; - $fullUrl = $space["root"]["webDavUrl"] . '/' . ltrim($fileSource, "/"); + + $encodedName = \rawurlencode(ltrim($fileSource, "/")); + $baseUrl = $this->featureContext->getBaseUrl(); + $davPath = WebdavHelper::getDavPath(WebDavHelper::DAV_VERSION_SPACES, $space["id"]); + $fullUrl = "{$baseUrl}/{$davPath}/{$encodedName}"; + if ($action === 'copying') { $response = $this->copyFilesAndFoldersRequest($user, $fullUrl, $headers); } else { @@ -1922,7 +1946,12 @@ class SpacesContext implements Context { ):void { $space = $this->getSpaceByName($user, $fromSpaceName); $headers['Destination'] = $this->destinationHeaderValueWithSpaceName($user, $fileDestination, $toSpaceName); - $fullUrl = $space["root"]["webDavUrl"] . '/' . \ltrim($fileSource, "/"); + + $encodedName = \rawurlencode(ltrim($fileSource, "/")); + $baseUrl = $this->featureContext->getBaseUrl(); + $davPath = WebdavHelper::getDavPath(WebDavHelper::DAV_VERSION_SPACES, $space["id"]); + $fullUrl = "{$baseUrl}/{$davPath}/{$encodedName}"; + $this->featureContext->setResponse($this->moveFilesAndFoldersRequest($user, $fullUrl, $headers)); $this->featureContext->pushToLastHttpStatusCodesArray(); } @@ -1941,12 +1970,9 @@ class SpacesContext implements Context { public function destinationHeaderValueWithSpaceName(string $user, string $fileDestination, string $spaceName, string $endPath = null):string { $space = $this->getSpaceByName($user, $spaceName); $fileDestination = $this->escapePath(\ltrim($fileDestination, "/")); - if ($endPath && str_contains($endPath, 'remote.php')) { - // this is a check for when we want to test with the endpoint having `remote.php` in space webdav - // by default spaces webdav is '/dav/spaces' - return $this->featureContext->getBaseUrl() . '/remote.php/dav/spaces/' . $space['id'] . '/' . $fileDestination; - } - return $space["root"]["webDavUrl"] . '/' . $fileDestination; + $baseUrl = $this->featureContext->getBaseUrl(); + $davPath = WebdavHelper::getDavPath(WebDavHelper::DAV_VERSION_SPACES, $space["id"]); + return "{$baseUrl}/{$davPath}/{$fileDestination}"; } /** @@ -1971,19 +1997,19 @@ class SpacesContext implements Context { } /** - * @When /^user "([^"]*)" (copies|moves|renames) a file "([^"]*)" into "([^"]*)" inside space "([^"]*)" using file-id path "([^"]*)"$/ + * @When /^user "([^"]*)" (copies|moves|renames) a file "([^"]*)" into "([^"]*)" inside space "([^"]*)" using file-id "([^"]*)"$/ * * @param string $user * @param string $actionType * @param string $sourceFile * @param string $destinationFile * @param string $toSpaceName - * @param string $url + * @param string $fileId * * @throws GuzzleException * @return void */ - public function userCopiesOrMovesFileWithFileIdFromAndToSpaceBetweenSpaces(string $user, string $actionType, string $sourceFile, string $destinationFile, string $toSpaceName, string $url): void { + public function userCopiesMovesFileIntoInsideSpaceUsingFileId(string $user, string $actionType, string $sourceFile, string $destinationFile, string $toSpaceName, string $fileId): void { // split the source when there are sub-folders $sourceFile = \trim($sourceFile, "/"); $sourceFile = \explode("/", $sourceFile); @@ -1995,15 +2021,17 @@ class SpacesContext implements Context { } elseif ($actionType === 'renames') { $fileDestination = $destinationFile; } + $baseUrl = $this->featureContext->getBaseUrl(); + $sourceDavPath = WebdavHelper::getDavPath($this->featureContext->getDavPathVersion()); if ($toSpaceName === 'Shares') { $sharesPath = $this->featureContext->getSharesMountPath($user, $fileDestination); - $davPath = WebDavHelper::getDavPath($user, $this->featureContext->getDavPathVersion()); - $headers['Destination'] = $baseUrl . "/$davPath" . $sharesPath; + $davPath = WebDavHelper::getDavPath($this->featureContext->getDavPathVersion()); + $headers['Destination'] = "$baseUrl/$davPath/$sharesPath"; } else { - $headers['Destination'] = $this->destinationHeaderValueWithSpaceName($user, $fileDestination, $toSpaceName, $url); + $headers['Destination'] = $this->destinationHeaderValueWithSpaceName($user, $fileDestination, $toSpaceName, $fileId); } - $fullUrl = $baseUrl . $url; + $fullUrl = "$baseUrl/$sourceDavPath/$fileId"; if ($actionType === 'copies') { $this->featureContext->setResponse($this->copyFilesAndFoldersRequest($user, $fullUrl, $headers)); } elseif ($actionType === 'moves' || $actionType === 'renames') { @@ -2012,15 +2040,14 @@ class SpacesContext implements Context { } /** - * @When /^user "([^"]*)" tries to move (?:file|folder) "([^"]*)" of space "([^"]*)" to (space|folder) "([^"]*)" using its id in destination path "([^"]*)"$/ - * @When /^user "([^"]*)" moves (?:file|folder) "([^"]*)" of space "([^"]*)" to (folder) "([^"]*)" using its id in destination path "([^"]*)"$/ + * @When /^user "([^"]*)" tries to move (?:file|folder) "([^"]*)" of space "([^"]*)" to (space|folder) "([^"]*)" using its id in destination path$/ + * @When /^user "([^"]*)" moves (?:file|folder) "([^"]*)" of space "([^"]*)" to (folder) "([^"]*)" using its id in destination path$/ * * @param string $user * @param string $source * @param string $sourceSpace * @param string $destinationType * @param string $destinationName - * @param string $destinationPath * * @throws GuzzleException * @return void @@ -2030,23 +2057,25 @@ class SpacesContext implements Context { string $source, string $sourceSpace, string $destinationType, - string $destinationName, - string $destinationPath + string $destinationName ): void { $source = \trim($source, "/"); $baseUrl = $this->featureContext->getBaseUrl(); - $suffix = ""; - if ($this->featureContext->getDavPathVersion() === WebDavHelper::DAV_VERSION_SPACES) { - $suffix = $this->getSpaceIdByName($user, $sourceSpace) . "/"; + $davPathVersion = $this->featureContext->getDavPathVersion(); + $uniquePath = $user; + if ($davPathVersion === WebDavHelper::DAV_VERSION_SPACES) { + $uniquePath = $this->getSpaceIdByName($user, $sourceSpace); } - $fullUrl = $baseUrl . \rtrim($destinationPath, "/") . "/$suffix$source"; + $sourceDavPath = WebDavHelper::getDavPath($davPathVersion, $uniquePath); + $fullUrl = "$baseUrl/$sourceDavPath/$source"; if ($destinationType === "space") { $destinationId = $this->getSpaceIdByName($user, $destinationName); } else { $destinationId = $this->getResourceId($user, $sourceSpace, $destinationName); } - $headers['Destination'] = $baseUrl . \rtrim($destinationPath, "/") . "/$destinationId"; + $destinationDavPath = WebDavHelper::getDavPath($davPathVersion); + $headers['Destination'] = "$baseUrl/$destinationDavPath/$destinationId"; $response = $this->moveFilesAndFoldersRequest($user, $fullUrl, $headers); $this->featureContext->setResponse($response); @@ -2520,9 +2549,14 @@ class SpacesContext implements Context { string $spaceName ): ResponseInterface { $space = $this->getSpaceByName($user, $spaceName); - $spaceWebDavUrl = $space["root"]["webDavUrl"] . '/' . ltrim($object, "/"); + + $encodedName = \rawurlencode(ltrim($object, "/")); + $baseUrl = $this->featureContext->getBaseUrl(); + $davPath = WebdavHelper::getDavPath(WebDavHelper::DAV_VERSION_SPACES, $space["id"]); + $fullUrl = "{$baseUrl}/{$davPath}/{$encodedName}"; + return HttpRequestHelper::delete( - $spaceWebDavUrl, + $fullUrl, $this->featureContext->getStepLineRef(), $user, $this->featureContext->getPasswordForUser($user) @@ -2783,7 +2817,9 @@ class SpacesContext implements Context { string $spaceName ): ResponseInterface { $space = $this->getSpaceByName($user, $spaceName); - $fullUrl = $this->featureContext->getBaseUrl() . $this->davSpacesUrl . "trash-bin/" . $space["id"]; + $baseUrl = $this->featureContext->getBaseUrl(); + $davPath = WebDavHelper::getDavPath(WebDavHelper::DAV_VERSION_SPACES, $space["id"], "trash-bin"); + $fullUrl = "{$baseUrl}/{$davPath}"; return HttpRequestHelper::sendRequest( $fullUrl, $this->featureContext->getStepLineRef(), @@ -2826,7 +2862,9 @@ class SpacesContext implements Context { ): void { // get space by admin user $space = $this->getSpaceByName($this->featureContext->getAdminUserName(), $spaceName); - $fullUrl = $this->featureContext->getBaseUrl() . $this->davSpacesUrl . "trash-bin/" . $space["id"]; + $baseUrl = $this->featureContext->getBaseUrl(); + $davPath = WebDavHelper::getDavPath(WebDavHelper::DAV_VERSION_SPACES, $space["id"], "trash-bin"); + $fullUrl = "{$baseUrl}/{$davPath}"; $this->featureContext->setResponse( HttpRequestHelper::sendRequest($fullUrl, $this->featureContext->getStepLineRef(), 'PROPFIND', $user, $this->featureContext->getPasswordForUser($user)) ); @@ -2839,7 +2877,7 @@ class SpacesContext implements Context { * and return array like: * [1] => Array * ( - * [href] => /remote.php/dav/spaces/trash-bin/spaceId/objectId/ + * [href] => /dav/spaces/trash-bin/spaceId/objectId/ * [name] => deleted folder * [mtime] => 1649147272 * [original-location] => deleted folder @@ -2931,10 +2969,12 @@ class SpacesContext implements Context { throw new Exception(__METHOD__ . " Object '$object' was not found in the trashbin of space '$spaceName' by user '$user'"); } - $destination = $this->featureContext->getBaseUrl() . $this->davSpacesUrl . $space["id"] . $destination; + $baseUrl = $this->featureContext->getBaseUrl(); + $davPath = WebDavHelper::getDavPath(WebDavHelper::DAV_VERSION_SPACES, $space["id"]); + $destination = "{$baseUrl}/{$davPath}/{$destination}"; $header = ["Destination" => $destination, "Overwrite" => "F"]; - $fullUrl = $this->featureContext->getBaseUrl() . $pathToDeletedObject; + $fullUrl = $baseUrl . $pathToDeletedObject; $this->featureContext->setResponse( HttpRequestHelper::sendRequest( $fullUrl, @@ -3025,8 +3065,9 @@ class SpacesContext implements Context { $urlParameters = \http_build_query($urlParameters, '', '&'); $space = $this->getSpaceByName($user, $spaceName); - $fullUrl = $this->featureContext->getBaseUrl() . $this->davSpacesUrl . $space['id'] . '/' . $fileName . '?' . $urlParameters; - + $baseUrl = $this->featureContext->getBaseUrl(); + $davPath = WebDavHelper::getDavPath(WebDavHelper::DAV_VERSION_SPACES, $space["id"]); + $fullUrl = "{$baseUrl}/{$davPath}/{$fileName}?{$urlParameters}"; $this->featureContext->setResponse( HttpRequestHelper::get( $fullUrl, @@ -3602,11 +3643,18 @@ class SpacesContext implements Context { $splitSpaceName = explode("/", $spaceName); $space = $this->getSpaceByName($user, $splitSpaceName[1]); $splitSpaceId = explode("$", $space['id']); - $topWebDavPath = "/remote.php/dav/spaces/" . str_replace('!', '%21', $splitSpaceId[1]); + $spaceId = str_replace('!', '%21', $splitSpaceId[1]); } else { $space = $this->getSpaceByName($user, $spaceName); - $topWebDavPath = "/remote.php/dav/spaces/" . $space['id']; + $spaceId = $space['id']; } + $uniquePath = $user; + $davPathVersion = $this->featureContext->getDavPathVersion(); + if ($davPathVersion === WebDavHelper::DAV_VERSION_SPACES) { + $uniquePath = $spaceId; + } + + $topWebDavPath = "/" . WebDavHelper::getDavPath($davPathVersion, $uniquePath); $spaceFound = false; foreach ($responseArray as $value) { @@ -3938,13 +3986,13 @@ class SpacesContext implements Context { $resource, '0', ['oc:fileid'], - $this->featureContext->getDavPathVersion() === 1 ? "public-files" : "public-files-new" + "public-files" ); $resourceId = json_decode(json_encode($response->xpath("//d:response/d:propstat/d:prop/oc:fileid")), true, 512, JSON_THROW_ON_ERROR); $queryString = 'public-token=' . $token . '&id=' . $resourceId[0][0]; $this->featureContext->setResponse( HttpRequestHelper::get( - $this->featureContext->getBaseUrl() . '/archiver?' . $queryString, + $this->archiverContext->getArchiverUrl($queryString), $this->featureContext->getStepLineRef(), '', '', @@ -4033,7 +4081,7 @@ class SpacesContext implements Context { */ public function userDownloadsTheSpaceUsingTheWebdavApi(string $user, string $spaceName, string $owner = ''):void { $space = $this->getSpaceByName($owner ?: $user, $spaceName); - $url = $this->featureContext->getBaseUrl() . '/archiver?id=' . $space['id']; + $url = $this->archiverContext->getArchiverUrl('id=' . $space['id']); $this->featureContext->setResponse( HttpRequestHelper::get( $url, diff --git a/tests/acceptance/bootstrap/TUSContext.php b/tests/acceptance/bootstrap/TUSContext.php index 83a26d961e..3240e7c12d 100644 --- a/tests/acceptance/bootstrap/TUSContext.php +++ b/tests/acceptance/bootstrap/TUSContext.php @@ -304,15 +304,15 @@ class TUSContext implements Context { 'headers' => $headers ] ); + + $davPathVersion = $this->featureContext->getDavPathVersion(); + $uniquePath = $user; + if ($davPathVersion === WebDavHelper::DAV_VERSION_SPACES) { + $uniquePath = $spaceId ?: $this->featureContext->getPersonalSpaceIdForUser($user); + } + $client->setChecksumAlgorithm('sha1'); - $client->setApiPath( - WebDavHelper::getDavPath( - $user, - $this->featureContext->getDavPathVersion(), - "files", - $spaceId ?: $this->featureContext->getPersonalSpaceIdForUser($user) - ) - ); + $client->setApiPath(WebDavHelper::getDavPath($davPathVersion, $uniquePath)); $client->setMetadata($uploadMetadata); $sourceFile = $this->featureContext->acceptanceTestsDirLocation() . $source; $client->setKey((string)rand())->file($sourceFile, $destination); diff --git a/tests/acceptance/bootstrap/TrashbinContext.php b/tests/acceptance/bootstrap/TrashbinContext.php index d88145e591..d36a76981c 100644 --- a/tests/acceptance/bootstrap/TrashbinContext.php +++ b/tests/acceptance/bootstrap/TrashbinContext.php @@ -148,13 +148,25 @@ class TrashbinContext implements Context { public function listTopOfTrashbinFolder(?string $user, string $depth = "1"):array { $password = $this->featureContext->getPasswordForUser($user); $davPathVersion = $this->featureContext->getDavPathVersion(); + + $uniquePath = $user; + $spaceId = null; + if ($davPathVersion === WebDavHelper::DAV_VERSION_SPACES) { + $spaceId = WebDavHelper::getPersonalSpaceIdForUser( + $this->featureContext->getBaseUrl(), + $user, + $password, + $this->featureContext->getStepLineRef() + ); + $uniquePath = $spaceId; + } $response = WebDavHelper::listFolder( $this->featureContext->getBaseUrl(), $user, $password, "", $depth, - null, + $spaceId, $this->featureContext->getStepLineRef(), [ 'oc:trashbin-original-filename', @@ -176,8 +188,9 @@ class TrashbinContext implements Context { // filter root element $files = \array_filter( $files, - static function ($element) use ($user) { - return ($element['href'] !== "/remote.php/dav/trash-bin/$user/"); + static function ($element) use ($davPathVersion, $uniquePath) { + $davPath = WebDavHelper::getDavPath($davPathVersion, $uniquePath, "trash-bin"); + return ($element['href'] !== "/" . $davPath . "/"); } ); return $files; @@ -247,17 +260,16 @@ class TrashbinContext implements Context { $files = $this->getTrashbinContentFromResponseXml($responseXml); - // set endpoint according to webdav request (2 = new, 3 = spaces) - $endpoint = "/remote.php/dav/trash-bin/$user"; - if ($davPathVersion === 3) { - $space_id = WebDavHelper::getPersonalSpaceIdForUser( + $uniquePath = $user; + if ($davPathVersion === WebDavHelper::DAV_VERSION_SPACES) { + $uniquePath = WebDavHelper::getPersonalSpaceIdForUser( $this->featureContext->getBaseUrl(), $user, $this->featureContext->getPasswordForUser($user), $this->featureContext->getStepLineRef() ); - $endpoint = "/remote.php/dav/spaces/trash-bin/$space_id"; } + $endpoint = WebDavHelper::getDavPath($davPathVersion, $uniquePath, "trash-bin"); // filter out the collection itself, we only want to return the members $files = \array_filter( @@ -267,7 +279,7 @@ class TrashbinContext implements Context { if ($path !== "") { $path = $path . "/"; } - return ($element['href'] !== "$endpoint/$path"); + return ($element['href'] !== "/$endpoint/$path"); } ); @@ -276,13 +288,8 @@ class TrashbinContext implements Context { // avoid "common" situations that could cause infinite recursion. $trashbinRef = $file["href"]; $trimmedTrashbinRef = \trim($trashbinRef, "/"); - if ($davPathVersion === WebDavHelper::DAV_VERSION_SPACES) { - $expectedStart = "remote.php/dav/spaces/trash-bin"; - } else { - $expectedStart = "remote.php/dav/trash-bin/$user"; - } - $expectedStartLength = \strlen($expectedStart); - if ((\substr($trimmedTrashbinRef, 0, $expectedStartLength) !== $expectedStart) + $expectedStartLength = \strlen($endpoint); + if ((\substr($trimmedTrashbinRef, 0, $expectedStartLength) !== $endpoint) || (\strlen($trimmedTrashbinRef) === $expectedStartLength) ) { // A top href (maybe without even the username) has been returned @@ -338,7 +345,7 @@ class TrashbinContext implements Context { */ public function theTrashbinDavResponseShouldNotContainTheseNodes(TableNode $table):void { $this->featureContext->verifyTableNodeColumns($table, ['name']); - $responseXml = $this->featureContext->getResponseXmlObject(); + $responseXml = $this->featureContext->getResponseXml(); $files = $this->getTrashbinContentFromResponseXml($responseXml); foreach ($table->getHash() as $row) { @@ -361,7 +368,7 @@ class TrashbinContext implements Context { */ public function theTrashbinDavResponseShouldContainTheseNodes(TableNode $table):void { $this->featureContext->verifyTableNodeColumns($table, ['name']); - $responseXml = $this->featureContext->getResponseXmlObject(); + $responseXml = $this->featureContext->getResponseXml(); $files = $this->getTrashbinContentFromResponseXml($responseXml); @@ -387,16 +394,16 @@ class TrashbinContext implements Context { * @param string|null $asUser - To send request as another user * @param string|null $password * - * @return void + * @return ResponseInterface * @throws Exception */ - public function sendTrashbinListRequest(string $user, ?string $asUser = null, ?string $password = null):void { + public function sendTrashbinListRequest(string $user, ?string $asUser = null, ?string $password = null): ResponseInterface { $asUser = $asUser ?? $user; $password = $password ?? $this->featureContext->getPasswordForUser($asUser); - $davPathVersion = $this->featureContext->getDavPathVersion(); - $response = WebDavHelper::propfind( + + return WebDavHelper::propfind( $this->featureContext->getBaseUrl(), - $asUser, + $user, $password, null, [ @@ -409,19 +416,9 @@ class TrashbinContext implements Context { '1', null, 'trash-bin', - $davPathVersion, - $user + $this->featureContext->getDavPathVersion(), + $asUser ); - $this->featureContext->setResponse($response); - try { - $responseXmlObject = HttpRequestHelper::getResponseXml( - $response, - __METHOD__ - ); - $this->featureContext->setResponseXmlObject($responseXmlObject); - } catch (Exception $e) { - $this->featureContext->clearResponseXmlObject(); - } } /** @@ -436,7 +433,8 @@ class TrashbinContext implements Context { public function userTriesToListTheTrashbinContentForUser(string $asUser, string $user) { $user = $this->featureContext->getActualUsername($user); $asUser = $this->featureContext->getActualUsername($asUser); - $this->sendTrashbinListRequest($user, $asUser); + $response = $this->sendTrashbinListRequest($user, $asUser); + $this->featureContext->setResponse($response); } /** @@ -450,7 +448,8 @@ class TrashbinContext implements Context { * @throws Exception */ public function userTriesToListTheTrashbinContentForUserUsingPassword(string $asUser, string $user, string $password):void { - $this->sendTrashbinListRequest($user, $asUser, $password); + $response = $this->sendTrashbinListRequest($user, $asUser, $password); + $this->featureContext->setResponse($response); } /** @@ -461,7 +460,7 @@ class TrashbinContext implements Context { * @return void */ public function theLastWebdavResponseShouldContainFollowingElements(TableNode $elements):void { - $files = $this->getTrashbinContentFromResponseXml($this->featureContext->getResponseXmlObject()); + $files = $this->getTrashbinContentFromResponseXml($this->featureContext->getResponseXml()); $elementRows = $elements->getHash(); foreach ($elementRows as $expectedElement) { $found = false; @@ -485,7 +484,7 @@ class TrashbinContext implements Context { * @throws Exception */ public function theLastWebdavResponseShouldNotContainFollowingElements(TableNode $elements):void { - $files = $this->getTrashbinContentFromResponseXml($this->featureContext->getResponseXmlObject()); + $files = $this->getTrashbinContentFromResponseXml($this->featureContext->getResponseXml()); // 'user' is also allowed in the table even though it is not used anywhere // This for better readability in feature files @@ -576,7 +575,7 @@ class TrashbinContext implements Context { } /** - * converts the trashItemHRef from //remote.php/dav/trash-bin/// to /trash-bin// + * converts the trashItemHRef from //dav/trash-bin/// to /trash-bin// * * @param string $href * @@ -787,24 +786,43 @@ class TrashbinContext implements Context { */ private function sendUndeleteRequest(string $user, string $trashItemHRef, string $destinationPath, ?string $asUser = null, ?string $password = null):ResponseInterface { $asUser = $asUser ?? $user; + $password = $password ?? $this->featureContext->getPasswordForUser($asUser); $destinationPath = \trim($destinationPath, '/'); - $destinationValue = $this->featureContext->getBaseUrl() . "/remote.php/dav/files/$user/$destinationPath"; + $baseUrl = $this->featureContext->getBaseUrl(); + $davPathVersion = $this->featureContext->getDavPathVersion(); - $trashItemHRef = $this->convertTrashbinHref($trashItemHRef); - $headers['Destination'] = $destinationValue; + $uniquePath = $asUser; + if ($davPathVersion === WebDavHelper::DAV_VERSION_SPACES) { + if (\str_starts_with($destinationPath, "Shares/")) { + $uniquePath = $this->featureContext->spacesContext->getSpaceIdByName($user, "Shares"); + $destinationPath = \str_replace("Shares/", "", $destinationPath); + } else { + $uniquePath = WebDavHelper::getPersonalSpaceIdForUser( + $baseUrl, + $asUser, + $password, + $this->featureContext->getStepLineRef() + ); + } + } + $destinationDavPath = WebDavHelper::getDavPath($davPathVersion, $uniquePath); + $destination = "{$baseUrl}/{$destinationDavPath}/{$destinationPath}"; + + $trashItemHRef = \ltrim($this->convertTrashbinHref($trashItemHRef), "/"); + $headers['Destination'] = $destination; return $this->featureContext->makeDavRequest( - $asUser, + $user, 'MOVE', $trashItemHRef, $headers, null, null, 'trash-bin', - '2', + $davPathVersion, false, $password, [], - $user + $asUser ); } @@ -1133,7 +1151,7 @@ class TrashbinContext implements Context { */ public function theDeletedFileFolderShouldHaveCorrectDeletionMtimeInTheResponse(string $resource):void { $files = $this->getTrashbinContentFromResponseXml( - $this->featureContext->getResponseXmlObject() + $this->featureContext->getResponseXml() ); $found = false; diff --git a/tests/acceptance/bootstrap/WebDav.php b/tests/acceptance/bootstrap/WebDav.php index 4af50af567..ed99bbdf0d 100644 --- a/tests/acceptance/bootstrap/WebDav.php +++ b/tests/acceptance/bootstrap/WebDav.php @@ -37,9 +37,9 @@ use TestHelpers\GraphHelper; * WebDav functions */ trait WebDav { - private string $davPath = "remote.php/webdav"; - private bool $usingOldDavPath = true; - private bool $usingSpacesDavPath = false; + // defaults to the new DAV path + // maybe we want to make spaces the default in the future + private int $currentDAVPath = WebDavHelper::DAV_VERSION_NEW; /** * @var ResponseInterface[] @@ -53,12 +53,6 @@ trait WebDav { private ?int $lastUploadDeleteTime = null; - /** - * a variable that contains the DAV path without "remote.php/(web)dav" - * when setting $this->davPath directly by usingDavPath() - */ - private ?string $customDavPath = null; - /** * response content parsed from XML to an array */ @@ -125,13 +119,6 @@ trait WebDav { return $this->lastUploadDeleteTime; } - /** - * @return SimpleXMLElement|null - */ - public function getResponseXmlObject():?SimpleXMLElement { - return $this->responseXmlObject; - } - /** * @param SimpleXMLElement $responseXmlObject * @@ -203,83 +190,33 @@ trait WebDav { } /** - * @return string - */ - public function getOldDavPath():string { - return "remote.php/webdav"; - } - - /** - * @return string - */ - public function getNewDavPath():string { - return "remote.php/dav"; - } - - /** - * @return string - */ - public function getSpacesDavPath():string { - return "dav/spaces"; - } - - /** - * @Given /^using (old|new|spaces) (?:dav|DAV) path$/ + * @Given /^using (old|new|spaces) DAV path$/ * * @param string $davChoice * * @return void */ - public function usingOldOrNewDavPath(string $davChoice):void { - if ($davChoice === 'old') { - $this->usingOldDavPath(); - } elseif ($davChoice === 'new') { - $this->usingNewDavPath(); - } else { - $this->usingSpacesDavPath(); + public function usingOldOrNewOrSpacesDavPath(string $davChoice):void { + switch ($davChoice) { + case 'old': + $this->currentDAVPath = WebDavHelper::DAV_VERSION_OLD; + break; + case 'new': + $this->currentDAVPath = WebDavHelper::DAV_VERSION_NEW; + break; + case 'spaces': + $this->currentDAVPath = WebDavHelper::DAV_VERSION_SPACES; + break; + default: + throw new Exception("Invalid DAV path: $davChoice"); + break; } } - /** - * Select the old DAV path as the default for later scenario steps - * - * @return void - */ - public function usingOldDavPath():void { - $this->davPath = $this->getOldDavPath(); - $this->usingOldDavPath = true; - $this->customDavPath = null; - $this->usingSpacesDavPath = false; - } - - /** - * Select the new DAV path as the default for later scenario steps - * - * @return void - */ - public function usingNewDavPath():void { - $this->davPath = $this->getNewDavPath(); - $this->usingOldDavPath = false; - $this->customDavPath = null; - $this->usingSpacesDavPath = false; - } - - /** - * Select the spaces dav path as the default for later scenario steps - * - * @return void - */ - public function usingSpacesDavPath():void { - $this->davPath = $this->getSpacesDavPath(); - $this->usingOldDavPath = false; - $this->customDavPath = null; - $this->usingSpacesDavPath = true; - } - /** * gives the DAV path of a file including the subfolder of the webserver * e.g. when the server runs in `http://localhost/owncloud/` - * this function will return `owncloud/remote.php/webdav/prueba.txt` + * this function will return `owncloud/webdav/prueba.txt` * * @param string $user * @param string $spaceId @@ -296,21 +233,27 @@ trait WebDav { $this->getStepLineRef() ); } - $path = $this->getBasePath() . "/" . - WebDavHelper::getDavPath($user, $this->getDavPathVersion(), "files", $spaceId); + + $davPathVersion = $this->getDavPathVersion(); + $uniquePath = $user; + if ($davPathVersion === WebDavHelper::DAV_VERSION_SPACES) { + $uniquePath = $spaceId; + } + + $davPath = WebDavHelper::getDavPath($davPathVersion, $uniquePath); + $path = "{$this->getBasePath()}/{$davPath}"; $path = WebDavHelper::sanitizeUrl($path); return \ltrim($path, "/"); } /** * @param string $token - * @param string $type * * @return string */ - public function getPublicLinkDavPath(string $token, string $type):string { - $path = $this->getBasePath() . "/" . - WebDavHelper::getDavPath($token, $this->getDavPathVersion(), $type); + public function getPublicLinkDavPath(string $token):string { + $davPath = WebDavHelper::getDavPath($this->getDavPathVersion(), $token, "public-files"); + $path = "{$this->getBasePath()}/{$davPath}"; $path = WebDavHelper::sanitizeUrl($path); return \ltrim($path, "/"); } @@ -326,45 +269,12 @@ trait WebDav { * @return int DAV path version (1, 2 or 3) selected, or appropriate for the endpoint */ public function getDavPathVersion(?string $for = null):?int { - if ($this->usingSpacesDavPath) { - return WebDavHelper::DAV_VERSION_SPACES; - } - if ($for === 'systemtags') { - // systemtags only exists since DAV v2 + if (\in_array($for, ['systemtags', 'file_versions'])) { + // 'systemtags' only exists since new DAV + // 'file_versions' only exists since new DAV return WebDavHelper::DAV_VERSION_NEW; } - if ($for === 'file_versions') { - // file_versions only exists since DAV v2 - return WebDavHelper::DAV_VERSION_NEW; - } - if ($this->usingOldDavPath === true) { - return WebDavHelper::DAV_VERSION_OLD; - } else { - return WebDavHelper::DAV_VERSION_NEW; - } - } - - /** - * Select a suitable DAV path. - * Some endpoints have only existed since a certain point in time, so for - * those make sure to return a DAV path that works for that endpoint. - * Otherwise return the currently selected DAV path. - * - * @param string|null $for the category of endpoint that the DAV path will be used for - * - * @return string DAV path selected, or appropriate for the endpoint - */ - public function getDavPath(?string $for = null):string { - $davPathVersion = $this->getDavPathVersion($for); - if ($davPathVersion === WebDavHelper::DAV_VERSION_OLD) { - return $this->getOldDavPath(); - } - - if ($davPathVersion === WebDavHelper::DAV_VERSION_NEW) { - return $this->getNewDavPath(); - } - - return $this->getSpacesDavPath(); + return $this->currentDAVPath; } /** @@ -396,7 +306,7 @@ trait WebDav { $body = null, ?string $spaceId = null, ?string $type = "files", - ?string $davPathVersion = null, + ?int $davPathVersion = null, bool $stream = false, ?string $password = null, ?array $urlParameter = [], @@ -404,9 +314,6 @@ trait WebDav { ?bool $isGivenStep = false ):ResponseInterface { $user = $this->getActualUsername($user); - if ($this->customDavPath !== null) { - $path = $this->customDavPath . $path; - } if ($davPathVersion === null) { $davPathVersion = $this->getDavPathVersion(); @@ -454,7 +361,6 @@ trait WebDav { * @throws GuzzleException | JsonException */ public function createFolder(string $user, string $folder, ?bool $isGivenStep = false, ?string $password = null, ?string $spaceId=null): ResponseInterface { - $folder = '/' . \ltrim($folder, '/'); return $this->makeDavRequest( $user, "MKCOL", @@ -485,10 +391,11 @@ trait WebDav { public function downloadPreviews(string $user, ?string $path, ?string $doDavRequestAsUser, ?string $width, ?string $height):ResponseInterface { $user = $this->getActualUsername($user); $doDavRequestAsUser = $this->getActualUsername($doDavRequestAsUser); + $doDavRequestAsUser = $doDavRequestAsUser ?? $user; + $password = $this->getPasswordForUser($doDavRequestAsUser); $urlParameter = [ 'x' => $width, 'y' => $height, - 'forceIcon' => '0', 'preview' => '1' ]; return $this->makeDavRequest( @@ -501,7 +408,7 @@ trait WebDav { "files", null, false, - null, + $password, $urlParameter, $doDavRequestAsUser ); @@ -516,7 +423,7 @@ trait WebDav { * @throws Exception */ public function theNumberOfVersionsShouldBe(int $number):void { - $resXml = $this->getResponseXmlObject(); + $resXml = $this->getResponseXml(); if ($resXml === null) { $resXml = HttpRequestHelper::getResponseXml( $this->getResponse(), @@ -542,7 +449,7 @@ trait WebDav { * @throws Exception */ public function theNumberOfEtagElementInTheResponseShouldBe(int $number):void { - $resXml = $this->getResponseXmlObject(); + $resXml = $this->getResponseXml(); if ($resXml === null) { $resXml = HttpRequestHelper::getResponseXml( $this->getResponse(), @@ -575,8 +482,15 @@ trait WebDav { $fileDestination = \preg_replace("/^Shares\//", "", $fileDestination); } } - $fullUrl = $this->getBaseUrl() . '/' . - WebDavHelper::getDavPath($user, $this->getDavPathVersion(), "files", $spaceId); + + $davPathVersion = $this->getDavPathVersion(); + $uniquePath = $user; + if ($davPathVersion === WebDavHelper::DAV_VERSION_SPACES) { + $uniquePath = $spaceId; + } + + $davPath = WebDavHelper::getDavPath($davPathVersion, $uniquePath); + $fullUrl = $this->getBaseUrl() . "/$davPath"; return \rtrim($fullUrl, '/') . '/' . $fileDestination; } @@ -1199,7 +1113,8 @@ trait WebDav { */ public function publicGetsSizeOfLastSharedPublicLinkUsingTheWebdavApi():void { $token = ($this->isUsingSharingNG()) ? $this->shareNgGetLastCreatedLinkShareToken() : $this->getLastCreatedPublicShareToken(); - $url = $this->getBaseUrl() . "/remote.php/dav/public-files/$token"; + $davPath = WebDavHelper::getDavPath($this->getDavPathVersion(), $token, "public-files"); + $url = "{$this->getBaseUrl()}/{$davPath}"; $this->response = HttpRequestHelper::sendRequest( $url, $this->getStepLineRef(), @@ -1532,10 +1447,6 @@ trait WebDav { ?string $spaceId = null, string $type = "files" ):ResponseInterface { - if ($this->customDavPath !== null) { - $path = $this->customDavPath . $path; - } - return WebDavHelper::listFolder( $this->getBaseUrl(), $this->getActualUsername($user), @@ -1844,9 +1755,9 @@ trait WebDav { $noOfChunks, "What does it mean to have $noOfChunks chunks?" ); - //use the chunking version that works with the set DAV version + // use the chunking version that works with the set DAV version if ($chunkingVersion === null) { - if ($this->usingOldDavPath || $this->usingSpacesDavPath) { + if (\in_array($this->currentDAVPath, [WebDavHelper::DAV_VERSION_OLD, WebDavHelper::DAV_VERSION_SPACES])) { $chunkingVersion = "v1"; } else { $chunkingVersion = "v2"; @@ -2297,6 +2208,11 @@ trait WebDav { ): ResponseInterface { $user = $this->getActualUsername($user); $this->pauseUploadDelete(); + + if (\str_starts_with($destination, "Shares/") && $this->getDavPathVersion() === WebDavHelper::DAV_VERSION_SPACES) { + $spaceId = $this->spacesContext->getSpaceIdByName($user, "Shares"); + $destination = \str_replace("Shares/", "", $destination); + } $response = $this->makeDavRequest( $user, "PUT", @@ -2731,21 +2647,23 @@ trait WebDav { } /** - * @When user :user deletes file :filename from space :space using file-id path :davPath + * @When user :user deletes file :filename from space :space using file-id :fileId * * @param string $user * @param string $filename * @param string $space - * @param string $davPath + * @param string $fileId * * @return void */ - public function userDeletesFileFromSpaceUsingFileIdPath(string $user, string $filename, string $space, string $davPath):void { - $requestUrl = $this->getBaseUrl() . $davPath; + public function userDeletesFileFromSpaceUsingFileIdPath(string $user, string $filename, string $space, string $fileId):void { + $baseUrl = $this->getBaseUrl(); + $davPath = WebDavHelper::getDavPath($this->getDavPathVersion()); $user = $this->getActualUsername($user); $password = $this->getPasswordForUser($user); + $fullUrl = "$baseUrl/$davPath/$fileId"; $response = HttpRequestHelper::sendRequest( - $requestUrl, + $fullUrl, null, 'DELETE', $user, @@ -3764,7 +3682,7 @@ trait WebDav { * @return void */ public function userDownloadsThePreviewOfSharedResourceWithWidthAndHeightUsingTheWebdavApi(string $user, string $path, string $width, string $height): void { - if ($this->getDavPathVersion() === 3) { + if ($this->getDavPathVersion() === WebDavHelper::DAV_VERSION_SPACES) { $this->setResponse($this->downloadSharedFilePreview($user, $path, $width, $height)); } else { $this->setResponse($this->downloadPreviews($user, $path, null, $width, $height)); @@ -3817,7 +3735,7 @@ trait WebDav { * @return void */ public function userHasDownloadedThePreviewOfSharedResourceWithWidthAndHeight(string $user, string $path, string $width, string $height): void { - if ($this->getDavPathVersion() === 3) { + if ($this->getDavPathVersion() === WebDavHelper::DAV_VERSION_SPACES) { $response = $this->downloadSharedFilePreview($user, $path, $width, $height); } else { $response = $this->downloadPreviews($user, $path, null, $width, $height); @@ -3841,7 +3759,7 @@ trait WebDav { * @return void */ public function asUserThePreviewOfSharedResourceWithWidthAndHeightShouldHaveBeenChanged(string $user, string $path, string $width, string $height):void { - if ($this->getDavPathVersion() === 3) { + if ($this->getDavPathVersion() === WebDavHelper::DAV_VERSION_SPACES) { $response = $this->downloadSharedFilePreview($user, $path, $width, $height); } else { $response = $this->downloadPreviews($user, $path, null, $width, $height); @@ -3870,11 +3788,7 @@ trait WebDav { * @return void */ public function userUploadsFileWithContentSharedResourceToUsingTheWebdavApi(string $user, string $content, string $destination): void { - if ($this->getDavPathVersion() === 3) { - $this->setResponse($this->uploadToSharedFolder($user, $destination, $content)); - } else { - $this->setResponse($this->uploadFileWithContent($user, $content, $destination, null)); - } + $this->setResponse($this->uploadFileWithContent($user, $content, $destination)); } /** @@ -3933,10 +3847,17 @@ trait WebDav { } else { $urlParameter = null; } - $sharesPath = $this->getSharesMountPath($user, $path) . '/?' . $urlParameter; - $davPath = WebDavHelper::getDavPath($user, $this->getDavPathVersion()); - $fullUrl = $this->getBaseUrl() . "/$davPath" . $sharesPath; + $davPathVersion = $this->getDavPathVersion(); + $uniquePath = $user; + if ($davPathVersion === WebDavHelper::DAV_VERSION_SPACES) { + $uniquePath = $this->getSharesMountPath($user, $path); + $path = ""; + } + $path = \ltrim($path, "/"); + $davPath = WebDavHelper::getDavPath($this->getDavPathVersion(), $uniquePath); + $davPath = \rtrim($davPath, "/"); + $fullUrl = $this->getBaseUrl() . "/$davPath/$path?$urlParameter"; return HttpRequestHelper::sendRequest( $fullUrl, @@ -3948,50 +3869,21 @@ trait WebDav { } /** + * @When user :user downloads the preview of :path of :ofUser with width :width and height :height using the WebDAV API + * * @param string $user - * @param string $destination - * @param string|null $content - * - * @return ResponseInterface - * @throws GuzzleException - */ - public function uploadToSharedFolder( - string $user, - string $destination, - ?string $content = null - ): ResponseInterface { - $sharesPath = $this->getSharesMountPath($user, $destination); - - $davPath = WebDavHelper::getDavPath($user, $this->getDavPathVersion()); - $fullUrl = $this->getBaseUrl() . "/$davPath" . $sharesPath; - - return HttpRequestHelper::sendRequest( - $fullUrl, - $this->getStepLineRef(), - 'PUT', - $user, - $this->getPasswordForUser($user), - null, - $content - ); - } - - /** - * @When user :user1 downloads the preview of :path of :user2 with width :width and height :height using the WebDAV API - * - * @param string $user1 * @param string $path - * @param string $doDavRequestAsUser + * @param string $ofUser * @param string $width * @param string $height * * @return void */ - public function downloadPreviewOfOtherUser(string $user1, string $path, string $doDavRequestAsUser, string $width, string $height):void { + public function downloadPreviewOfOtherUser(string $user, string $path, string $ofUser, string $width, string $height):void { $response = $this->downloadPreviews( - $user1, + $ofUser, $path, - $doDavRequestAsUser, + $user, $width, $height ); @@ -4193,9 +4085,7 @@ trait WebDav { ?string $folderpath = '', ?string $spaceId = null ):void { - if ($folderpath === "/") { - $folderpath = ""; - } + $folderpath = \trim($folderpath, "/"); $this->verifyTableNodeColumnsCount($expectedFiles, 1); $elementRows = $expectedFiles->getRows(); $should = ($shouldOrNot !== "not"); @@ -4478,10 +4368,10 @@ trait WebDav { public function theLastPublicDavResponseShouldContainTheseNodes(TableNode $table):void { $token = ($this->isUsingSharingNG()) ? $this->shareNgGetLastCreatedLinkShareToken() : $this->getLastCreatedPublicShareToken(); $this->verifyTableNodeColumns($table, ["name"]); - $type = $this->usingOldDavPath ? "public-files" : "public-files-new"; + foreach ($table->getHash() as $row) { $path = $this->substituteInLineCodes($row['name']); - $res = $this->findEntryFromPropfindResponse($path, $token, $type); + $res = $this->findEntryFromPropfindResponse($path, $token, "public-files"); Assert::assertNotFalse($res, "expected $path to be in DAV response but was not found"); } } @@ -4497,10 +4387,10 @@ trait WebDav { public function theLastPublicDavResponseShouldNotContainTheseNodes(TableNode $table):void { $token = ($this->isUsingSharingNG()) ? $this->shareNgGetLastCreatedLinkShareToken() : $this->getLastCreatedPublicShareToken(); $this->verifyTableNodeColumns($table, ["name"]); - $type = $this->usingOldDavPath ? "public-files" : "public-files-new"; + foreach ($table->getHash() as $row) { $path = $this->substituteInLineCodes($row['name']); - $res = $this->findEntryFromPropfindResponse($path, $token, $type); + $res = $this->findEntryFromPropfindResponse($path, $token, "public-files"); Assert::assertFalse($res, "expected $path to not be in DAV response but was found"); } } @@ -4515,13 +4405,14 @@ trait WebDav { */ public function thePublicListsTheResourcesInTheLastCreatedPublicLinkWithDepthUsingTheWebdavApi(string $depth):void { $token = ($this->isUsingSharingNG()) ? $this->shareNgGetLastCreatedLinkShareToken() : $this->getLastCreatedPublicShareToken(); + // https://drone.owncloud.com/owncloud/ocis/39693/29/6 $response = $this->listFolder( $token, '/', $depth, null, null, - $this->usingOldDavPath ? "public-files" : "public-files-new" + "public-files" ); $this->setResponse($response); $this->setResponseXml(HttpRequestHelper::parseResponseAsXml($this->response)); @@ -4533,7 +4424,7 @@ trait WebDav { * @return array */ public function findEntryFromReportResponse(?string $user):array { - $responseXmlObj = $this->getResponseXmlObject(); + $responseXmlObj = $this->getResponseXml(); $responseResources = []; $hrefs = $responseXmlObj->xpath('//d:href'); foreach ($hrefs as $href) { @@ -4648,16 +4539,13 @@ trait WebDav { } // url encode for spaces and brackets that may appear in the filePath $folderPath = $this->escapePath($folderPath); - // topWebDavPath should be something like /remote.php/webdav/ or - // /remote.php/dav/files/alice/ + // topWebDavPath should be something like '/webdav/' or '/dav/files/{user}/' $topWebDavPath = "/" . $this->getFullDavFilesPath($user, $spaceId) . "/" . $folderPath; switch ($type) { case "files": break; case "public-files": - case "public-files-old": - case "public-files-new": - $topWebDavPath = "/" . $this->getPublicLinkDavPath($user, $type) . "/"; + $topWebDavPath = "/" . $this->getPublicLinkDavPath($user) . "/"; break; default: throw new Exception("error"); @@ -4705,18 +4593,27 @@ trait WebDav { if ($entryNameToSearch !== null) { $entryNameToSearch = \trim($entryNameToSearch, "/"); } - $spacesBaseUrl = "/" . webDavHelper::getDavPath(null, webDavHelper::DAV_VERSION_SPACES, 'files', $spaceId); + + $spacesBaseUrl = "/" . WebDavHelper::getDavPath($this->getDavPathVersion(), $spaceId); + $spacesBaseUrl = \rtrim($spacesBaseUrl, "/") . "/"; + $hrefRegex = \preg_quote($spacesBaseUrl, "/"); + if (\in_array($this->getDavPathVersion(), [WebDavHelper::DAV_VERSION_SPACES, WebDavHelper::DAV_VERSION_NEW]) + && !GraphHelper::isSpaceId($entryNameToSearch ?? '') + ) { + $hrefRegex .= "[a-zA-Z0-9-_$!:%]+"; + } + $hrefRegex = "/^" . $hrefRegex . "/"; + $searchResults = $this->getResponseXml()->xpath("//d:multistatus/d:response"); $results = []; foreach ($searchResults as $item) { $href = (string)$item->xpath("d:href")[0]; $shareRootXml = $item->xpath("d:propstat//oc:shareroot"); - $href = \str_replace($spacesBaseUrl, "", $href); - $resourcePath = $href; + $resourcePath = \preg_replace($hrefRegex, "", $href); // do not try to parse the resource path // if the item to search is space itself if (!GraphHelper::isSpaceId($entryNameToSearch ?? '')) { - $resourcePath = \substr($href, \strpos($href, '/') + 1); + $resourcePath = \substr($resourcePath, \strpos($resourcePath, '/') + 1); } if (\count($shareRootXml)) { $shareroot = \trim((string)$shareRootXml[0], "/"); @@ -4787,7 +4684,7 @@ trait WebDav { */ public function checkAuthorOfAVersionOfFile(string $index, string $expectedUsername):void { $expectedUserDisplayName = $this->getUserDisplayName($expectedUsername); - $resXml = $this->getResponseXmlObject(); + $resXml = $this->getResponseXml(); if ($resXml === null) { $resXml = HttpRequestHelper::getResponseXml( $this->getResponse(), diff --git a/tests/acceptance/bootstrap/WebDavLockingContext.php b/tests/acceptance/bootstrap/WebDavLockingContext.php index 17555df351..29b073af6d 100644 --- a/tests/acceptance/bootstrap/WebDavLockingContext.php +++ b/tests/acceptance/bootstrap/WebDavLockingContext.php @@ -71,9 +71,8 @@ class WebDavLockingContext implements Context { ?string $spaceId = null ):ResponseInterface { $user = $this->featureContext->getActualUsername($user); - $baseUrl = $this->featureContext->getBaseUrl(); if ($public === true) { - $type = "public-files-new"; + $type = "public-files"; $password = $this->featureContext->getActualPassword("%public%"); } else { $type = "files"; @@ -108,6 +107,7 @@ class WebDavLockingContext implements Context { $body ); } else { + $baseUrl = $this->featureContext->getBaseUrl(); $response = WebDavHelper::makeDavRequest( $baseUrl, $user, @@ -145,7 +145,12 @@ class WebDavLockingContext implements Context { * @return void */ public function userLocksFileSettingPropertiesUsingWebDavAPI(string $user, string $file, TableNode $properties) { - $response = $this->lockFile($user, $file, $properties); + $spaceId = null; + if (\str_starts_with($file, "Shares/") && $this->featureContext->getDavPathVersion() === WebDavHelper::DAV_VERSION_SPACES) { + $spaceId = $this->spacesContext->getSpaceIdByName($user, "Shares"); + $file = \str_replace("Shares/", "", $file); + } + $response = $this->lockFile($user, $file, $properties, null, false, true, $spaceId); $this->featureContext->setResponse($response); } @@ -190,7 +195,15 @@ class WebDavLockingContext implements Context { */ public function userLocksFileInProjectSpace(string $user, string $file, string $space, TableNode $properties): ?ResponseInterface { $spaceId = $this->spacesContext->getSpaceIdByName($user, $space); - $fullUrl = $this->featureContext->getBaseUrl() . '/dav/spaces/' . $spaceId . '/' . $file; + $baseUrl = $this->featureContext->getBaseUrl(); + $davPathVersion = $this->featureContext->getDavPathVersion(); + $uniquePath = $user; + if ($davPathVersion === WebDavHelper::DAV_VERSION_SPACES) { + $uniquePath = $spaceId; + } + + $davPath = WebDavHelper::getDavPath($davPathVersion, $uniquePath); + $fullUrl = "$baseUrl/$davPath/$file"; return $this->lockFile($user, $file, $properties, $fullUrl, false, true, $spaceId); } @@ -222,39 +235,50 @@ class WebDavLockingContext implements Context { */ public function userTriesToLockFileInProjectSpaceUsingWebDavAPI(string $user, string $file, string $space, TableNode $properties) { $spaceId = $this->spacesContext->getSpaceIdByName($user, $space); - $fullUrl = $this->featureContext->getBaseUrl() . '/dav/spaces/' . $spaceId . '/' . $file; + $davPathVersion = $this->featureContext->getDavPathVersion(); + $uniquePath = $user; + if ($davPathVersion === WebDavHelper::DAV_VERSION_SPACES) { + $uniquePath = $spaceId; + } + + $davPath = WebdavHelper::getDavPath($davPathVersion, $uniquePath); + $fullUrl = $this->featureContext->getBaseUrl() . "/$davPath/$file"; $response = $this->lockFile($user, $file, $properties, $fullUrl, false, false, $spaceId); $this->featureContext->setResponse($response); } /** - * @When user :user locks file :file using file-id path :path using the WebDAV API setting the following properties + * @When user :user locks file :file using file-id :fileId using the WebDAV API setting the following properties * * @param string $user * @param string $file - * @param string $filePath + * @param string $fileId * @param TableNode $properties table with no heading with | property | value | * * @return void */ - public function userLocksFileUsingFileIdUsingWebDavAPI(string $user, string $file, string $filePath, TableNode $properties) { - $fullUrl = $this->featureContext->getBaseUrl() . $filePath; + public function userLocksFileUsingFileIdUsingWebDavAPISettingFollowingProperties(string $user, string $file, string $fileId, TableNode $properties) { + $davPath = WebdavHelper::getDavPath($this->featureContext->getDavPathVersion()); + $davPath = \rtrim($davPath, '/'); + $fullUrl = $this->featureContext->getBaseUrl() . "/$davPath/$fileId"; $response = $this->lockFile($user, $file, $properties, $fullUrl); $this->featureContext->setResponse($response); } /** - * @When user :user tries to lock file :file using file-id path :path using the WebDAV API setting the following properties + * @When user :user tries to lock file :file using file-id :fileId using the WebDAV API setting the following properties * * @param string $user * @param string $file - * @param string $filePath + * @param string $fileId * @param TableNode $properties table with no heading with | property | value | * * @return void */ - public function userTriesToLockFileUsingFileIdUsingWebDavAPI(string $user, string $file, string $filePath, TableNode $properties) { - $fullUrl = $this->featureContext->getBaseUrl() . $filePath; + public function userTriesToLockFileUsingFileIdUsingWebDavAPI(string $user, string $file, string $fileId, TableNode $properties) { + $davPath = WebdavHelper::getDavPath($this->featureContext->getDavPathVersion()); + $davPath = \rtrim($davPath, '/'); + $fullUrl = $this->featureContext->getBaseUrl() . "/$davPath/$fileId"; $response = $this->lockFile($user, $file, $properties, $fullUrl, false, false); $this->featureContext->setResponse($response); } @@ -290,17 +314,19 @@ class WebDavLockingContext implements Context { } /** - * @Given user :user has locked file :file using file-id path :path setting the following properties + * @Given user :user has locked file :file using file-id :fileId setting the following properties * * @param string $user * @param string $file - * @param string $filePath + * @param string $fileId * @param TableNode $properties table with no heading with | property | value | * * @return void */ - public function userHasLockedFileUsingFileId(string $user, string $file, string $filePath, TableNode $properties) { - $fullUrl = $this->featureContext->getBaseUrl() . $filePath; + public function userHasLockedFileUsingFileId(string $user, string $file, string $fileId, TableNode $properties) { + $davPath = WebdavHelper::getDavPath($this->featureContext->getDavPathVersion()); + $davPath = \rtrim($davPath, '/'); + $fullUrl = $this->featureContext->getBaseUrl() . "/$davPath/$fileId"; $response = $this->lockFile($user, $file, $properties, $fullUrl); $this->featureContext->theHTTPStatusCodeShouldBe(200, '', $response); } @@ -436,16 +462,18 @@ class WebDavLockingContext implements Context { } /** - * @When user :user unlocks the last created lock of file :itemToUnlock using file-id path :filePath using the WebDAV API + * @When user :user unlocks the last created lock of file :itemToUnlock using file-id :fileId using the WebDAV API * * @param string $user * @param string $itemToUnlock - * @param string $filePath + * @param string $fileId * * @return void */ - public function userUnlocksTheLastCreatedLockOfFileWithFileIdPathUsingTheWebdavApi(string $user, string $itemToUnlock, string $filePath) { - $fullUrl = $this->featureContext->getBaseUrl() . $filePath; + public function userUnlocksTheLastCreatedLockOfFileWithFileIdPathUsingTheWebdavApi(string $user, string $itemToUnlock, string $fileId) { + $davPath = WebdavHelper::getDavPath($this->featureContext->getDavPathVersion()); + $davPath = \rtrim($davPath, '/'); + $fullUrl = $this->featureContext->getBaseUrl() . "/$davPath/$fileId"; $response = $this->unlockItemWithLastLockOfUserAndItemUsingWebDavAPI($user, $itemToUnlock, $user, $itemToUnlock, false, $fullUrl); $this->featureContext->setResponse($response); } @@ -603,7 +631,7 @@ class WebDavLockingContext implements Context { $user = $this->featureContext->getActualUsername($user); $lockOwner = $this->featureContext->getActualUsername($lockOwner); if ($public === true) { - $type = "public-files-new"; + $type = "public-files"; $password = $this->featureContext->getActualPassword("%public%"); } else { $type = "files"; diff --git a/tests/acceptance/bootstrap/WebDavPropertiesContext.php b/tests/acceptance/bootstrap/WebDavPropertiesContext.php index 543e5d5b81..7ab4ab23ab 100644 --- a/tests/acceptance/bootstrap/WebDavPropertiesContext.php +++ b/tests/acceptance/bootstrap/WebDavPropertiesContext.php @@ -272,7 +272,7 @@ class WebDavPropertiesContext implements Context { '0', $properties, null, - $this->featureContext->getDavPathVersion() === 1 ? "public-files" : "public-files-new" + "public-files" ); } @@ -727,6 +727,8 @@ class WebDavPropertiesContext implements Context { */ public function valueOfItemOfPathShouldBe(string $user, string $xpath, string $path, string $expectedValue):void { $path = $this->featureContext->substituteInLineCodes($path, $user); + $path = \ltrim($path, '/'); + $path = "/" . WebdavHelper::withRemotePhp($path); $fullXpath = "//d:response/d:href[.='$path']/following-sibling::d:propstat$xpath"; $this->assertValueOfItemInResponseAboutUserIs( $fullXpath, @@ -769,8 +771,8 @@ class WebDavPropertiesContext implements Context { ); // The expected value can contain /%base_path%/ which can be empty some time - // This will result in urls such as //remote.php, so replace that - $expectedValue = preg_replace("/\/\/remote\.php/i", "/remote.php", $expectedValue); + // This will result in urls starting from '//', so replace that with single'/' + $expectedValue = preg_replace("/^\/\//i", "/", $expectedValue); Assert::assertEquals( $expectedValue, $value, @@ -811,9 +813,9 @@ class WebDavPropertiesContext implements Context { ); // The expected value can contain /%base_path%/ which can be empty some time - // This will result in urls such as //remote.php, so replace that - $expectedValue1 = preg_replace("/\/\/remote\.php/i", "/remote.php", $expectedValue1); - $expectedValue2 = preg_replace("/\/\/remote\.php/i", "/remote.php", $expectedValue2); + // This will result in urls starting from '//', so replace that with single'/' + $expectedValue1 = preg_replace("/^\/\//i", "/", $expectedValue1); + $expectedValue2 = preg_replace("/^\/\//i", "/", $expectedValue2); $expectedValues = [$expectedValue1, $expectedValue2]; $isExpectedValueInMessage = \in_array($value, $expectedValues); Assert::assertTrue($isExpectedValueInMessage, "The actual value \"$value\" is not one of the expected values: \"$expectedValue1\" or \"$expectedValue2\""); @@ -896,6 +898,7 @@ class WebDavPropertiesContext implements Context { $user, ['preg_quote' => ['/']] ); + $expectedHref = WebdavHelper::withRemotePhp($expectedHref); $index = 0; while (true) { @@ -909,16 +912,12 @@ class WebDavPropertiesContext implements Context { ); $value = $xmlPart[0]->__toString(); $decodedValue = \rawurldecode($value); - // for folders, decoded value will be like: "/owncloud/core/remote.php/webdav/strängé folder/" - // expected href should be like: "remote.php/webdav/strängé folder/" - // for files, decoded value will be like: "/owncloud/core/remote.php/webdav/strängé folder/file.txt" - // expected href should be like: "remote.php/webdav/strängé folder/file.txt" $explodeDecoded = \explode('/', $decodedValue); // get the first item of the expected href. - // i.e. remote.php from "remote.php/webdav/strängé folder/file.txt" - // or dav from "dav/spaces/%spaceid%/C++ file.cpp" - $explodeExpected = \explode('/', $expectedHref); - $remotePhpIndex = \array_search($explodeExpected[0], $explodeDecoded); + // 'dav' from "dav/spaces/%spaceid%/C++ file.cpp" + $explodeExpected = \explode('/', $expectedHref)[0]; + + $remotePhpIndex = \array_search($explodeExpected, $explodeDecoded); if ($remotePhpIndex) { $explodedHrefPartArray = \array_slice($explodeDecoded, $remotePhpIndex); $actualHrefPart = \implode('/', $explodedHrefPartArray); @@ -955,6 +954,14 @@ class WebDavPropertiesContext implements Context { $user = $this->featureContext->getActualUsername($user); $value = $xmlPart[0]->__toString(); $callback = ($this->featureContext->isUsingSharingNG()) ? "shareNgGetLastCreatedLinkShareToken" : "getLastCreatedPublicShareToken"; + + if (\str_ends_with($xpath, "d:href")) { + $pattern = \preg_replace("/^\//", "", $pattern); + $pattern = \preg_replace("/^\^/", "", $pattern); + $pattern = \ltrim($pattern, "\/"); + $withRemotePhp = \rtrim(WebdavHelper::withRemotePhp(""), "/"); + $pattern = "/^\/{$withRemotePhp}\/{$pattern}"; + } $pattern = $this->featureContext->substituteInLineCodes( $pattern, $user, diff --git a/tests/acceptance/config/behat.yml b/tests/acceptance/config/behat.yml index adefa793fe..35b72f4330 100644 --- a/tests/acceptance/config/behat.yml +++ b/tests/acceptance/config/behat.yml @@ -14,11 +14,11 @@ default: ldapInitialUserFilePath: /../config/ldap-users.ldif contexts: - FeatureContext: &common_feature_context_params - baseUrl: http://localhost:8080 + baseUrl: http://localhost:8080 # TODO: clean me adminUsername: admin adminPassword: admin regularUserPassword: 123456 - ocPath: apps/testing/api/v1/occ + ocPath: apps/testing/api/v1/occ # TODO: clean me - SettingsContext: - GraphContext: - SpacesContext: diff --git a/tests/acceptance/expected-failures-API-on-OCIS-storage.md b/tests/acceptance/expected-failures-API-on-OCIS-storage.md index a9e687d791..8f59714af7 100644 --- a/tests/acceptance/expected-failures-API-on-OCIS-storage.md +++ b/tests/acceptance/expected-failures-API-on-OCIS-storage.md @@ -168,6 +168,27 @@ _ocdav: api compatibility, return correct status code_ - [coreApiWebdavProperties/copyFile.feature:1068](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties/copyFile.feature#L1068) - [coreApiWebdavProperties/copyFile.feature:1069](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties/copyFile.feature#L1069) +#### [same href in REPORT request for all dav-path-version](https://github.com/owncloud/ocis/issues/7060) + +- [coreApiWebdavOperations/search.feature:42](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L42) +- [coreApiWebdavOperations/search.feature:43](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L43) +- [coreApiWebdavOperations/search.feature:60](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L60) +- [coreApiWebdavOperations/search.feature:61](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L61) +- [coreApiWebdavOperations/search.feature:79](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L79) +- [coreApiWebdavOperations/search.feature:80](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L80) +- [coreApiWebdavOperations/search.feature:110](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L110) +- [coreApiWebdavOperations/search.feature:111](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L111) +- [coreApiWebdavOperations/search.feature:130](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L130) +- [coreApiWebdavOperations/search.feature:131](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L131) +- [coreApiWebdavOperations/search.feature:151](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L151) +- [coreApiWebdavOperations/search.feature:152](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L152) +- [coreApiWebdavOperations/search.feature:229](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L229) +- [coreApiWebdavOperations/search.feature:230](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L230) + +#### [Trying to restore personal file to share received folder deletes shared file]() + +- [coreApiTrashbin/trashbinSharingToShares.feature:271](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinSharingToShares.feature#L271) + ### Won't fix Not everything needs to be implemented for ocis. While the oc10 testsuite covers these things we are not looking at them right now. diff --git a/tests/acceptance/expected-failures-localAPI-on-OCIS-storage.md b/tests/acceptance/expected-failures-localAPI-on-OCIS-storage.md index 6ada712dfb..e13a79058e 100644 --- a/tests/acceptance/expected-failures-localAPI-on-OCIS-storage.md +++ b/tests/acceptance/expected-failures-localAPI-on-OCIS-storage.md @@ -84,24 +84,24 @@ The expected failures in this file are from features in the owncloud/ocis repo. #### [Shared file locking is not possible using different path](https://github.com/owncloud/ocis/issues/7599) -- [apiLocks/lockFiles.feature:188](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L188) -- [apiLocks/lockFiles.feature:189](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L189) -- [apiLocks/lockFiles.feature:190](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L190) -- [apiLocks/lockFiles.feature:311](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L311) -- [apiLocks/lockFiles.feature:312](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L312) -- [apiLocks/lockFiles.feature:313](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L313) +- [apiLocks/lockFiles.feature:185](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L185) +- [apiLocks/lockFiles.feature:186](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L186) +- [apiLocks/lockFiles.feature:187](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L187) +- [apiLocks/lockFiles.feature:308](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L308) +- [apiLocks/lockFiles.feature:309](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L309) +- [apiLocks/lockFiles.feature:310](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L310) +- [apiLocks/lockFiles.feature:363](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L363) +- [apiLocks/lockFiles.feature:364](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L364) +- [apiLocks/lockFiles.feature:365](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L365) - [apiLocks/lockFiles.feature:366](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L366) - [apiLocks/lockFiles.feature:367](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L367) - [apiLocks/lockFiles.feature:368](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L368) -- [apiLocks/lockFiles.feature:369](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L369) -- [apiLocks/lockFiles.feature:370](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L370) -- [apiLocks/lockFiles.feature:371](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L371) +- [apiLocks/lockFiles.feature:398](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L398) +- [apiLocks/lockFiles.feature:399](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L399) +- [apiLocks/lockFiles.feature:400](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L400) - [apiLocks/lockFiles.feature:401](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L401) - [apiLocks/lockFiles.feature:402](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L402) - [apiLocks/lockFiles.feature:403](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L403) -- [apiLocks/lockFiles.feature:404](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L404) -- [apiLocks/lockFiles.feature:405](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L405) -- [apiLocks/lockFiles.feature:406](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L406) - [apiLocks/unlockFiles.feature:62](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/unlockFiles.feature#L62) - [apiLocks/unlockFiles.feature:63](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/unlockFiles.feature#L63) - [apiLocks/unlockFiles.feature:64](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/unlockFiles.feature#L64) @@ -126,18 +126,18 @@ The expected failures in this file are from features in the owncloud/ocis repo. #### [Folders can be locked and locking works partially](https://github.com/owncloud/ocis/issues/7641) +- [apiLocks/lockFiles.feature:442](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L442) +- [apiLocks/lockFiles.feature:443](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L443) +- [apiLocks/lockFiles.feature:444](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L444) - [apiLocks/lockFiles.feature:445](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L445) - [apiLocks/lockFiles.feature:446](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L446) - [apiLocks/lockFiles.feature:447](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L447) -- [apiLocks/lockFiles.feature:448](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L448) -- [apiLocks/lockFiles.feature:449](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L449) -- [apiLocks/lockFiles.feature:450](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L450) +- [apiLocks/lockFiles.feature:416](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L416) +- [apiLocks/lockFiles.feature:417](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L417) +- [apiLocks/lockFiles.feature:418](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L418) - [apiLocks/lockFiles.feature:419](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L419) - [apiLocks/lockFiles.feature:420](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L420) - [apiLocks/lockFiles.feature:421](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L421) -- [apiLocks/lockFiles.feature:422](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L422) -- [apiLocks/lockFiles.feature:423](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L423) -- [apiLocks/lockFiles.feature:424](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L424) #### [Anonymous users can unlock a file shared to them through a public link if they get the lock token](https://github.com/owncloud/ocis/issues/7761) @@ -165,18 +165,14 @@ The expected failures in this file are from features in the owncloud/ocis repo. #### [Anonymous user trying lock a file shared to them through a public link gives 405](https://github.com/owncloud/ocis/issues/7790) -- [apiLocks/lockFiles.feature:538](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L538) -- [apiLocks/lockFiles.feature:539](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L539) -- [apiLocks/lockFiles.feature:540](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L540) -- [apiLocks/lockFiles.feature:541](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L541) -- [apiLocks/lockFiles.feature:542](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L542) -- [apiLocks/lockFiles.feature:543](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L543) -- [apiLocks/lockFiles.feature:562](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L562) -- [apiLocks/lockFiles.feature:563](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L563) -- [apiLocks/lockFiles.feature:564](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L564) -- [apiLocks/lockFiles.feature:565](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L565) -- [apiLocks/lockFiles.feature:566](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L566) -- [apiLocks/lockFiles.feature:567](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L567) +- [apiLocks/lockFiles.feature:531](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L531) +- [apiLocks/lockFiles.feature:532](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L532) +- [apiLocks/lockFiles.feature:533](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L533) +- [apiLocks/lockFiles.feature:534](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L534) +- [apiLocks/lockFiles.feature:553](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L553) +- [apiLocks/lockFiles.feature:554](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L554) +- [apiLocks/lockFiles.feature:555](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L555) +- [apiLocks/lockFiles.feature:556](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L556) #### [blocksDownload link type is not implemented yet (sharing-ng)](https://github.com/owncloud/ocis/issues/7879) @@ -233,39 +229,30 @@ The expected failures in this file are from features in the owncloud/ocis repo. #### [sharee (editor role) MOVE a file by file-id into shared sub-folder returns 502](https://github.com/owncloud/ocis/issues/7617) -- [apiSpacesDavOperation/moveByFileId.feature:469](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesDavOperation/moveByFileId.feature#L469) -- [apiSpacesDavOperation/moveByFileId.feature:470](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesDavOperation/moveByFileId.feature#L470) -- [apiSpacesDavOperation/moveByFileId.feature:732](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesDavOperation/moveByFileId.feature#L732) -- [apiSpacesDavOperation/moveByFileId.feature:733](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesDavOperation/moveByFileId.feature#L733) +- [apiSpacesDavOperation/moveByFileId.feature:368](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesDavOperation/moveByFileId.feature#L368) +- [apiSpacesDavOperation/moveByFileId.feature:591](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesDavOperation/moveByFileId.feature#L591) #### [MOVE a file into same folder with same name returns 404 instead of 403](https://github.com/owncloud/ocis/issues/1976) - [apiSpacesShares/moveSpaces.feature:69](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesShares/moveSpaces.feature#L69) - [apiSpacesShares/moveSpaces.feature:70](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesShares/moveSpaces.feature#L70) - [apiSpacesShares/moveSpaces.feature:416](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesShares/moveSpaces.feature#L416) -- [apiSpacesDavOperation/moveByFileId.feature:86](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesDavOperation/moveByFileId.feature#L86) -- [apiSpacesDavOperation/moveByFileId.feature:87](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesDavOperation/moveByFileId.feature#L87) -- [apiSpacesDavOperation/moveByFileId.feature:205](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesDavOperation/moveByFileId.feature#L205) -- [apiSpacesDavOperation/moveByFileId.feature:206](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesDavOperation/moveByFileId.feature#L206) -- [apiSpacesDavOperation/moveByFileId.feature:207](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesDavOperation/moveByFileId.feature#L207) -- [apiSpacesDavOperation/moveByFileId.feature:208](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesDavOperation/moveByFileId.feature#L208) -- [apiSpacesDavOperation/moveByFileId.feature:209](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesDavOperation/moveByFileId.feature#L209) -- [apiSpacesDavOperation/moveByFileId.feature:210](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesDavOperation/moveByFileId.feature#L210) -- [apiSpacesDavOperation/moveByFileId.feature:492](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesDavOperation/moveByFileId.feature#L492) -- [apiSpacesDavOperation/moveByFileId.feature:493](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesDavOperation/moveByFileId.feature#L493) +- [apiSpacesDavOperation/moveByFileId.feature:61](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesDavOperation/moveByFileId.feature#L61) +- [apiSpacesDavOperation/moveByFileId.feature:174](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesDavOperation/moveByFileId.feature#L174) +- [apiSpacesDavOperation/moveByFileId.feature:175](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesDavOperation/moveByFileId.feature#L175) +- [apiSpacesDavOperation/moveByFileId.feature:176](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesDavOperation/moveByFileId.feature#L176) +- [apiSpacesDavOperation/moveByFileId.feature:393](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesDavOperation/moveByFileId.feature#L393) #### [OCM. admin cannot get federated users if he hasn't connection with them ](https://github.com/owncloud/ocis/issues/9829) - [apiOcm/searchFederationUsers.feature:429](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiOcm/searchFederationUsers.feature#L429) - [apiOcm/searchFederationUsers.feature:601](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiOcm/searchFederationUsers.feature#L601) - #### [OCM. federated connection is not dropped when one of the users deletes the connection](https://github.com/owncloud/ocis/issues/10216) - [apiOcm/deleteFederatedConnections.feature:39](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiOcm/deleteFederatedConnections.feature#L39) - [apiOcm/deleteFederatedConnections.feature:66](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiOcm/deleteFederatedConnections.feature#L66) - #### [OCM. server crash after deleting share for ocm user](https://github.com/owncloud/ocis/issues/10213) - [apiOcm/deleteFederatedConnections.feature:103](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiOcm/deleteFederatedConnections.feature#L103) @@ -276,5 +263,66 @@ The expected failures in this file are from features in the owncloud/ocis repo. - [apiOcm/share.feature:232](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiOcm/share.feature#L232) - [apiOcm/share.feature:233](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiOcm/share.feature#L233) +#### [same href in REPORT request for all dav-path-version](https://github.com/owncloud/ocis/issues/7060) + +- [apiSearch1/dateSearch.feature:17](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/dateSearch.feature#L17) +- [apiSearch1/dateSearch.feature:18](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/dateSearch.feature#L18) +- [apiSearch1/search.feature:41](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L41) +- [apiSearch1/search.feature:42](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L42) +- [apiSearch1/search.feature:69](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L69) +- [apiSearch1/search.feature:70](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L70) +- [apiSearch1/search.feature:111](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L111) +- [apiSearch1/search.feature:112](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L112) +- [apiSearch1/search.feature:197](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L197) +- [apiSearch1/search.feature:198](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L198) +- [apiSearch1/search.feature:221](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L221) +- [apiSearch1/search.feature:222](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L222) +- [apiSearch1/search.feature:242](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L242) +- [apiSearch1/search.feature:243](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L243) +- [apiSearch1/search.feature:260](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L260) +- [apiSearch1/search.feature:261](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L261) +- [apiSearch1/search.feature:278](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L278) +- [apiSearch1/search.feature:279](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L279) +- [apiSearch1/search.feature:302](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L302) +- [apiSearch1/search.feature:303](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L303) +- [apiSearch1/search.feature:354](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L354) +- [apiSearch1/search.feature:355](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L355) +- [apiSearch2/tagSearch.feature:34](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L34) +- [apiSearch2/tagSearch.feature:35](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L35) +- [apiSearch2/tagSearch.feature:62](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L62) +- [apiSearch2/tagSearch.feature:63](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L63) +- [apiSearch2/tagSearch.feature:87](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L87) +- [apiSearch2/tagSearch.feature:88](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L88) +- [apiSearch2/tagSearch.feature:110](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L110) +- [apiSearch2/tagSearch.feature:111](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L111) +- [apiSearch2/tagSearch.feature:144](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L144) +- [apiSearch2/tagSearch.feature:145](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L145) +- [apiSearch2/tagSearch.feature:182](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L182) +- [apiSearch2/tagSearch.feature:183](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L183) +- [apiSearch2/tagSearch.feature:222](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L222) +- [apiSearch2/tagSearch.feature:223](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L223) +- [apiSearch2/tagSearch.feature:241](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L241) +- [apiSearch2/tagSearch.feature:242](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L242) +- [apiSearchContent/contentSearch.feature:25](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L25) +- [apiSearchContent/contentSearch.feature:26](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L26) +- [apiSearchContent/contentSearch.feature:49](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L49) +- [apiSearchContent/contentSearch.feature:50](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L50) +- [apiSearchContent/contentSearch.feature:82](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L82) +- [apiSearchContent/contentSearch.feature:83](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L83) +- [apiSearchContent/contentSearch.feature:110](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L110) +- [apiSearchContent/contentSearch.feature:111](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L111) +- [apiSearchContent/contentSearch.feature:129](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L129) +- [apiSearchContent/contentSearch.feature:130](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L130) +- [apiSearchContent/contentSearch.feature:146](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L146) +- [apiSearchContent/contentSearch.feature:147](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L147) +- [apiSearchContent/contentSearch.feature:162](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L162) +- [apiSearchContent/contentSearch.feature:163](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L163) +- [apiSearchContent/contentSearch.feature:185](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L185) +- [apiSearchContent/contentSearch.feature:186](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L186) +- [apiSearchContent/contentSearch.feature:214](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L214) +- [apiSearchContent/contentSearch.feature:215](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L215) +- [apiSearchContent/contentSearch.feature:266](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L266) +- [apiSearchContent/contentSearch.feature:267](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L267) + Note: always have an empty line at the end of this file. The bash script that processes this file requires that the last line has a newline on the end. diff --git a/tests/acceptance/expected-failures-without-remotephp.md b/tests/acceptance/expected-failures-without-remotephp.md new file mode 100644 index 0000000000..47a06a9a52 --- /dev/null +++ b/tests/acceptance/expected-failures-without-remotephp.md @@ -0,0 +1,381 @@ +## Scenarios that are expected to fail when remote.php is not used + +#### [REPORT request without remote.php returns empty result (only with dav/spaces path)](https://github.com/owncloud/ocis/issues/10329) + +- [apiContract/sharesReport.feature:126](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiContract/sharesReport.feature#L126) +- [apiContract/sharesReport.feature:154](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiContract/sharesReport.feature#L154) +- [apiContract/spacesReport.feature:16](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiContract/spacesReport.feature#L16) +- [apiContract/spacesReport.feature:34](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiContract/spacesReport.feature#L34) +- [apiContract/spacesReport.feature:53](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiContract/spacesReport.feature#L53) +- [apiContract/spacesReport.feature:71](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiContract/spacesReport.feature#L71) +- [apiSearch1/dateSearch.feature:19](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/dateSearch.feature#L19) +- [apiSearch1/dateSearch.feature:39](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/dateSearch.feature#L39) +- [apiSearch1/dateSearch.feature:40](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/dateSearch.feature#L40) +- [apiSearch1/dateSearch.feature:41](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/dateSearch.feature#L41) +- [apiSearch1/dateSearch.feature:42](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/dateSearch.feature#L42) +- [apiSearch1/dateSearch.feature:43](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/dateSearch.feature#L43) +- [apiSearch1/dateSearch.feature:44](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/dateSearch.feature#L44) +- [apiSearch1/dateSearch.feature:45](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/dateSearch.feature#L45) +- [apiSearch1/dateSearch.feature:46](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/dateSearch.feature#L46) +- [apiSearch1/dateSearch.feature:47](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/dateSearch.feature#L47) +- [apiSearch1/dateSearch.feature:48](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/dateSearch.feature#L48) +- [apiSearch1/dateSearch.feature:50](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/dateSearch.feature#L50) +- [apiSearch1/dateSearch.feature:53](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/dateSearch.feature#L53) +- [apiSearch1/search.feature:43](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L43) +- [apiSearch1/search.feature:71](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L71) +- [apiSearch1/search.feature:113](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L113) +- [apiSearch1/search.feature:176](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L176) +- [apiSearch1/search.feature:199](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L199) +- [apiSearch1/search.feature:223](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L223) +- [apiSearch1/search.feature:244](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L244) +- [apiSearch1/search.feature:262](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L262) +- [apiSearch1/search.feature:280](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L280) +- [apiSearch1/search.feature:304](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L304) +- [apiSearch1/search.feature:317](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L317) +- [apiSearch1/search.feature:318](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L318) +- [apiSearch1/search.feature:319](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L319) +- [apiSearch1/search.feature:320](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L320) +- [apiSearch1/search.feature:321](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L321) +- [apiSearch1/search.feature:324](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L324) +- [apiSearch1/search.feature:356](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch1/search.feature#L356) +- [apiSearch2/mediaTypeSearch.feature:31](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L31) +- [apiSearch2/mediaTypeSearch.feature:32](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L32) +- [apiSearch2/mediaTypeSearch.feature:33](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L33) +- [apiSearch2/mediaTypeSearch.feature:34](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L34) +- [apiSearch2/mediaTypeSearch.feature:35](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L35) +- [apiSearch2/mediaTypeSearch.feature:36](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L36) +- [apiSearch2/mediaTypeSearch.feature:37](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L37) +- [apiSearch2/mediaTypeSearch.feature:38](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L38) +- [apiSearch2/mediaTypeSearch.feature:39](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L39) +- [apiSearch2/mediaTypeSearch.feature:60](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L60) +- [apiSearch2/mediaTypeSearch.feature:61](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L61) +- [apiSearch2/mediaTypeSearch.feature:62](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L62) +- [apiSearch2/mediaTypeSearch.feature:63](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L63) +- [apiSearch2/mediaTypeSearch.feature:64](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L64) +- [apiSearch2/mediaTypeSearch.feature:65](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L65) +- [apiSearch2/mediaTypeSearch.feature:66](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L66) +- [apiSearch2/mediaTypeSearch.feature:67](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L67) +- [apiSearch2/mediaTypeSearch.feature:68](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L68) +- [apiSearch2/mediaTypeSearch.feature:90](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L90) +- [apiSearch2/mediaTypeSearch.feature:91](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L91) +- [apiSearch2/mediaTypeSearch.feature:92](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L92) +- [apiSearch2/mediaTypeSearch.feature:93](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L93) +- [apiSearch2/mediaTypeSearch.feature:94](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L94) +- [apiSearch2/mediaTypeSearch.feature:95](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L95) +- [apiSearch2/mediaTypeSearch.feature:96](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L96) +- [apiSearch2/mediaTypeSearch.feature:97](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L97) +- [apiSearch2/mediaTypeSearch.feature:98](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L98) +- [apiSearch2/mediaTypeSearch.feature:126](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L126) +- [apiSearch2/mediaTypeSearch.feature:127](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L127) +- [apiSearch2/mediaTypeSearch.feature:128](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L128) +- [apiSearch2/mediaTypeSearch.feature:129](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L129) +- [apiSearch2/mediaTypeSearch.feature:130](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L130) +- [apiSearch2/mediaTypeSearch.feature:131](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L131) +- [apiSearch2/mediaTypeSearch.feature:132](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L132) +- [apiSearch2/mediaTypeSearch.feature:133](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L133) +- [apiSearch2/mediaTypeSearch.feature:134](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L134) +- [apiSearch2/mediaTypeSearch.feature:161](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L161) +- [apiSearch2/mediaTypeSearch.feature:162](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L162) +- [apiSearch2/mediaTypeSearch.feature:163](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L163) +- [apiSearch2/mediaTypeSearch.feature:164](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L164) +- [apiSearch2/mediaTypeSearch.feature:165](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L165) +- [apiSearch2/mediaTypeSearch.feature:166](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L166) +- [apiSearch2/mediaTypeSearch.feature:167](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L167) +- [apiSearch2/mediaTypeSearch.feature:168](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L168) +- [apiSearch2/mediaTypeSearch.feature:169](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L169) +- [apiSearch2/mediaTypeSearch.feature:172](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature#L172) +- [apiSearch2/tagSearch.feature:36](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L36) +- [apiSearch2/tagSearch.feature:68](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L68) +- [apiSearch2/tagSearch.feature:89](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L89) +- [apiSearch2/tagSearch.feature:116](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L116) +- [apiSearch2/tagSearch.feature:150](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L150) +- [apiSearch2/tagSearch.feature:188](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L188) +- [apiSearch2/tagSearch.feature:224](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L224) +- [apiSearch2/tagSearch.feature:243](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L243) +- [apiSearch2/tagSearch.feature:271](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L271) +- [apiSearch2/tagSearch.feature:272](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L272) +- [apiSearch2/tagSearch.feature:273](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L273) +- [apiSearch2/tagSearch.feature:274](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L274) +- [apiSearch2/tagSearch.feature:275](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L275) +- [apiSearch2/tagSearch.feature:276](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L276) +- [apiSearch2/tagSearch.feature:277](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L277) +- [apiSearch2/tagSearch.feature:278](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L278) +- [apiSearch2/tagSearch.feature:279](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L279) +- [apiSearch2/tagSearch.feature:280](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L280) +- [apiSearch2/tagSearch.feature:282](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearch2/tagSearch.feature#L282) +- [apiSearchContent/contentSearch.feature:27](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L27) +- [apiSearchContent/contentSearch.feature:51](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L51) +- [apiSearchContent/contentSearch.feature:84](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L84) +- [apiSearchContent/contentSearch.feature:112](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L112) +- [apiSearchContent/contentSearch.feature:131](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L131) +- [apiSearchContent/contentSearch.feature:148](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L148) +- [apiSearchContent/contentSearch.feature:164](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L164) +- [apiSearchContent/contentSearch.feature:187](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L187) +- [apiSearchContent/contentSearch.feature:216](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L216) +- [apiSearchContent/contentSearch.feature:234](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L234) +- [apiSearchContent/contentSearch.feature:235](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L235) +- [apiSearchContent/contentSearch.feature:236](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L236) +- [apiSearchContent/contentSearch.feature:237](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L237) +- [apiSearchContent/contentSearch.feature:238](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L238) +- [apiSearchContent/contentSearch.feature:239](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L239) +- [apiSearchContent/contentSearch.feature:268](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSearchContent/contentSearch.feature#L268) +- [cliCommands/searchReIndex.feature:15](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/cliCommands/searchReIndex.feature#L15) +- [coreApiWebdavOperations/search.feature:44](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L44) +- [coreApiWebdavOperations/search.feature:62](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L62) +- [coreApiWebdavOperations/search.feature:81](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L81) +- [coreApiWebdavOperations/search.feature:112](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L112) +- [coreApiWebdavOperations/search.feature:132](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L132) +- [coreApiWebdavOperations/search.feature:153](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L153) +- [coreApiWebdavOperations/search.feature:231](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L231) + +#### [Downloading public files without remote.php returns 401 unauthorized error](https://github.com/owncloud/ocis/issues/9724) + +- [apiGraph/enforcePasswordPublicLink.feature:79](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiGraph/enforcePasswordPublicLink.feature#L79) +- [apiGraph/enforcePasswordPublicLink.feature:80](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiGraph/enforcePasswordPublicLink.feature#L80) +- [apiGraph/enforcePasswordPublicLink.feature:107](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiGraph/enforcePasswordPublicLink.feature#L107) +- [apiGraph/enforcePasswordPublicLink.feature:108](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiGraph/enforcePasswordPublicLink.feature#L108) +- [apiGraph/enforcePasswordPublicLink.feature:171](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiGraph/enforcePasswordPublicLink.feature#L171) +- [apiGraph/enforcePasswordPublicLink.feature:172](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiGraph/enforcePasswordPublicLink.feature#L172) +- [apiGraph/enforcePasswordPublicLink.feature:229](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiGraph/enforcePasswordPublicLink.feature#L229) +- [apiGraph/enforcePasswordPublicLink.feature:230](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiGraph/enforcePasswordPublicLink.feature#L230) +- [apiGraph/enforcePasswordPublicLink.feature:231](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiGraph/enforcePasswordPublicLink.feature#L231) +- [apiGraph/enforcePasswordPublicLink.feature:232](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiGraph/enforcePasswordPublicLink.feature#L232) +- [apiGraph/enforcePasswordPublicLink.feature:233](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiGraph/enforcePasswordPublicLink.feature#L233) +- [apiGraph/enforcePasswordPublicLink.feature:234](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiGraph/enforcePasswordPublicLink.feature#L234) +- [apiGraph/enforcePasswordPublicLink.feature:235](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiGraph/enforcePasswordPublicLink.feature#L235) +- [apiGraph/enforcePasswordPublicLink.feature:236](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiGraph/enforcePasswordPublicLink.feature#L236) +- [apiSpaces/editPublicLinkOfSpace.feature:52](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/editPublicLinkOfSpace.feature#L52) +- [apiSpaces/editPublicLinkOfSpace.feature:53](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/editPublicLinkOfSpace.feature#L53) +- [apiSpacesShares/publicLinkDownload.feature:16](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesShares/publicLinkDownload.feature#L16) +- [apiSpacesShares/publicLinkDownload.feature:32](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesShares/publicLinkDownload.feature#L32) +- [apiSpacesShares/shareSpacesViaLink.feature:45](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesShares/shareSpacesViaLink.feature#L45) +- [apiSpacesShares/shareSpacesViaLink.feature:46](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesShares/shareSpacesViaLink.feature#L46) +- [apiSpacesShares/shareSpacesViaLink.feature:47](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesShares/shareSpacesViaLink.feature#L47) +- [apiSpacesShares/shareSubItemOfSpaceViaPublicLink.feature:149](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesShares/shareSubItemOfSpaceViaPublicLink.feature#L149) +- [apiSpacesShares/shareSubItemOfSpaceViaPublicLink.feature:150](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesShares/shareSubItemOfSpaceViaPublicLink.feature#L150) +- [apiSharingNgLinkSharePermission/createLinkShare.feature:478](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSharingNgLinkSharePermission/createLinkShare.feature#L478) +- [apiSharingNgLinkSharePermission/createLinkShare.feature:1225](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSharingNgLinkSharePermission/createLinkShare.feature#L1225) +- [apiSharingNgLinkSharePermission/updateLinkShare.feature:209](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSharingNgLinkSharePermission/updateLinkShare.feature#L209) +- [apiSharingNgLinkSharePermission/updateLinkShare.feature:287](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSharingNgLinkSharePermission/updateLinkShare.feature#L287) +- [apiSharingNgLinkShareRoot/updateLinkShare.feature:10](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSharingNgLinkShareRoot/updateLinkShare.feature#L10) +- [apiSharingNgLinkShareRoot/updateLinkShare.feature:42](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSharingNgLinkShareRoot/updateLinkShare.feature#L42) +- [coreApiSharePublicLink1/changingPublicLinkShare.feature:219](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L219) +- [coreApiSharePublicLink1/changingPublicLinkShare.feature:220](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L220) +- [coreApiSharePublicLink1/createPublicLinkShare.feature:59](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L59) +- [coreApiSharePublicLink1/createPublicLinkShare.feature:60](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L60) +- [coreApiSharePublicLink1/createPublicLinkShare.feature:88](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L88) +- [coreApiSharePublicLink1/createPublicLinkShare.feature:89](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L89) +- [coreApiSharePublicLink1/createPublicLinkShare.feature:122](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L122) +- [coreApiSharePublicLink1/createPublicLinkShare.feature:123](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L123) +- [coreApiSharePublicLink1/createPublicLinkShare.feature:209](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L209) +- [coreApiSharePublicLink1/createPublicLinkShare.feature:210](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L210) +- [coreApiSharePublicLink1/createPublicLinkShare.feature:229](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L229) +- [coreApiSharePublicLink1/createPublicLinkShare.feature:230](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L230) +- [coreApiSharePublicLink1/createPublicLinkShare.feature:257](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L257) +- [coreApiSharePublicLink1/createPublicLinkShare.feature:258](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L258) +- [coreApiSharePublicLink1/createPublicLinkShare.feature:273](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L273) +- [coreApiSharePublicLink1/createPublicLinkShare.feature:274](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L274) +- [coreApiSharePublicLink1/createPublicLinkShare.feature:277](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L277) +- [coreApiSharePublicLink1/createPublicLinkShare.feature:291](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L291) +- [coreApiSharePublicLink2/updatePublicLinkShare.feature:111](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/updatePublicLinkShare.feature#L111) +- [coreApiSharePublicLink2/updatePublicLinkShare.feature:112](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/updatePublicLinkShare.feature#L112) +- [coreApiSharePublicLink2/updatePublicLinkShare.feature:249](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/updatePublicLinkShare.feature#L249) +- [coreApiSharePublicLink2/updatePublicLinkShare.feature:250](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/updatePublicLinkShare.feature#L250) +- [coreApiSharePublicLink2/updatePublicLinkShare.feature:276](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/updatePublicLinkShare.feature#L276) +- [coreApiSharePublicLink2/updatePublicLinkShare.feature:277](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/updatePublicLinkShare.feature#L277) + +#### [Most (if not all) requests to public link share without remote.php returns 401 Unauthorized error](https://github.com/owncloud/ocis/issues/10331) + +- [apiSpaces/publicLink.feature:18](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/publicLink.feature#L18) +- [apiSpaces/publicLink.feature:23](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/publicLink.feature#L23) +- [apiSpaces/publicLink.feature:28](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/publicLink.feature#L28) +- [apiSpaces/publicLink.feature:34](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/publicLink.feature#L34) +- [apiSpaces/publicLink.feature:40](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/publicLink.feature#L40) +- [apiSpacesShares/shareSpacesViaLink.feature:61](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpacesShares/shareSpacesViaLink.feature#L61) +- [apiDepthInfinity/propfind.feature:74](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiDepthInfinity/propfind.feature#L74) +- [apiDepthInfinity/propfind.feature:125](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiDepthInfinity/propfind.feature#L125) +- [apiLocks/lockFiles.feature:486](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L486) +- [apiLocks/lockFiles.feature:487](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L487) +- [apiLocks/lockFiles.feature:488](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L488) +- [apiLocks/lockFiles.feature:489](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L489) +- [apiLocks/lockFiles.feature:509](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L509) +- [apiLocks/lockFiles.feature:510](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L510) +- [apiLocks/lockFiles.feature:511](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L511) +- [apiLocks/lockFiles.feature:512](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/lockFiles.feature#L512) +- [apiLocks/unlockFiles.feature:320](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/unlockFiles.feature#L320) +- [apiLocks/unlockFiles.feature:321](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/unlockFiles.feature#L321) +- [apiLocks/unlockFiles.feature:322](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/unlockFiles.feature#L322) +- [apiLocks/unlockFiles.feature:323](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiLocks/unlockFiles.feature#L323) +- [apiActivities/shareActivities.feature:1775](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiActivities/shareActivities.feature#L1775) +- [apiActivities/shareActivities.feature:1914](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiActivities/shareActivities.feature#L1914) +- [apiAntivirus/antivirus.feature:113](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiAntivirus/antivirus.feature#L113) +- [apiAntivirus/antivirus.feature:114](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiAntivirus/antivirus.feature#L114) +- [apiAntivirus/antivirus.feature:115](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiAntivirus/antivirus.feature#L115) +- [apiAntivirus/antivirus.feature:116](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiAntivirus/antivirus.feature#L116) +- [apiAntivirus/antivirus.feature:117](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiAntivirus/antivirus.feature#L117) +- [apiAntivirus/antivirus.feature:118](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiAntivirus/antivirus.feature#L118) +- [apiAntivirus/antivirus.feature:139](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiAntivirus/antivirus.feature#L139) +- [apiAntivirus/antivirus.feature:140](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiAntivirus/antivirus.feature#L140) +- [apiAntivirus/antivirus.feature:141](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiAntivirus/antivirus.feature#L141) +- [apiAntivirus/antivirus.feature:142](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiAntivirus/antivirus.feature#L142) +- [apiAntivirus/antivirus.feature:143](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiAntivirus/antivirus.feature#L143) +- [apiAntivirus/antivirus.feature:144](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiAntivirus/antivirus.feature#L144) +- [apiAntivirus/antivirus.feature:401](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiAntivirus/antivirus.feature#L401) +- [apiAntivirus/antivirus.feature:402](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiAntivirus/antivirus.feature#L402) +- [apiAntivirus/antivirus.feature:403](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiAntivirus/antivirus.feature#L403) +- [apiCollaboration/wopi.feature:956](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiCollaboration/wopi.feature#L956) +- [apiCollaboration/wopi.feature:957](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiCollaboration/wopi.feature#L957) +- [apiCollaboration/wopi.feature:958](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiCollaboration/wopi.feature#L958) +- [apiCollaboration/wopi.feature:961](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiCollaboration/wopi.feature#L961) +- [apiCollaboration/wopi.feature:1047](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiCollaboration/wopi.feature#L1047) +- [apiCollaboration/wopi.feature:1048](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiCollaboration/wopi.feature#L1048) +- [apiCollaboration/wopi.feature:1049](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiCollaboration/wopi.feature#L1049) +- [apiCollaboration/wopi.feature:1052](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiCollaboration/wopi.feature#L1052) +- [coreApiSharePublicLink1/changingPublicLinkShare.feature:27](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L27) +- [coreApiSharePublicLink1/changingPublicLinkShare.feature:28](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L28) +- [coreApiSharePublicLink1/changingPublicLinkShare.feature:29](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L29) +- [coreApiSharePublicLink1/changingPublicLinkShare.feature:30](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L30) +- [coreApiSharePublicLink1/changingPublicLinkShare.feature:33](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L33) +- [coreApiSharePublicLink1/changingPublicLinkShare.feature:46](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L46) +- [coreApiSharePublicLink1/changingPublicLinkShare.feature:70](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L70) +- [coreApiSharePublicLink1/changingPublicLinkShare.feature:95](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L95) +- [coreApiSharePublicLink1/changingPublicLinkShare.feature:120](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L120) +- [coreApiSharePublicLink1/changingPublicLinkShare.feature:132](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L132) +- [coreApiSharePublicLink1/changingPublicLinkShare.feature:145](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L145) +- [coreApiSharePublicLink1/createPublicLinkShare.feature:304](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L304) +- [coreApiSharePublicLink1/createPublicLinkShare.feature:328](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L328) +- [coreApiSharePublicLink1/createPublicLinkShare.feature:329](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L329) +- [coreApiSharePublicLink1/createPublicLinkShare.feature:344](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L344) +- [coreApiSharePublicLink1/createPublicLinkShare.feature:345](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L345) +- [coreApiSharePublicLink1/createPublicLinkShare.feature:348](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L348) +- [coreApiSharePublicLink1/createPublicLinkShare.feature:363](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L363) +- [coreApiSharePublicLink1/createPublicLinkShare.feature:377](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L377) +- [coreApiSharePublicLink2/copyFromPublicLink.feature:13](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L13) +- [coreApiSharePublicLink2/copyFromPublicLink.feature:28](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L28) +- [coreApiSharePublicLink2/copyFromPublicLink.feature:44](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L44) +- [coreApiSharePublicLink2/copyFromPublicLink.feature:60](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L60) +- [coreApiSharePublicLink2/copyFromPublicLink.feature:75](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L75) +- [coreApiSharePublicLink2/copyFromPublicLink.feature:92](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L92) +- [coreApiSharePublicLink2/copyFromPublicLink.feature:105](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L105) +- [coreApiSharePublicLink2/copyFromPublicLink.feature:137](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L137) +- [coreApiSharePublicLink2/copyFromPublicLink.feature:138](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L138) +- [coreApiSharePublicLink2/copyFromPublicLink.feature:139](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L139) +- [coreApiSharePublicLink2/copyFromPublicLink.feature:140](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L140) +- [coreApiSharePublicLink2/copyFromPublicLink.feature:158](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L158) +- [coreApiSharePublicLink2/copyFromPublicLink.feature:159](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L159) +- [coreApiSharePublicLink2/copyFromPublicLink.feature:160](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L160) +- [coreApiSharePublicLink2/copyFromPublicLink.feature:161](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L161) +- [coreApiSharePublicLink2/copyFromPublicLink.feature:180](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L180) +- [coreApiSharePublicLink2/copyFromPublicLink.feature:181](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L181) +- [coreApiSharePublicLink2/copyFromPublicLink.feature:182](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L182) +- [coreApiSharePublicLink2/copyFromPublicLink.feature:183](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L183) +- [coreApiSharePublicLink2/copyFromPublicLink.feature:186](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L186) +- [coreApiSharePublicLink2/copyFromPublicLink.feature:212](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L212) +- [coreApiSharePublicLink2/copyFromPublicLink.feature:225](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L225) +- [coreApiSharePublicLink2/uploadToPublicLinkShare.feature:28](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/uploadToPublicLinkShare.feature#L28) +- [coreApiSharePublicLink2/uploadToPublicLinkShare.feature:29](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/uploadToPublicLinkShare.feature#L29) +- [coreApiSharePublicLink2/uploadToPublicLinkShare.feature:30](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/uploadToPublicLinkShare.feature#L30) +- [coreApiSharePublicLink2/uploadToPublicLinkShare.feature:33](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/uploadToPublicLinkShare.feature#L33) +- [coreApiSharePublicLink2/uploadToPublicLinkShare.feature:44](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/uploadToPublicLinkShare.feature#L44) +- [coreApiSharePublicLink2/uploadToPublicLinkShare.feature:58](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/uploadToPublicLinkShare.feature#L58) +- [coreApiSharePublicLink2/uploadToPublicLinkShare.feature:70](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/uploadToPublicLinkShare.feature#L70) +- [coreApiSharePublicLink2/uploadToPublicLinkShare.feature:82](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/uploadToPublicLinkShare.feature#L82) +- [coreApiSharePublicLink2/uploadToPublicLinkShare.feature:94](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/uploadToPublicLinkShare.feature#L94) +- [coreApiSharePublicLink2/uploadToPublicLinkShare.feature:106](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/uploadToPublicLinkShare.feature#L106) +- [coreApiSharePublicLink2/uploadToPublicLinkShare.feature:118](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/uploadToPublicLinkShare.feature#L118) +- [coreApiWebdavEtagPropagation1/deleteFileFolder.feature:238](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation1/deleteFileFolder.feature#L238) +- [coreApiWebdavEtagPropagation1/deleteFileFolder.feature:239](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation1/deleteFileFolder.feature#L239) +- [coreApiWebdavEtagPropagation1/deleteFileFolder.feature:240](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation1/deleteFileFolder.feature#L240) +- [coreApiWebdavEtagPropagation1/deleteFileFolder.feature:262](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation1/deleteFileFolder.feature#L262) +- [coreApiWebdavEtagPropagation1/deleteFileFolder.feature:263](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation1/deleteFileFolder.feature#L263) +- [coreApiWebdavEtagPropagation1/deleteFileFolder.feature:264](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation1/deleteFileFolder.feature#L264) +- [coreApiWebdavEtagPropagation1/moveFileFolder.feature:308](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation1/moveFileFolder.feature#L308) +- [coreApiWebdavEtagPropagation1/moveFileFolder.feature:309](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation1/moveFileFolder.feature#L309) +- [coreApiWebdavEtagPropagation1/moveFileFolder.feature:310](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation1/moveFileFolder.feature#L310) +- [coreApiWebdavEtagPropagation1/moveFileFolder.feature:333](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation1/moveFileFolder.feature#L333) +- [coreApiWebdavEtagPropagation1/moveFileFolder.feature:334](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation1/moveFileFolder.feature#L334) +- [coreApiWebdavEtagPropagation1/moveFileFolder.feature:335](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation1/moveFileFolder.feature#L335) +- [coreApiWebdavEtagPropagation2/copyFileFolder.feature:135](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation2/copyFileFolder.feature#L135) +- [coreApiWebdavEtagPropagation2/copyFileFolder.feature:136](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation2/copyFileFolder.feature#L136) +- [coreApiWebdavEtagPropagation2/copyFileFolder.feature:137](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation2/copyFileFolder.feature#L137) +- [coreApiWebdavEtagPropagation2/createFolder.feature:130](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation2/createFolder.feature#L130) +- [coreApiWebdavEtagPropagation2/createFolder.feature:131](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation2/createFolder.feature#L131) +- [coreApiWebdavEtagPropagation2/upload.feature:188](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation2/upload.feature#L188) +- [coreApiWebdavEtagPropagation2/upload.feature:189](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation2/upload.feature#L189) +- [coreApiWebdavEtagPropagation2/upload.feature:190](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation2/upload.feature#L190) +- [coreApiWebdavOperations/listFiles.feature:112](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L112) +- [coreApiWebdavOperations/listFiles.feature:140](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L140) +- [coreApiWebdavOperations/propfind.feature:40](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/propfind.feature#L40) +- [coreApiWebdavOperations/propfind.feature:55](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/propfind.feature#L55) +- [coreApiWebdavOperations/propfind.feature:69](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/propfind.feature#L69) +- [coreApiWebdavUpload/uploadFile.feature:376](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload/uploadFile.feature#L376) + +#### [Cannot create new TUS upload resource using /webdav without remote.php - returns html instead](https://github.com/owncloud/ocis/issues/10346) + +- [apiSpaces/tusUpload.feature:60](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/tusUpload.feature#L60) +- [apiSpaces/tusUpload.feature:104](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/tusUpload.feature#L104) +- [coreApiWebdavUploadTUS/creationWithUploadExtension.feature:38](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/creationWithUploadExtension.feature#L38) +- [coreApiWebdavUploadTUS/uploadFile.feature:16](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L16) +- [coreApiWebdavUploadTUS/uploadFile.feature:17](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L17) +- [coreApiWebdavUploadTUS/uploadFile.feature:18](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L18) +- [coreApiWebdavUploadTUS/uploadFile.feature:19](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L19) +- [coreApiWebdavUploadTUS/uploadFile.feature:20](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L20) +- [coreApiWebdavUploadTUS/uploadFile.feature:21](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L21) +- [coreApiWebdavUploadTUS/uploadFile.feature:22](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L22) +- [coreApiWebdavUploadTUS/uploadFile.feature:46](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L46) +- [coreApiWebdavUploadTUS/uploadFile.feature:47](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L47) +- [coreApiWebdavUploadTUS/uploadFile.feature:48](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L48) +- [coreApiWebdavUploadTUS/uploadFile.feature:49](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L49) +- [coreApiWebdavUploadTUS/uploadFile.feature:50](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L50) +- [coreApiWebdavUploadTUS/uploadFile.feature:51](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L51) +- [coreApiWebdavUploadTUS/uploadFile.feature:52](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L52) +- [coreApiWebdavUploadTUS/uploadFile.feature:75](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L75) +- [coreApiWebdavUploadTUS/uploadFile.feature:86](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L86) +- [coreApiWebdavUploadTUS/uploadFile.feature:98](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L98) +- [coreApiWebdavUploadTUS/uploadFile.feature:109](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L109) +- [coreApiWebdavUploadTUS/uploadFile.feature:122](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L122) +- [coreApiWebdavUploadTUS/uploadFile.feature:133](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L133) +- [coreApiWebdavUploadTUS/uploadFile.feature:145](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L145) +- [coreApiWebdavUploadTUS/uploadFile.feature:167](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L167) +- [coreApiWebdavUploadTUS/uploadFile.feature:186](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L186) +- [coreApiWebdavUploadTUS/uploadFile.feature:198](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L198) +- [coreApiWebdavUploadTUS/uploadFile.feature:211](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L211) +- [coreApiWebdavUploadTUS/uploadFileMtime.feature:16](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtime.feature#L16) +- [coreApiWebdavUploadTUS/uploadFileMtime.feature:27](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtime.feature#L27) +- [coreApiWebdavUploadTUS/uploadFileMtime.feature:39](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtime.feature#L39) +- [coreApiWebdavUploadTUS/uploadFileMtime.feature:51](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtime.feature#L51) +- [coreApiWebdavUploadTUS/uploadFileMtimeShares.feature:29](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtimeShares.feature#L29) +- [coreApiWebdavUploadTUS/uploadFileMtimeShares.feature:48](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtimeShares.feature#L48) +- [coreApiWebdavUploadTUS/uploadFileMtimeShares.feature:68](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtimeShares.feature#L68) +- [coreApiWebdavUploadTUS/uploadFileMtimeShares.feature:88](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtimeShares.feature#L88) +- [coreApiWebdavUploadTUS/uploadToMoveFolder.feature:20](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToMoveFolder.feature#L20) +- [coreApiWebdavUploadTUS/uploadToShare.feature:29](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L29) +- [coreApiWebdavUploadTUS/uploadToShare.feature:48](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L48) +- [coreApiWebdavUploadTUS/uploadToShare.feature:69](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L69) +- [coreApiWebdavUploadTUS/uploadToShare.feature:89](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L89) + +#### [PROPFIND to /webdav root (old dav path) without remote.php returns html instead of xml](https://github.com/owncloud/ocis/issues/10334) + +- [coreApiAuth/webDavAuth.feature:15](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuth/webDavAuth.feature#L15) +- [coreApiAuth/webDavAuth.feature:25](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuth/webDavAuth.feature#L25) +- [coreApiShareManagementToShares/moveReceivedShare.feature:49](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/moveReceivedShare.feature#L49) +- [coreApiShareManagementToShares/moveReceivedShare.feature:128](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/moveReceivedShare.feature#L128) +- [coreApiShareManagementToShares/moveReceivedShare.feature:129](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/moveReceivedShare.feature#L129) +- [coreApiWebdavOperations/propfind.feature:25](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/propfind.feature#L25) +- [coreApiWebdavOperations/propfind.feature:26](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/propfind.feature#L26) +- [coreApiWebdavOperations/propfind.feature:36](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/propfind.feature#L36) + +#### [Public cannot download file preview of unprotected (without password) link share without remote.php](https://github.com/owncloud/ocis/issues/10341) + +- [coreApiSharePublicLink1/accessToPublicLinkShare.feature:25](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/accessToPublicLinkShare.feature#L25) +- [coreApiSharePublicLink1/accessToPublicLinkShare.feature:54](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/accessToPublicLinkShare.feature#L54) + +#### [Trying to create .. resource with /webdav root (old dav path) without remote.php returns html](https://github.com/owncloud/ocis/issues/10339) + +- [coreApiWebdavProperties/createFileFolder.feature:176](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties/createFileFolder.feature#L176) +- [coreApiWebdavProperties/createFileFolder.feature:177](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties/createFileFolder.feature#L177) +- [coreApiWebdavProperties/createFileFolder.feature:196](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties/createFileFolder.feature#L196) +- [coreApiWebdavProperties/createFileFolder.feature:197](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties/createFileFolder.feature#L197) + +Note: always have an empty line at the end of this file. +The bash script that processes this file requires that the last line has a newline on the end. diff --git a/tests/acceptance/features/apiAccountsHashDifficulty/webDavPUTAuthInvalid.feature b/tests/acceptance/features/apiAccountsHashDifficulty/webDavPUTAuthInvalid.feature index 65a7c2a993..d7c2afe672 100644 --- a/tests/acceptance/features/apiAccountsHashDifficulty/webDavPUTAuthInvalid.feature +++ b/tests/acceptance/features/apiAccountsHashDifficulty/webDavPUTAuthInvalid.feature @@ -15,20 +15,20 @@ Feature: attempt to PUT files with invalid password Scenario: send PUT requests to webDav endpoints as normal user with wrong password When user "Alice" requests these endpoints with "PUT" including body "doesnotmatter" using password "invalid" about user "Alice" | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" Scenario: send PUT requests to webDav endpoints as normal user with no password When user "Alice" requests these endpoints with "PUT" including body "doesnotmatter" using password "" about user "Alice" | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" diff --git a/tests/acceptance/features/apiActivities/shareActivities.feature b/tests/acceptance/features/apiActivities/shareActivities.feature index e89a345d27..c3be57082e 100644 --- a/tests/acceptance/features/apiActivities/shareActivities.feature +++ b/tests/acceptance/features/apiActivities/shareActivities.feature @@ -1771,7 +1771,7 @@ Feature: check share activity When user "Brian" tries to list the activities of file "anotherTextfile.txt" from space "Personal" owned by user "Alice" using the Graph API Then the HTTP status code should be "403" - @issue-9676 + @issue-9676 @issue-10331 Scenario: user checks public activities of a link shared file Given using SharingNG And user "Alice" has created the following resource link share: @@ -1910,7 +1910,7 @@ Feature: check share activity } """ - @issue-9676 + @issue-9676 @issue-10331 Scenario: user checks public activities of a link shared folder Given using SharingNG And user "Alice" has created folder "/FOLDER" diff --git a/tests/acceptance/features/apiAntivirus/antivirus.feature b/tests/acceptance/features/apiAntivirus/antivirus.feature index 9801b6ff2a..0080827abe 100644 --- a/tests/acceptance/features/apiAntivirus/antivirus.feature +++ b/tests/acceptance/features/apiAntivirus/antivirus.feature @@ -91,7 +91,7 @@ Feature: antivirus | old | | spaces | - + @issue-10331 Scenario Outline: public uploads a file with the virus to a public share Given using DAV path And the config "OCIS_SHARING_PUBLIC_SHARE_MUST_HAVE_PASSWORD" has been set to "false" @@ -117,7 +117,7 @@ Feature: antivirus | spaces | eicar.com | virusFile1.txt | | spaces | eicar_com.zip | virusFile2.zip | - + @issue-10331 Scenario Outline: public uploads a file with the virus to a password-protected public share Given using DAV path And using SharingNG @@ -380,7 +380,7 @@ Feature: antivirus | new | | spaces | - @env-config + @env-config @issue-10331 Scenario Outline: try to overwrite a file with the virus content in a public link share Given the config "OCIS_SHARING_PUBLIC_SHARE_MUST_HAVE_PASSWORD" has been set to "false" And using DAV path diff --git a/tests/acceptance/features/apiAsyncUpload/delayPostprocessing.feature b/tests/acceptance/features/apiAsyncUpload/delayPostprocessing.feature index 537a347002..f99413ff3b 100644 --- a/tests/acceptance/features/apiAsyncUpload/delayPostprocessing.feature +++ b/tests/acceptance/features/apiAsyncUpload/delayPostprocessing.feature @@ -14,10 +14,10 @@ Feature: delay post-processing of uploaded files When user "Alice" requests "" with "GET" without retrying Then the HTTP status code should be "425" Examples: - | dav-path | - | /remote.php/webdav/file.txt | - | /remote.php/dav/files/%username%/file.txt | - | /dav/spaces/%spaceid%/file.txt | + | dav-path | + | /webdav/file.txt | + | /dav/files/%username%/file.txt | + | /dav/spaces/%spaceid%/file.txt | Scenario Outline: user sends PROPFIND request to the file while it's still being processed @@ -26,10 +26,10 @@ Feature: delay post-processing of uploaded files Then the HTTP status code should be "207" And the value of the item "//d:response/d:propstat/d:status" in the response should be "HTTP/1.1 425 TOO EARLY" Examples: - | dav-path | - | /remote.php/webdav/file.txt | - | /remote.php/dav/files/%username%/file.txt | - | /dav/spaces/%spaceid%/file.txt | + | dav-path | + | /webdav/file.txt | + | /dav/files/%username%/file.txt | + | /dav/spaces/%spaceid%/file.txt | Scenario Outline: user sends PROPFIND request to the folder while files in the folder are still being processed @@ -40,7 +40,7 @@ Feature: delay post-processing of uploaded files And as user "Alice" the value of the item "//d:status" of path "/" in the response should be "HTTP/1.1 200 OK" And as user "Alice" the value of the item "//d:status" of path "/file.txt" in the response should be "HTTP/1.1 425 TOO EARLY" Examples: - | dav-path | - | /remote.php/webdav/my_data | - | /remote.php/dav/files/%username%/my_data | - | /dav/spaces/%spaceid%/my_data | + | dav-path | + | /webdav/my_data | + | /dav/files/%username%/my_data | + | /dav/spaces/%spaceid%/my_data | diff --git a/tests/acceptance/features/apiCollaboration/wopi.feature b/tests/acceptance/features/apiCollaboration/wopi.feature index 60b285dfc3..741e003a5a 100644 --- a/tests/acceptance/features/apiCollaboration/wopi.feature +++ b/tests/acceptance/features/apiCollaboration/wopi.feature @@ -925,7 +925,7 @@ Feature: collaboration (wopi) And as "Alice" file "testFolder/simple.odt" should not exist And as "Brian" file "Shares/testFolder/simple.odt" should not exist - + @issue-10331 Scenario Outline: public user with permission edit/upload/createOnly creates odt file inside public folder using wopi endpoint Given user "Alice" has created folder "publicFolder" And user "Alice" has created the following resource link share: @@ -957,7 +957,7 @@ Feature: collaboration (wopi) | upload | | createOnly | - @issue-10126 + @issue-10126 @issue-10331 Scenario: public user with permission view tries to creates odt file inside public folder using wopi endpoint Given user "Alice" has created folder "publicFolder" And user "Alice" has created the following resource link share: @@ -1013,7 +1013,7 @@ Feature: collaboration (wopi) } """ - @issue-8691 + @issue-8691 @issue-10331 Scenario Outline: public user with permission edit/upload/createOnly creates odt file inside folder of public space using wopi endpoint Given using spaces DAV path And the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API @@ -1048,7 +1048,7 @@ Feature: collaboration (wopi) | upload | | createOnly | - @issue-8691 @issue-10126 + @issue-8691 @issue-10126 @issue-10331 Scenario: public user with permission view tries to create odt file inside folder of public space using wopi endpoint Given using spaces DAV path And the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API diff --git a/tests/acceptance/features/apiContract/sharesReport.feature b/tests/acceptance/features/apiContract/sharesReport.feature index a1d85d84e0..db3940dd3a 100644 --- a/tests/acceptance/features/apiContract/sharesReport.feature +++ b/tests/acceptance/features/apiContract/sharesReport.feature @@ -84,7 +84,7 @@ Feature: REPORT request to Shares space | old | | new | - @issue-9607 + @issue-9607 @issue-10329 Scenario Outline: check the REPORT response of a folder shared with secure viewer role Given using DAV path And user "Alice" has created folder "/secureFolder" @@ -125,7 +125,7 @@ Feature: REPORT request to Shares space | new | | spaces | - @issue-9607 + @issue-9607 @issue-10329 Scenario Outline: check the REPORT response of a file shared with secure viewer role Given using DAV path And user "Alice" has uploaded file with content "secure content" to "/secure.txt" diff --git a/tests/acceptance/features/apiContract/spacesReport.feature b/tests/acceptance/features/apiContract/spacesReport.feature index dce427d705..fc377ba8d9 100644 --- a/tests/acceptance/features/apiContract/spacesReport.feature +++ b/tests/acceptance/features/apiContract/spacesReport.feature @@ -12,10 +12,9 @@ Feature: REPORT request to project space And the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API And user "Alice" has created a space "findData" with the default quota using the Graph API - + @issue-10329 Scenario: check the response of the searched file Given user "Alice" has uploaded a file inside space "findData" with content "some content" to "testFile.txt" - And using new DAV path When user "Alice" searches for "testFile.txt" using the WebDAV API Then the HTTP status code should be "207" And the search result of user "Alice" should contain only these entries: @@ -31,11 +30,10 @@ Feature: REPORT request to project space | oc:permissions | RDNVW | | d:getcontentlength | 12 | - + @issue-10329 Scenario: check the response of the searched sub-file Given user "Alice" has created a folder "folderMain/SubFolder1/subFOLDER2" in space "findData" And user "Alice" has uploaded a file inside space "findData" with content "some content" to "folderMain/SubFolder1/subFOLDER2/insideTheFolder.txt" - And using new DAV path When user "Alice" searches for "insideTheFolder.txt" using the WebDAV API Then the HTTP status code should be "207" And the search result of user "Alice" should contain only these entries: @@ -51,10 +49,9 @@ Feature: REPORT request to project space | oc:permissions | RDNVW | | d:getcontentlength | 12 | - + @issue-10329 Scenario: check the response of the searched folder Given user "Alice" has created a folder "folderMain" in space "findData" - And using new DAV path When user "Alice" searches for "folderMain" using the WebDAV API Then the HTTP status code should be "207" And the search result of user "Alice" should contain only these entries: @@ -70,10 +67,9 @@ Feature: REPORT request to project space | oc:permissions | RDNVCK | | oc:size | 0 | - + @issue-10329 Scenario: check the response of the searched sub-folder Given user "Alice" has created a folder "folderMain/sub-folder" in space "findData" - And using new DAV path When user "Alice" searches for "*sub*" using the WebDAV API Then the HTTP status code should be "207" And the search result of user "Alice" should contain only these entries: diff --git a/tests/acceptance/features/apiDepthInfinity/propfind.feature b/tests/acceptance/features/apiDepthInfinity/propfind.feature index 6509ae3336..5d4901a25a 100644 --- a/tests/acceptance/features/apiDepthInfinity/propfind.feature +++ b/tests/acceptance/features/apiDepthInfinity/propfind.feature @@ -70,7 +70,7 @@ Feature: PROPFIND with depth:infinity | new | | spaces | - + @issue-10331 Scenario: get the list of resources in a folder shared through public link with depth infinity Given using new DAV path And using SharingNG @@ -121,7 +121,7 @@ Feature: PROPFIND with depth:infinity | new | | spaces | - + @issue-10331 Scenario: get the list of resources in a folder shared through public link with depth infinity when depth infinity is not allowed Given the following configs have been set: | config | value | diff --git a/tests/acceptance/features/apiGraph/enforcePasswordPublicLink.feature b/tests/acceptance/features/apiGraph/enforcePasswordPublicLink.feature index 49d26aea51..c26841fbfb 100644 --- a/tests/acceptance/features/apiGraph/enforcePasswordPublicLink.feature +++ b/tests/acceptance/features/apiGraph/enforcePasswordPublicLink.feature @@ -51,7 +51,7 @@ Feature: enforce password on public link | 1 | 100 | | 2 | 200 | - + @issue-9724 @issue-10331 Scenario Outline: updates a public link to edit permission with a password Given the following configs have been set: | config | value | @@ -71,15 +71,15 @@ Feature: enforce password on public link Then the HTTP status code should be "200" And the OCS status code should be "" And the OCS status message should be "OK" - And the public should not be able to download file "/textfile.txt" from inside the last public link shared folder using the new public WebDAV API without a password - And the public should not be able to download file "/textfile.txt" from inside the last public link shared folder using the new public WebDAV API with password "wrong pass" - But the public should be able to download file "/textfile.txt" from inside the last public link shared folder using the new public WebDAV API with password "%public%" + And the public should not be able to download file "/testfile.txt" from inside the last public link shared folder using the new public WebDAV API without a password + And the public should not be able to download file "/testfile.txt" from inside the last public link shared folder using the new public WebDAV API with password "wrong pass" + But the public should be able to download file "/testfile.txt" from inside the last public link shared folder using the new public WebDAV API with password "%public%" Examples: | ocs-api-version | ocs-status-code | | 1 | 100 | | 2 | 200 | - + @issue-9724 @issue-10331 Scenario Outline: create a public link with a password in accordance with the password policy Given the following configs have been set: | config | value | @@ -99,9 +99,9 @@ Feature: enforce password on public link Then the HTTP status code should be "200" And the OCS status code should be "" And the OCS status message should be "OK" - And the public should not be able to download file "/textfile.txt" from inside the last public link shared folder using the new public WebDAV API without a password - And the public should not be able to download file "/textfile.txt" from inside the last public link shared folder using the new public WebDAV API with password "wrong pass" - But the public should be able to download file "/textfile.txt" from inside the last public link shared folder using the new public WebDAV API with password "3s:5WW9uE5h=A" + And the public should not be able to download file "/testfile.txt" from inside the last public link shared folder using the new public WebDAV API without a password + And the public should not be able to download file "/testfile.txt" from inside the last public link shared folder using the new public WebDAV API with password "wrong pass" + But the public should be able to download file "/testfile.txt" from inside the last public link shared folder using the new public WebDAV API with password "3s:5WW9uE5h=A" Examples: | ocs-api-version | ocs-status-code | | 1 | 100 | @@ -138,7 +138,7 @@ Feature: enforce password on public link | 1 | 200 | | 2 | 400 | - + @issue-9724 @issue-10331 Scenario Outline: update a public link with a password in accordance with the password policy Given the following configs have been set: | config | value | @@ -163,9 +163,9 @@ Feature: enforce password on public link Then the HTTP status code should be "200" And the OCS status code should be "" And the OCS status message should be "OK" - And the public should not be able to download file "/textfile.txt" from inside the last public link shared folder using the new public WebDAV API without a password - And the public should not be able to download file "/textfile.txt" from inside the last public link shared folder using the new public WebDAV API with password "wrong pass" - But the public should be able to download file "/textfile.txt" from inside the last public link shared folder using the new public WebDAV API with password "6a0Q;A3 +i^m[" + And the public should not be able to download file "/testfile.txt" from inside the last public link shared folder using the new public WebDAV API without a password + And the public should not be able to download file "/testfile.txt" from inside the last public link shared folder using the new public WebDAV API with password "wrong pass" + But the public should be able to download file "/testfile.txt" from inside the last public link shared folder using the new public WebDAV API with password "6a0Q;A3 +i^m[" Examples: | ocs-api-version | ocs-status-code | | 1 | 100 | @@ -208,7 +208,7 @@ Feature: enforce password on public link | 1 | 200 | | 2 | 400 | - + @issue-9724 @issue-10331 Scenario Outline: create a public link with a password in accordance with the password policy (valid cases) Given the config "" has been set to "" And using OCS API version "2" @@ -221,9 +221,9 @@ Feature: enforce password on public link Then the HTTP status code should be "200" And the OCS status code should be "200" And the OCS status message should be "OK" - And the public should not be able to download file "/textfile.txt" from inside the last public link shared folder using the new public WebDAV API without a password - And the public should not be able to download file "/textfile.txt" from inside the last public link shared folder using the new public WebDAV API with password "wrong pass" - But the public should be able to download file "/textfile.txt" from inside the last public link shared folder using the new public WebDAV API with password "" + And the public should not be able to download file "/testfile.txt" from inside the last public link shared folder using the new public WebDAV API without a password + And the public should not be able to download file "/testfile.txt" from inside the last public link shared folder using the new public WebDAV API with password "wrong pass" + But the public should be able to download file "/testfile.txt" from inside the last public link shared folder using the new public WebDAV API with password "" Examples: | config | config-value | password | | OCIS_PASSWORD_POLICY_MIN_CHARACTERS | 4 | Ps-1 | diff --git a/tests/acceptance/features/apiLocks/lockFiles.feature b/tests/acceptance/features/apiLocks/lockFiles.feature index 3f4b4c8783..c9d790fa34 100644 --- a/tests/acceptance/features/apiLocks/lockFiles.feature +++ b/tests/acceptance/features/apiLocks/lockFiles.feature @@ -52,10 +52,11 @@ Feature: lock files | spaces | - Scenario Outline: lock a file using file-id - Given user "Alice" has uploaded a file inside space "Alice Hansen" with content "some content" to "textfile.txt" + Scenario: lock a file using file-id + Given using spaces DAV path + And user "Alice" has uploaded a file inside space "Alice Hansen" with content "some content" to "textfile.txt" And we save it into "FILEID" - When user "Alice" locks file "textfile.txt" using file-id path "" using the WebDAV API setting the following properties + When user "Alice" locks file "textfile.txt" using file-id "<>" using the WebDAV API setting the following properties | lockscope | exclusive | | timeout | Second-3600 | Then the HTTP status code should be "200" @@ -67,10 +68,6 @@ Feature: lock files | d:lockdiscovery/d:activelock/d:depth | Infinity | | d:lockdiscovery/d:activelock/d:timeout | Second-3600 | | d:lockdiscovery/d:activelock/oc:ownername | Alice Hansen | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | Scenario Outline: user cannot lock file twice @@ -127,7 +124,7 @@ Feature: lock files | sharee | Brian | | shareType | user | | permissionsRole | | - When user "Brian" locks file "textfile.txt" using file-id path "" using the WebDAV API setting the following properties + When user "Brian" locks file "textfile.txt" using file-id "<>" using the WebDAV API setting the following properties | lockscope | exclusive | | timeout | Second-3600 | Then the HTTP status code should be "200" @@ -140,9 +137,9 @@ Feature: lock files | d:lockdiscovery/d:activelock/d:timeout | Second-3600 | | d:lockdiscovery/d:activelock/oc:ownername | Brian Murphy | Examples: - | space-role | dav-path | - | Manager | /remote.php/dav/spaces/<> | - | Space Editor | /dav/spaces/<> | + | space-role | + | Manager | + | Space Editor | Scenario: viewer cannot lock a file in the project space @@ -156,7 +153,7 @@ Feature: lock files | sharee | Brian | | shareType | user | | permissionsRole | Space Viewer | - When user "Brian" tries to lock file "textfile.txt" using file-id path "/dav/spaces/<>" using the WebDAV API setting the following properties + When user "Brian" tries to lock file "textfile.txt" using file-id "<>" using the WebDAV API setting the following properties | lockscope | exclusive | Then the HTTP status code should be "403" When user "Brian" tries to lock file "textfile.txt" inside the space "Project" using the WebDAV API setting the following properties @@ -190,8 +187,9 @@ Feature: lock files | spaces | - Scenario Outline: lock a file in the shares using file-id - Given user "Alice" has uploaded a file inside space "Alice Hansen" with content "some content" to "textfile.txt" + Scenario: lock a file in the shares using file-id + Given using spaces DAV path + And user "Alice" has uploaded a file inside space "Alice Hansen" with content "some content" to "textfile.txt" And we save it into "FILEID" And user "Alice" has sent the following resource share invitation: | resource | textfile.txt | @@ -200,7 +198,7 @@ Feature: lock files | shareType | user | | permissionsRole | File Editor | And user "Brian" has a share "textfile.txt" synced - When user "Brian" locks file "textfile.txt" using file-id path "" using the WebDAV API setting the following properties + When user "Brian" locks file "textfile.txt" using file-id "<>" using the WebDAV API setting the following properties | lockscope | exclusive | | timeout | Second-3600 | Then the HTTP status code should be "200" @@ -210,14 +208,11 @@ Feature: lock files | key | value | | d:lockdiscovery/d:activelock/d:lockscope/d:exclusive | | | d:lockdiscovery/d:activelock/oc:ownername | Brian Murphy | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | Scenario Outline: viewer cannot lock a file in the shares using file-id - Given user "Alice" has uploaded a file inside space "Alice Hansen" with content "some content" to "textfile.txt" + Given using spaces DAV path + And user "Alice" has uploaded a file inside space "Alice Hansen" with content "some content" to "textfile.txt" And we save it into "FILEID" And user "Alice" has sent the following resource share invitation: | resource | textfile.txt | @@ -226,7 +221,7 @@ Feature: lock files | shareType | user | | permissionsRole | | And user "Brian" has a share "textfile.txt" synced - When user "Brian" tries to lock file "textfile.txt" using file-id path "/dav/spaces/<>" using the WebDAV API setting the following properties + When user "Brian" tries to lock file "textfile.txt" using file-id "<>" using the WebDAV API setting the following properties | lockscope | exclusive | Then the HTTP status code should be "403" Examples: @@ -236,7 +231,8 @@ Feature: lock files Scenario: sharee cannot lock a resource exclusively locked by a sharer - Given user "Alice" has uploaded a file inside space "Alice Hansen" with content "some content" to "textfile.txt" + Given using spaces DAV path + And user "Alice" has uploaded a file inside space "Alice Hansen" with content "some content" to "textfile.txt" And we save it into "FILEID" And user "Alice" has sent the following resource share invitation: | resource | textfile.txt | @@ -247,7 +243,7 @@ Feature: lock files And user "Brian" has a share "textfile.txt" synced And user "Alice" has locked file "textfile.txt" setting the following properties | lockscope | exclusive | - When user "Brian" tries to lock file "textfile.txt" using file-id path "/dav/spaces/<>" using the WebDAV API setting the following properties + When user "Brian" tries to lock file "textfile.txt" using file-id "<>" using the WebDAV API setting the following properties | lockscope | exclusive | | timeout | Second-3600 | Then the HTTP status code should be "423" @@ -260,7 +256,8 @@ Feature: lock files Scenario: sharer cannot lock a resource exclusively locked by a sharee - Given user "Alice" has uploaded a file inside space "Alice Hansen" with content "some content" to "textfile.txt" + Given using spaces DAV path + And user "Alice" has uploaded a file inside space "Alice Hansen" with content "some content" to "textfile.txt" And we save it into "FILEID" And user "Alice" has sent the following resource share invitation: | resource | textfile.txt | @@ -269,9 +266,9 @@ Feature: lock files | shareType | user | | permissionsRole | File Editor | And user "Brian" has a share "textfile.txt" synced - And user "Brian" has locked file "textfile.txt" using file-id path "/dav/spaces/<>" setting the following properties + And user "Brian" has locked file "textfile.txt" using file-id "<>" setting the following properties | lockscope | exclusive | - When user "Alice" tries to lock file "textfile.txt" using file-id path "/dav/spaces/<>" using the WebDAV API setting the following properties + When user "Alice" tries to lock file "textfile.txt" using file-id "<>" using the WebDAV API setting the following properties | lockscope | exclusive | | timeout | Second-3600 | Then the HTTP status code should be "423" @@ -293,7 +290,7 @@ Feature: lock files | sharee | Brian | | shareType | user | | permissionsRole | File Editor | - And user "Brian" has a share "textfile.txt" synced + And user "Brian" has a share "textfile0.txt" synced And user "Alice" has locked file "textfile0.txt" setting the following properties | lockscope | shared | And user "Brian" has locked file "Shares/textfile0.txt" setting the following properties @@ -423,7 +420,7 @@ Feature: lock files | spaces | shared | | spaces | exclusive | - @issue-7641 + @issue-7641 @issue-10331 Scenario Outline: try to lock a folder as anonymous user Given using DAV path And using SharingNG @@ -468,7 +465,7 @@ Feature: lock files | spaces | shared | | spaces | exclusive | - + @issue-10331 Scenario Outline: lock a file inside a folder shared by a link as anonymous user with edit permission Given using DAV path And using SharingNG @@ -486,14 +483,12 @@ Feature: lock files And user "Alice" should not be able to upload file "filesForUpload/lorem.txt" to "PARENT/textfile0.txt" Examples: | dav-path-version | lock-scope | - | old | shared | - | old | exclusive | | new | shared | | new | exclusive | | spaces | shared | | spaces | exclusive | - + @issue-10331 Scenario Outline: try to lock a file inside a folder shared by a link as anonymous user with read permission Given using DAV path And using SharingNG @@ -511,14 +506,12 @@ Feature: lock files And user "Alice" should be able to upload file "filesForUpload/lorem.txt" to "PARENT/textfile0.txt" Examples: | dav-path-version | lock-scope | - | old | shared | - | old | exclusive | | new | shared | | new | exclusive | | spaces | shared | | spaces | exclusive | - @issue-7790 + @issue-7790 @issue-10331 Scenario Outline: lock a file shared by a link as anonymous user with edit permission Given using DAV path And using SharingNG @@ -535,14 +528,12 @@ Feature: lock files And user "Alice" should not be able to upload file "filesForUpload/lorem.txt" to "textfile0.txt" Examples: | dav-path-version | lock-scope | - | old | shared | - | old | exclusive | | new | shared | | new | exclusive | | spaces | shared | | spaces | exclusive | - @issue-7790 + @issue-7790 @issue-10331 Scenario Outline: try to lock a file shared by a link as anonymous user with read permission Given using DAV path And using SharingNG @@ -559,8 +550,6 @@ Feature: lock files And user "Alice" should be able to upload file "filesForUpload/lorem.txt" to "textfile0.txt" Examples: | dav-path-version | lock-scope | - | old | shared | - | old | exclusive | | new | shared | | new | exclusive | | spaces | shared | diff --git a/tests/acceptance/features/apiLocks/unlockFiles.feature b/tests/acceptance/features/apiLocks/unlockFiles.feature index df4c9df624..bbcff8fbc7 100644 --- a/tests/acceptance/features/apiLocks/unlockFiles.feature +++ b/tests/acceptance/features/apiLocks/unlockFiles.feature @@ -21,7 +21,7 @@ Feature: unlock locked items | new | | spaces | - @issue-7761 + @issue-7761 @issue-10331 Scenario Outline: public tries to unlock a file in a share that was locked by the file owner Given using DAV path And using SharingNG @@ -247,24 +247,20 @@ Feature: unlock locked items | exclusive | - Scenario Outline: unlock a file using file-id + Scenario: unlock a file using file-id Given using spaces DAV path And user "Alice" has uploaded a file inside space "Alice Hansen" with content "some content" to "textfile.txt" And we save it into "FILEID" - And user "Alice" has locked file "textfile.txt" using file-id path "" setting the following properties + And user "Alice" has locked file "textfile.txt" using file-id "<>" setting the following properties | lockscope | exclusive | | timeout | Second-3600 | - When user "Alice" unlocks the last created lock of file "textfile.txt" using file-id path "" using the WebDAV API + When user "Alice" unlocks the last created lock of file "textfile.txt" using file-id "<>" using the WebDAV API Then the HTTP status code should be "204" And 0 locks should be reported for file "textfile.txt" of user "Alice" by the WebDAV API And user "Alice" should be able to upload file "filesForUpload/lorem.txt" to "textfile.txt" - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | - Scenario Outline: unlock a file in project space using file-id + Scenario: unlock a file in project space using file-id Given using spaces DAV path And the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API And user "Alice" has created a space "Project" with the default quota using the Graph API @@ -273,17 +269,13 @@ Feature: unlock locked items And user "Alice" has locked file "textfile.txt" inside the space "Project" setting the following properties | lockscope | exclusive | | timeout | Second-3600 | - When user "Alice" unlocks the last created lock of file "textfile.txt" using file-id path "" using the WebDAV API + When user "Alice" unlocks the last created lock of file "textfile.txt" using file-id "<>" using the WebDAV API Then the HTTP status code should be "204" And 0 locks should be reported for file "textfile.txt" inside the space "Project" of user "Alice" And user "Alice" should be able to upload file "filesForUpload/lorem.txt" to "textfile.txt" - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | - Scenario Outline: unlock a file in the shares using file-id + Scenario: unlock a file in the shares using file-id Given user "Brian" has been created with default attributes and without skeleton files And using spaces DAV path And user "Alice" has uploaded a file inside space "Alice Hansen" with content "some content" to "textfile.txt" @@ -295,22 +287,18 @@ Feature: unlock locked items | shareType | user | | permissionsRole | File Editor | And user "Brian" has a share "textfile.txt" synced - And user "Brian" has locked file "textfile.txt" using file-id path "" setting the following properties + And user "Brian" has locked file "textfile.txt" using file-id "<>" setting the following properties | lockscope | exclusive | | timeout | Second-3600 | - When user "Brian" unlocks the last created lock of file "textfile.txt" using file-id path "" using the WebDAV API + When user "Brian" unlocks the last created lock of file "textfile.txt" using file-id "<>" using the WebDAV API Then the HTTP status code should be "204" And 0 locks should be reported for file "textfile.txt" inside the space "Personal" of user "Alice" And 0 locks should be reported for file "textfile.txt" inside the space "Shares" of user "Brian" And user "Alice" should be able to upload file "filesForUpload/lorem.txt" to "textfile.txt" And using new DAV path And user "Brian" should be able to upload file "filesForUpload/lorem.txt" to "Shares/textfile.txt" - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | - + @issue-10331 Scenario Outline: unlock a file as an anonymous user Given using DAV path And using SharingNG @@ -329,8 +317,6 @@ Feature: unlock locked items And user "Alice" should be able to upload file "filesForUpload/lorem.txt" to "PARENT/textfile0.txt" Examples: | dav-path-version | lock-scope | - | old | shared | - | old | exclusive | | new | shared | | new | exclusive | | spaces | shared | diff --git a/tests/acceptance/features/apiSearch1/dateSearch.feature b/tests/acceptance/features/apiSearch1/dateSearch.feature index ffb3d02c7b..706b90153d 100644 --- a/tests/acceptance/features/apiSearch1/dateSearch.feature +++ b/tests/acceptance/features/apiSearch1/dateSearch.feature @@ -5,7 +5,7 @@ Feature: date search Background: Given user "Alice" has been created with default attributes and without skeleton files - + @issue-7060 @issue-10329 Scenario Outline: search resources using different dav path Given using DAV path And user "Alice" has created folder "uploadFolder" @@ -18,7 +18,7 @@ Feature: date search | new | | spaces | - + @issue-10329 Scenario Outline: search resources using different search patterns (KQL feature) in the personal space Given user "Alice" uploads a file "filesForUpload/textfile.txt" to "/today.txt" with mtime "today" via TUS inside of the space "Personal" using the WebDAV API And user "Alice" uploads a file "filesForUpload/textfile.txt" to "/yesterday.txt" with mtime "yesterday" via TUS inside of the space "Personal" using the WebDAV API @@ -49,7 +49,7 @@ Feature: date search # Mtime<$today. "<" has to be escaped | Mtime<$today | /yesterday.txt | /lastYear.txt | /today.txt | | - + @issue-10329 Scenario: search resources using different search patterns (KQL feature) in the shares folder Given user "Brian" has been created with default attributes and without skeleton files And using spaces DAV path diff --git a/tests/acceptance/features/apiSearch1/search.feature b/tests/acceptance/features/apiSearch1/search.feature index 19b2225592..2446276621 100644 --- a/tests/acceptance/features/apiSearch1/search.feature +++ b/tests/acceptance/features/apiSearch1/search.feature @@ -14,7 +14,7 @@ Feature: Search And user "Alice" has created a folder "folderMain/SubFolder1/subFOLDER2" in space "project101" And user "Alice" has uploaded a file inside space "project101" with content "some content" to "folderMain/SubFolder1/subFOLDER2/insideTheFolder.txt" - + @issue-10329 Scenario Outline: user can search items inside project space Given using DAV path And user "Alice" has created a folder "AlicePersonal" in space "Personal" @@ -42,7 +42,7 @@ Feature: Search | new | | spaces | - + @issue-10329 Scenario Outline: user can search items inside personal space Given using DAV path And user "Alice" has created a folder "AlicePersonal" in space "Personal" @@ -97,7 +97,7 @@ Feature: Search | new | | spaces | - + @issue-10329 Scenario Outline: user can search hidden files Given using DAV path And user "Alice" has created a folder ".space" in space "project101" @@ -172,20 +172,15 @@ Feature: Search | new | | spaces | - - Scenario Outline: user can search project space by name - Given using DAV path + @issue-10329 + Scenario: user can search project space by name + Given using spaces DAV path When user "Alice" searches for '*project101*' 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 "project101" - Examples: - | dav-path-version | - | old | - | new | - | spaces | - + @issue-10329 Scenario Outline: user can search inside folder in space Given using DAV path When user "Alice" searches for "*folder*" inside folder "/folderMain" in space "project101" using the WebDAV API @@ -203,7 +198,7 @@ Feature: Search | new | | spaces | - + @issue-10329 Scenario Outline: search inside folder in shares Given using DAV path And user "Alice" has sent the following resource share invitation: @@ -227,7 +222,7 @@ Feature: Search | new | | spaces | - @skipOnStable3.0 + @issue-10329 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" @@ -248,7 +243,7 @@ Feature: Search | new | | spaces | - @issue-7114 + @issue-7114 @issue-10329 Scenario Outline: search files inside the folder with white space character in its name Given using DAV path And user "Alice" has created folder "/New Folder" @@ -266,7 +261,7 @@ Feature: Search | new | | spaces | - @issue-7114 + @issue-7114 @issue-10329 Scenario Outline: search files with white space character in its name Given using DAV path And user "Alice" has created folder "/New Folder" @@ -284,7 +279,7 @@ Feature: Search | new | | spaces | - @issue-enterprise-6000 @issue-7028 @issue-7092 + @issue-enterprise-6000 @issue-7028 @issue-7092 @issue-10329 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" @@ -308,7 +303,7 @@ Feature: Search | new | | spaces | - + @issue-10329 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 "project101" @@ -325,7 +320,7 @@ Feature: Search | name:*der2 | /folderMain/SubFolder1/subFOLDER2 | patern 'name:'' | | name:"*der2" | /folderMain/SubFolder1/subFOLDER2 | pattern 'name:""' (with quotes) | - @issue-7812 @issue-8442 + @issue-7812 @issue-8442 @issue-10329 Scenario: try to search with invalid patterns Given using spaces DAV path And user "Alice" has uploaded file with content "test file" to "testFile.txt" @@ -333,7 +328,7 @@ Feature: Search Then the HTTP status code should be "400" And the value of the item "/d:error/s:message" in the response should be "error: bad request: the expression can't begin from a binary operator: 'AND'" - + @issue-10329 Scenario Outline: search a file globally (in all spaces) Given using DAV path And user "Alice" has created a folder "AlicePersonal" in space "Personal" diff --git a/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature b/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature index 1780b2c94f..97a20914b0 100644 --- a/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature +++ b/tests/acceptance/features/apiSearch2/mediaTypeSearch.feature @@ -10,7 +10,7 @@ Feature: media type search | Brian | And using spaces DAV path - + @issue-10329 Scenario Outline: search for files using media type Given user "Alice" has uploaded file "filesForUpload/lorem.txt" to "/lorem.txt" And user "Alice" has uploaded file "filesForUpload/simple.pdf" to "/simple.pdf" @@ -38,7 +38,7 @@ Feature: media type search | *rar* | /data.rar | | *bzip2* | /data.tar.bz2 | - + @issue-10329 Scenario Outline: search for files inside sub folders using media type Given user "Alice" has created folder "/uploadFolder" And user "Alice" has uploaded file "filesForUpload/lorem.txt" to "/uploadFolder/lorem.txt" @@ -67,7 +67,7 @@ Feature: media type search | *rar* | /uploadFolder/data.rar | | *bzip2* | /uploadFolder/data.tar.bz2 | - + @issue-10329 Scenario Outline: search for file inside project space using media type Given the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API And user "Alice" has created a space "project101" with the default quota using the Graph API @@ -97,7 +97,7 @@ Feature: media type search | *rar* | /data.rar | | *bzip2* | /data.tar.bz2 | - + @issue-10329 Scenario Outline: sharee searches for shared files using media type Given user "Alice" has created folder "/uploadFolder" And user "Alice" has uploaded file "filesForUpload/lorem.txt" to "/uploadFolder/lorem.txt" @@ -133,7 +133,7 @@ Feature: media type search | *rar* | /uploadFolder/data.rar | | *bzip2* | /uploadFolder/data.tar.bz2 | - + @issue-10329 Scenario Outline: space viewer searches for files using mediatype filter Given the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API And user "Alice" has created a space "project101" with the default quota using the Graph API @@ -168,7 +168,7 @@ Feature: media type search | *rar* | /data.rar | | *bzip2* | /data.tar.bz2 | - + @issue-10329 Scenario: search files with different mediatype filter Given user "Alice" has created folder "testFolder" And user "Alice" has uploaded file "filesForUpload/lorem.txt" to "lorem.txt" diff --git a/tests/acceptance/features/apiSearch2/tagSearch.feature b/tests/acceptance/features/apiSearch2/tagSearch.feature index f69c3265e9..2f2d01cdcc 100644 --- a/tests/acceptance/features/apiSearch2/tagSearch.feature +++ b/tests/acceptance/features/apiSearch2/tagSearch.feature @@ -6,7 +6,7 @@ Feature: tag search Background: Given user "Alice" has been created with default attributes and without skeleton files - + @issue-10329 Scenario Outline: search files by tag Given using DAV path And user "Alice" has created the following folders @@ -35,7 +35,7 @@ Feature: tag search | new | | spaces | - + @issue-10329 Scenario Outline: search project space files by tag Given using spaces DAV path And the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API @@ -67,7 +67,7 @@ Feature: tag search | dav-path-version | | spaces | - + @issue-10329 Scenario Outline: search folders using a tag Given using DAV path And user "Alice" has created folder "uploadFolder1" @@ -88,7 +88,7 @@ Feature: tag search | new | | spaces | - + @issue-10329 Scenario Outline: search project space folders by tag Given using spaces DAV path And the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API @@ -115,7 +115,7 @@ Feature: tag search | dav-path-version | | spaces | - + @issue-10329 Scenario Outline: sharee searches shared files using a tag Given using DAV path And user "Brian" has been created with default attributes and without skeleton files @@ -149,7 +149,7 @@ Feature: tag search | dav-path-version | | spaces | - + @issue-10329 Scenario Outline: sharee searches shared project space files using a tag Given using spaces DAV path And user "Brian" has been created with default attributes and without skeleton files @@ -204,7 +204,7 @@ Feature: tag search | new | | spaces | - + @issue-10329 Scenario Outline: search restored files using a tag Given using DAV path And user "Alice" has uploaded file with content "hello world" to "file1.txt" @@ -223,7 +223,7 @@ Feature: tag search | new | | spaces | - + @issue-10329 Scenario Outline: search restored version of a file using a tag Given using DAV path And user "Alice" has uploaded file with content "version one file" to "file.txt" @@ -242,7 +242,7 @@ Feature: tag search | new | | spaces | - + @issue-10329 Scenario Outline: search resources using different search patterns (KQL feature) Given using spaces DAV path And user "Alice" has created the following folders diff --git a/tests/acceptance/features/apiSearchContent/contentSearch.feature b/tests/acceptance/features/apiSearchContent/contentSearch.feature index e6c2db7771..96788555a0 100644 --- a/tests/acceptance/features/apiSearchContent/contentSearch.feature +++ b/tests/acceptance/features/apiSearchContent/contentSearch.feature @@ -7,7 +7,7 @@ Feature: content search Background: Given user "Alice" has been created with default attributes and without skeleton files - + @issue-10329 Scenario Outline: search files by content Given using DAV path And user "Alice" has uploaded file with content "hello world from nepal" to "keywordAtStart.txt" @@ -26,7 +26,7 @@ Feature: content search | new | | spaces | - + @issue-10329 Scenario Outline: search files by different content types Given using DAV path And user "Alice" has uploaded file with content "Using k6, you can test the reliability and performance of your systems" to "wordWithNumber.md" @@ -64,7 +64,7 @@ Feature: content search | new | | spaces | - @env-config + @env-config @issue-10329 Scenario Outline: search files by stop words when clean_stop_words is disabled Given using DAV path And the config "SEARCH_EXTRACTOR_TIKA_CLEAN_STOP_WORDS" has been set to "false" @@ -83,7 +83,7 @@ Feature: content search | new | | spaces | - + @issue-10329 Scenario Outline: sharee searches files by content Given using DAV path And user "Brian" has been created with default attributes and without skeleton files @@ -111,7 +111,7 @@ Feature: content search | new | | spaces | - + @issue-10329 Scenario Outline: search deleted files by content Given using DAV path And user "Alice" has created folder "uploadFolder" @@ -130,7 +130,7 @@ Feature: content search | new | | spaces | - + @issue-10329 Scenario Outline: search restored files by content Given using DAV path And user "Alice" has created folder "uploadFolder" @@ -147,7 +147,7 @@ Feature: content search | new | | spaces | - + @issue-10329 Scenario Outline: search restored version of a file by content Given using DAV path And user "Alice" has uploaded file with content "hello world" to "test.txt" @@ -163,7 +163,7 @@ Feature: content search | new | | spaces | - + @issue-10329 Scenario Outline: search project space files by content Given using spaces DAV path And the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API @@ -186,7 +186,7 @@ Feature: content search | new | | spaces | - + @issue-10329 Scenario Outline: sharee searches shared project space files by content Given using spaces DAV path And user "Brian" has been created with default attributes and without skeleton files @@ -215,7 +215,7 @@ Feature: content search | new | | spaces | - + @issue-10329 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" @@ -238,7 +238,7 @@ Feature: content search | content:hel* AND tag:test | 1 | /technical task.txt | | | (name:*task* AND content:hel*) NOT tag:test | 1 | /task comments.txt | | - + @issue-10329 Scenario Outline: search across files with different format with search text highlight Given using DAV path And the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API diff --git a/tests/acceptance/features/apiSharingNgLinkSharePermission/createLinkShare.feature b/tests/acceptance/features/apiSharingNgLinkSharePermission/createLinkShare.feature index 85f533817d..7248b4058b 100644 --- a/tests/acceptance/features/apiSharingNgLinkSharePermission/createLinkShare.feature +++ b/tests/acceptance/features/apiSharingNgLinkSharePermission/createLinkShare.feature @@ -474,7 +474,7 @@ Feature: Create a link share for a resource | internal | | blocksDownload | - @env-config + @env-config @issue-9724 @issue-10331 Scenario: set password on a file's link share using permissions endpoint Given the following configs have been set: | config | value | @@ -1221,7 +1221,7 @@ Feature: Create a link share for a resource | password | blocksDownload | | ownCloud | blocksDownload | - @env-config + @env-config @issue-9724 @issue-10331 Scenario: set password on a existing link share of a file inside project-space using permissions endpoint Given the following configs have been set: | config | value | diff --git a/tests/acceptance/features/apiSharingNgLinkSharePermission/updateLinkShare.feature b/tests/acceptance/features/apiSharingNgLinkSharePermission/updateLinkShare.feature index e3ba8383bb..ad13dc68a4 100644 --- a/tests/acceptance/features/apiSharingNgLinkSharePermission/updateLinkShare.feature +++ b/tests/acceptance/features/apiSharingNgLinkSharePermission/updateLinkShare.feature @@ -205,7 +205,7 @@ Feature: Update a link share for a resource } """ - + @issue-9724 @issue-10331 Scenario: update password of a file's link share using permissions endpoint Given user "Alice" has uploaded file with content "other data" to "textfile1.txt" And user "Alice" has created the following resource link share: @@ -283,7 +283,7 @@ Feature: Update a link share for a resource | password | | ownCloud | - @env-config + @env-config @issue-9724 @issue-10331 Scenario: set password on a existing link share of a folder inside project-space using permissions endpoint Given the following configs have been set: | config | value | diff --git a/tests/acceptance/features/apiSharingNgLinkShareRoot/updateLinkShare.feature b/tests/acceptance/features/apiSharingNgLinkShareRoot/updateLinkShare.feature index 7f2d65b73c..c462bb5c7c 100644 --- a/tests/acceptance/features/apiSharingNgLinkShareRoot/updateLinkShare.feature +++ b/tests/acceptance/features/apiSharingNgLinkShareRoot/updateLinkShare.feature @@ -6,7 +6,7 @@ Feature: Update a link share for a resource | username | | Alice | - @env-config + @env-config @issue-9724 @issue-10331 Scenario: set password on a existing link share of a project-space drive using root endpoint Given the following configs have been set: | config | value | @@ -38,7 +38,7 @@ Feature: Update a link share for a resource """ And the public should be able to download file "textfile.txt" from the last link share with password "%public%" and the content should be "to share" - + @issue-9724 @issue-10331 Scenario: update password on a existing link share of a project-space drive using root endpoint And using spaces DAV path And the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API diff --git a/tests/acceptance/features/apiSpaces/editPublicLinkOfSpace.feature b/tests/acceptance/features/apiSpaces/editPublicLinkOfSpace.feature index 044810c627..4166c43392 100644 --- a/tests/acceptance/features/apiSpaces/editPublicLinkOfSpace.feature +++ b/tests/acceptance/features/apiSpaces/editPublicLinkOfSpace.feature @@ -25,7 +25,7 @@ Feature: A manager of the space can edit public link And user "Alice" has uploaded a file inside space "edit space" with content "some content" to "test.txt" And using SharingNG - + @issue-9724 @issue-10331 Scenario Outline: manager of the space can edit public link. Given using OCS API version "2" When user "Alice" updates the last public link share using the sharing API with diff --git a/tests/acceptance/features/apiSpaces/publicLink.feature b/tests/acceptance/features/apiSpaces/publicLink.feature index a8b66570df..a4a4626085 100644 --- a/tests/acceptance/features/apiSpaces/publicLink.feature +++ b/tests/acceptance/features/apiSpaces/publicLink.feature @@ -14,29 +14,29 @@ Feature: public link for a space | permissionsRole | view | And using SharingNG - + @issue-10331 Scenario: public tries to upload a file in the public space When the public uploads file "test.txt" with content "test" using the new public WebDAV API And the HTTP status code should be "403" - + @issue-10331 Scenario: public tries to create a folder in the public space When the public creates folder "created-by-public" using the new public WebDAV API And the HTTP status code should be "403" - + @issue-10331 Scenario: public tries to delete a file in the public space Given user "Alice" has uploaded a file inside space "public space" with content "some content" to "test.txt" When the public deletes file "test.txt" from the last public link share using the new public WebDAV API And the HTTP status code should be "403" - + @issue-10331 Scenario: public tries to delete a folder in the public space And user "Alice" has created a folder "/public-folder" in space "public space" When the public deletes folder "public-folder" from the last public link share using the new public WebDAV API And the HTTP status code should be "403" - + @issue-10331 Scenario: public tries to change content of a resources in the public space Given user "Alice" has uploaded a file inside space "public space" with content "some content" to "test.txt" When the public overwrites file "test.txt" with content "public content" using the new WebDAV API diff --git a/tests/acceptance/features/apiSpaces/tusUpload.feature b/tests/acceptance/features/apiSpaces/tusUpload.feature index ebe37f36da..1c6400512c 100644 --- a/tests/acceptance/features/apiSpaces/tusUpload.feature +++ b/tests/acceptance/features/apiSpaces/tusUpload.feature @@ -40,7 +40,7 @@ Feature: upload resources using TUS protocol | test.txt | | upload.txt | - + @issue-10346 Scenario Outline: upload a zero-byte file inside a shared folder Given using DAV path And user "Brian" has been created with default attributes and without skeleton files @@ -84,7 +84,7 @@ Feature: upload resources using TUS protocol When user "Alice" uploads a file from "filesForUpload/zerobyte.txt" to "textfile.txt" via TUS inside of the space "new-space" using the WebDAV API Then for user "Alice" the content of the file "textfile.txt" of the space "new-space" should be "" - @issue-8003 + @issue-8003 @issue-10346 Scenario Outline: replace a shared file with zero-byte file Given using DAV path And user "Brian" has been created with default attributes and without skeleton files diff --git a/tests/acceptance/features/apiSpacesDavOperation/copyByFileId.feature b/tests/acceptance/features/apiSpacesDavOperation/copyByFileId.feature index b66f82c44a..c762d7e11c 100644 --- a/tests/acceptance/features/apiSpacesDavOperation/copyByFileId.feature +++ b/tests/acceptance/features/apiSpacesDavOperation/copyByFileId.feature @@ -8,162 +8,126 @@ Feature: copying file using file id And user "Alice" has been created with default attributes and without skeleton files - Scenario Outline: copy a file into a folder in personal space + Scenario: copy a file into a folder in personal space Given user "Alice" has created folder "/folder" And user "Alice" has uploaded file with content "some data" to "/textfile.txt" And we save it into "FILEID" - When user "Alice" copies a file "/textfile.txt" into "/folder" inside space "Personal" using file-id path "" + When user "Alice" copies a file "/textfile.txt" into "/folder" inside space "Personal" using file-id "<>" Then the HTTP status code should be "201" And for user "Alice" folder "/" of the space "Personal" should contain these files: | textfile.txt | And for user "Alice" folder "folder" of the space "Personal" should contain these files: | textfile.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | - Scenario Outline: copy a file into a sub-folder in personal space + Scenario: copy a file into a sub-folder in personal space Given user "Alice" has created folder "/folder" And user "Alice" has created folder "folder/sub-folder" And user "Alice" has uploaded file with content "some data" to "/textfile.txt" And we save it into "FILEID" - When user "Alice" copies a file "/textfile.txt" into "/folder/sub-folder" inside space "Personal" using file-id path "" + When user "Alice" copies a file "/textfile.txt" into "/folder/sub-folder" inside space "Personal" using file-id "<>" Then the HTTP status code should be "201" And for user "Alice" folder "/" of the space "Personal" should contain these files: | textfile.txt | And for user "Alice" folder "folder/sub-folder" of the space "Personal" should contain these files: | textfile.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | - Scenario Outline: copy a file from a folder into root of personal space + Scenario: copy a file from a folder into root of personal space Given user "Alice" has created folder "/folder" And user "Alice" has uploaded file with content "some data" to "folder/textfile.txt" And we save it into "FILEID" - When user "Alice" copies a file "folder/textfile.txt" into "/" inside space "Personal" using file-id path "" + When user "Alice" copies a file "folder/textfile.txt" into "/" inside space "Personal" using file-id "<>" Then the HTTP status code should be "201" And for user "Alice" folder "/" of the space "Personal" should contain these files: | textfile.txt | And for user "Alice" folder "folder" of the space "Personal" should contain these files: | textfile.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | - Scenario Outline: copy a file from sub-folder into root of personal space + Scenario: copy a file from sub-folder into root of personal space Given user "Alice" has created folder "/folder" And user "Alice" has created folder "folder/sub-folder" And user "Alice" has uploaded file with content "some data" to "folder/sub-folder/textfile.txt" And we save it into "FILEID" - When user "Alice" copies a file "folder/sub-folder/textfile.txt" into "/" inside space "Personal" using file-id path "" + When user "Alice" copies a file "folder/sub-folder/textfile.txt" into "/" inside space "Personal" using file-id "<>" Then the HTTP status code should be "201" And for user "Alice" folder "/" of the space "Personal" should contain these files: | textfile.txt | And for user "Alice" folder "folder/sub-folder" of the space "Personal" should contain these files: | textfile.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | - Scenario Outline: copy a file into a folder in project space + Scenario: copy a file into a folder in project space Given the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API And user "Alice" has created a space "project-space" with the default quota using the Graph API And user "Alice" has created a folder "/folder" in space "project-space" And user "Alice" has uploaded a file inside space "project-space" with content "some data" to "textfile.txt" And we save it into "FILEID" - When user "Alice" copies a file "/textfile.txt" into "/folder" inside space "project-space" using file-id path "" + When user "Alice" copies a file "/textfile.txt" into "/folder" inside space "project-space" using file-id "<>" Then the HTTP status code should be "201" And for user "Alice" folder "/" of the space "project-space" should contain these files: | textfile.txt | And for user "Alice" folder "folder" of the space "project-space" should contain these files: | textfile.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | - Scenario Outline: copy a file into a sub-folder in project space + Scenario: copy a file into a sub-folder in project space Given the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API And user "Alice" has created a space "project-space" with the default quota using the Graph API And user "Alice" has created a folder "folder/sub-folder" in space "project-space" And user "Alice" has uploaded a file inside space "project-space" with content "some data" to "textfile.txt" And we save it into "FILEID" - When user "Alice" copies a file "/textfile.txt" into "/folder/sub-folder" inside space "project-space" using file-id path "" + When user "Alice" copies a file "/textfile.txt" into "/folder/sub-folder" inside space "project-space" using file-id "<>" Then the HTTP status code should be "201" And for user "Alice" folder "/" of the space "project-space" should contain these files: | textfile.txt | And for user "Alice" folder "folder/sub-folder" of the space "project-space" should contain these files: | textfile.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | - Scenario Outline: copy a file from a folder into root of project space + Scenario: copy a file from a folder into root of project space Given the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API And user "Alice" has created a space "project-space" with the default quota using the Graph API And user "Alice" has created a folder "folder" in space "project-space" And user "Alice" has uploaded a file inside space "project-space" with content "some data" to "folder/textfile.txt" And we save it into "FILEID" - When user "Alice" copies a file "folder/textfile.txt" into "/" inside space "project-space" using file-id path "" + When user "Alice" copies a file "folder/textfile.txt" into "/" inside space "project-space" using file-id "<>" Then the HTTP status code should be "201" And for user "Alice" folder "/" of the space "project-space" should contain these files: | textfile.txt | And for user "Alice" folder "folder" of the space "project-space" should contain these files: | textfile.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | - Scenario Outline: copy a file from sub-folder into root of project space + Scenario: copy a file from sub-folder into root of project space Given the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API And user "Alice" has created a space "project-space" with the default quota using the Graph API And user "Alice" has created a folder "folder/sub-folder" in space "project-space" And user "Alice" has uploaded a file inside space "project-space" with content "some data" to "folder/sub-folder/textfile.txt" And we save it into "FILEID" - When user "Alice" copies a file "folder/sub-folder/textfile.txt" into "/" inside space "project-space" using file-id path "" + When user "Alice" copies a file "folder/sub-folder/textfile.txt" into "/" inside space "project-space" using file-id "<>" Then the HTTP status code should be "201" And for user "Alice" folder "/" of the space "project-space" should contain these files: | textfile.txt | And for user "Alice" folder "folder/sub-folder" of the space "project-space" should contain these files: | textfile.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | - Scenario Outline: copy a file from personal to project space + Scenario: copy a file from personal to project space Given the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API And user "Alice" has created a space "project-space" with the default quota using the Graph API And user "Alice" has uploaded file with content "some data" to "textfile.txt" And we save it into "FILEID" - When user "Alice" copies a file "/textfile.txt" into "/" inside space "project-space" using file-id path "" + When user "Alice" copies a file "/textfile.txt" into "/" inside space "project-space" using file-id "<>" Then the HTTP status code should be "201" And for user "Alice" folder "/" of the space "project-space" should contain these files: | textfile.txt | And for user "Alice" folder "/" of the space "Personal" should contain these files: | textfile.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | - Scenario Outline: copy a file from sub-folder to root folder inside Shares space + Scenario: copy a file from sub-folder to root folder inside Shares space Given user "Brian" has been created with default attributes and without skeleton files And user "Alice" has created folder "/folder" And user "Alice" has created folder "folder/sub-folder" @@ -176,7 +140,7 @@ Feature: copying file using file id | shareType | user | | permissionsRole | Editor | And user "Brian" has a share "folder" synced - When user "Brian" copies a file "Shares/folder/sub-folder/test.txt" into "Shares/folder" inside space "Shares" using file-id path "" + When user "Brian" copies a file "Shares/folder/sub-folder/test.txt" into "Shares/folder" inside space "Shares" using file-id "<>" Then the HTTP status code should be "201" And for user "Brian" folder "folder" of the space "Shares" should contain these files: | test.txt | @@ -186,13 +150,9 @@ Feature: copying file using file id | test.txt | And for user "Alice" folder "folder/sub-folder" of the space "Personal" should contain these files: | test.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | - Scenario Outline: copy a file from personal to share space + Scenario: copy a file from personal to share space Given user "Brian" has been created with default attributes and without skeleton files And user "Alice" has created folder "/folder" And user "Alice" has sent the following resource share invitation: @@ -205,7 +165,7 @@ Feature: copying file using file id And user "Brian" has uploaded file with content "some data" to "/test.txt" And we save it into "FILEID" And user "Brian" has a share "folder" synced - When user "Brian" copies a file "/test.txt" into "Shares/folder" inside space "Shares" using file-id path "" + When user "Brian" copies a file "/test.txt" into "Shares/folder" inside space "Shares" using file-id "<>" Then the HTTP status code should be "201" And for user "Brian" folder "folder" of the space "Shares" should contain these files: | test.txt | @@ -213,10 +173,6 @@ Feature: copying file using file id | test.txt | And for user "Alice" folder "folder" of the space "Personal" should contain these files: | test.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | Scenario Outline: copy a file from share to personal space @@ -231,7 +187,7 @@ Feature: copying file using file id | shareType | user | | permissionsRole | | And user "Brian" has a share "folder" synced - When user "Brian" copies a file "/test.txt" into "/" inside space "Personal" using file-id path "" + When user "Brian" copies a file "/test.txt" into "/" inside space "Personal" using file-id "<>" Then the HTTP status code should be "201" And for user "Brian" folder "folder" of the space "Shares" should contain these files: | test.txt | @@ -240,16 +196,13 @@ Feature: copying file using file id And for user "Alice" folder "folder" of the space "Personal" should contain these files: | test.txt | Examples: - | permission-role | dav-path | - | Editor | /remote.php/dav/spaces/<> | - | Viewer | /remote.php/dav/spaces/<> | - | Uploader | /remote.php/dav/spaces/<> | - | Editor | /dav/spaces/<> | - | Viewer | /dav/spaces/<> | - | Uploader | /dav/spaces/<> | + | permission-role | + | Editor | + | Viewer | + | Uploader | - Scenario Outline: sharee tries to copy a file from shares space with secure viewer to personal space + Scenario: sharee tries to copy a file from shares space with secure viewer to personal space Given user "Brian" has been created with default attributes and without skeleton files And user "Alice" has created folder "/folder" And user "Alice" has uploaded file with content "some data" to "/folder/test.txt" @@ -261,16 +214,12 @@ Feature: copying file using file id | shareType | user | | permissionsRole | Secure viewer | And user "Brian" has a share "folder" synced - When user "Brian" copies a file "/test.txt" into "/" inside space "Personal" using file-id path "" + When user "Brian" copies a file "/test.txt" into "/" inside space "Personal" using file-id "<>" Then the HTTP status code should be "403" And for user "Brian" folder "folder" of the space "Shares" should contain these files: | test.txt | And for user "Brian" folder "/" of the space "Personal" should not contain these files: | test.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | Scenario Outline: sharee copies a file from shares to project space @@ -292,7 +241,7 @@ Feature: copying file using file id | sharee | Brian | | shareType | user | | permissionsRole | | - When user "Brian" copies a file "Shares/folder/test.txt" into "/" inside space "project-space" using file-id path "" + When user "Brian" copies a file "Shares/folder/test.txt" into "/" inside space "project-space" using file-id "<>" Then the HTTP status code should be "201" And for user "Brian" folder "folder" of the space "Shares" should contain these files: | test.txt | @@ -301,19 +250,13 @@ Feature: copying file using file id And for user "Alice" folder "/" of the space "project-space" should contain these files: | test.txt | Examples: - | permission-role | space-role | dav-path | - | Viewer | Manager | /remote.php/dav/spaces/<> | - | Viewer | Space Editor | /remote.php/dav/spaces/<> | - | Editor | Manager | /remote.php/dav/spaces/<> | - | Editor | Space Editor | /remote.php/dav/spaces/<> | - | Uploader | Manager | /remote.php/dav/spaces/<> | - | Uploader | Space Editor | /remote.php/dav/spaces/<> | - | Viewer | Manager | /dav/spaces/<> | - | Viewer | Space Editor | /dav/spaces/<> | - | Editor | Manager | /dav/spaces/<> | - | Editor | Space Editor | /dav/spaces/<> | - | Uploader | Manager | /dav/spaces/<> | - | Uploader | Space Editor | /dav/spaces/<> | + | permission-role | space-role | + | Viewer | Manager | + | Viewer | Space Editor | + | Editor | Manager | + | Editor | Space Editor | + | Uploader | Manager | + | Uploader | Space Editor | Scenario Outline: sharee tries to copy a file from shares to project space @@ -335,7 +278,7 @@ Feature: copying file using file id | sharee | Brian | | shareType | user | | permissionsRole | | - When user "Brian" copies a file "Shares/folder/test.txt" into "/" inside space "project-space" using file-id path "" + When user "Brian" copies a file "Shares/folder/test.txt" into "/" inside space "project-space" using file-id "<>" Then the HTTP status code should be "403" And for user "Brian" folder "folder" of the space "Shares" should contain these files: | test.txt | @@ -344,19 +287,13 @@ Feature: copying file using file id And for user "Alice" folder "/" of the space "project-space" should not contain these files: | test.txt | Examples: - | permission-role | space-role | dav-path | - | Secure viewer | Manager | /remote.php/dav/spaces/<> | - | Secure viewer | Space Viewer | /remote.php/dav/spaces/<> | - | Secure viewer | Space Editor | /remote.php/dav/spaces/<> | - | Editor | Space Viewer | /remote.php/dav/spaces/<> | - | Viewer | Space Viewer | /remote.php/dav/spaces/<> | - | Uploader | Space Viewer | /remote.php/dav/spaces/<> | - | Secure viewer | Manager | /dav/spaces/<> | - | Secure viewer | Space Viewer | /dav/spaces/<> | - | Secure viewer | Space Editor | /dav/spaces/<> | - | Editor | Space Viewer | /dav/spaces/<> | - | Viewer | Space Viewer | /dav/spaces/<> | - | Uploader | Space Viewer | /dav/spaces/<> | + | permission-role | space-role | + | Secure viewer | Manager | + | Secure viewer | Space Viewer | + | Secure viewer | Space Editor | + | Editor | Space Viewer | + | Viewer | Space Viewer | + | Uploader | Space Viewer | Scenario Outline: sharee copies a file between shares spaces @@ -379,7 +316,7 @@ Feature: copying file using file id | shareType | user | | permissionsRole | | And user "Brian" has a share "share2" synced - When user "Brian" copies a file "Shares/share1/test.txt" into "share2" inside space "Shares" using file-id path "" + When user "Brian" copies a file "Shares/share1/test.txt" into "share2" inside space "Shares" using file-id "<>" Then the HTTP status code should be "201" And for user "Brian" folder "share1" of the space "Shares" should contain these files: | test.txt | @@ -390,19 +327,13 @@ Feature: copying file using file id And for user "Alice" folder "share2" of the space "Personal" should contain these files: | test.txt | Examples: - | from-share-role | to-share-role | dav-path | - | Viewer | Editor | /remote.php/dav/spaces/<> | - | Viewer | Uploader | /remote.php/dav/spaces/<> | - | Editor | Editor | /remote.php/dav/spaces/<> | - | Editor | Uploader | /remote.php/dav/spaces/<> | - | Uploader | Editor | /remote.php/dav/spaces/<> | - | Uploader | Uploader | /remote.php/dav/spaces/<> | - | Viewer | Editor | /dav/spaces/<> | - | Viewer | Uploader | /dav/spaces/<> | - | Editor | Editor | /dav/spaces/<> | - | Editor | Uploader | /dav/spaces/<> | - | Uploader | Editor | /dav/spaces/<> | - | Uploader | Uploader | /dav/spaces/<> | + | from-share-role | to-share-role | + | Viewer | Editor | + | Viewer | Uploader | + | Editor | Editor | + | Editor | Uploader | + | Uploader | Editor | + | Uploader | Uploader | Scenario Outline: sharee tries to copy a file between shares space @@ -425,7 +356,7 @@ Feature: copying file using file id | shareType | user | | permissionsRole | | And user "Brian" has a share "share2" synced - When user "Brian" copies a file "Shares/share1/test.txt" into "share2" inside space "Shares" using file-id path "" + When user "Brian" copies a file "Shares/share1/test.txt" into "share2" inside space "Shares" using file-id "<>" Then the HTTP status code should be "403" And for user "Brian" folder "share1" of the space "Shares" should contain these files: | test.txt | @@ -436,27 +367,17 @@ Feature: copying file using file id And for user "Alice" folder "share2" of the space "Personal" should not contain these files: | test.txt | Examples: - | from-share-role | to-share-role | dav-path | - | Secure viewer | Viewer | /remote.php/dav/spaces/<> | - | Secure viewer | Editor | /remote.php/dav/spaces/<> | - | Secure viewer | Uploader | /remote.php/dav/spaces/<> | - | Secure viewer | Secure viewer | /remote.php/dav/spaces/<> | - | Viewer | Viewer | /remote.php/dav/spaces/<> | - | Editor | Viewer | /remote.php/dav/spaces/<> | - | Uploader | Viewer | /remote.php/dav/spaces/<> | - | Viewer | Secure viewer | /remote.php/dav/spaces/<> | - | Editor | Secure viewer | /remote.php/dav/spaces/<> | - | Uploader | Secure viewer | /remote.php/dav/spaces/<> | - | Secure viewer | Viewer | /dav/spaces/<> | - | Secure viewer | Editor | /dav/spaces/<> | - | Secure viewer | Uploader | /dav/spaces/<> | - | Secure viewer | Secure viewer | /dav/spaces/<> | - | Viewer | Viewer | /dav/spaces/<> | - | Editor | Viewer | /dav/spaces/<> | - | Uploader | Viewer | /dav/spaces/<> | - | Viewer | Secure viewer | /dav/spaces/<> | - | Editor | Secure viewer | /dav/spaces/<> | - | Uploader | Secure viewer | /dav/spaces/<> | + | from-share-role | to-share-role | + | Secure viewer | Viewer | + | Secure viewer | Editor | + | Secure viewer | Uploader | + | Secure viewer | Secure viewer | + | Viewer | Viewer | + | Editor | Viewer | + | Uploader | Viewer | + | Viewer | Secure viewer | + | Editor | Secure viewer | + | Uploader | Secure viewer | Scenario Outline: copy a file from project to personal space @@ -470,20 +391,17 @@ Feature: copying file using file id | sharee | Brian | | shareType | user | | permissionsRole | | - When user "Brian" copies a file "/textfile.txt" into "/" inside space "Personal" using file-id path "" + When user "Brian" copies a file "/textfile.txt" into "/" inside space "Personal" using file-id "<>" Then the HTTP status code should be "201" And for user "Brian" folder "/" of the space "project-space" should contain these files: | textfile.txt | And for user "Brian" folder "/" of the space "Personal" should contain these files: | textfile.txt | Examples: - | space-role | dav-path | - | Manager | /remote.php/dav/spaces/<> | - | Space Editor | /remote.php/dav/spaces/<> | - | Space Viewer | /remote.php/dav/spaces/<> | - | Manager | /dav/spaces/<> | - | Space Editor | /dav/spaces/<> | - | Space Viewer | /dav/spaces/<> | + | space-role | + | Manager | + | Space Editor | + | Space Viewer | Scenario Outline: copy a file between two project spaces @@ -503,7 +421,7 @@ Feature: copying file using file id | sharee | Brian | | shareType | user | | permissionsRole | | - When user "Brian" copies a file "textfile.txt" into "/" inside space "second-project-space" using file-id path "" + When user "Brian" copies a file "textfile.txt" into "/" inside space "second-project-space" using file-id "<>" Then the HTTP status code should be "201" And for user "Brian" the space "second-project-space" should contain these entries: | textfile.txt | @@ -512,19 +430,13 @@ Feature: copying file using file id And for user "Alice" the space "second-project-space" should contain these entries: | textfile.txt | Examples: - | from-space-role | to-space-role | dav-path | - | Manager | Manager | /remote.php/dav/spaces/<> | - | Manager | Space Editor | /remote.php/dav/spaces/<> | - | Space Editor | Manager | /remote.php/dav/spaces/<> | - | Space Editor | Space Editor | /remote.php/dav/spaces/<> | - | Space Viewer | Manager | /remote.php/dav/spaces/<> | - | Space Viewer | Space Editor | /remote.php/dav/spaces/<> | - | Manager | Manager | /dav/spaces/<> | - | Manager | Space Editor | /dav/spaces/<> | - | Space Editor | Manager | /dav/spaces/<> | - | Space Editor | Space Editor | /dav/spaces/<> | - | Space Viewer | Manager | /dav/spaces/<> | - | Space Viewer | Space Editor | /dav/spaces/<> | + | from-space-role | to-space-role | + | Manager | Manager | + | Manager | Space Editor | + | Space Editor | Manager | + | Space Editor | Space Editor | + | Space Viewer | Manager | + | Space Viewer | Space Editor | Scenario Outline: try to copy a file from a project to another project space with read permission @@ -544,7 +456,7 @@ Feature: copying file using file id | sharee | Brian | | shareType | user | | permissionsRole | | - When user "Brian" copies a file "textfile.txt" into "/" inside space "second-project-space" using file-id path "" + When user "Brian" copies a file "textfile.txt" into "/" inside space "second-project-space" using file-id "<>" Then the HTTP status code should be "403" And for user "Brian" the space "second-project-space" should not contain these entries: | textfile.txt | @@ -553,13 +465,10 @@ Feature: copying file using file id But for user "Alice" the space "second-project-space" should not contain these entries: | textfile.txt | Examples: - | from-space-role | to-space-role | dav-path | - | Manager | Space Viewer | /remote.php/dav/spaces/<> | - | Space Editor | Space Viewer | /remote.php/dav/spaces/<> | - | Space Viewer | Space Viewer | /remote.php/dav/spaces/<> | - | Manager | Space Viewer | /dav/spaces/<> | - | Space Editor | Space Viewer | /dav/spaces/<> | - | Space Viewer | Space Viewer | /dav/spaces/<> | + | from-space-role | to-space-role | + | Manager | Space Viewer | + | Space Editor | Space Viewer | + | Space Viewer | Space Viewer | Scenario Outline: copy a file from project to shares space @@ -581,7 +490,7 @@ Feature: copying file using file id | shareType | user | | permissionsRole | | And user "Brian" has a share "testshare" synced - When user "Brian" copies a file "textfile.txt" into "testshare" inside space "Shares" using file-id path "" + When user "Brian" copies a file "textfile.txt" into "testshare" inside space "Shares" using file-id "<>" Then the HTTP status code should be "201" And for user "Brian" folder "/" of the space "project-space" should contain these files: | textfile.txt | @@ -590,19 +499,13 @@ Feature: copying file using file id And for user "Alice" folder "testshare" of the space "Personal" should contain these files: | textfile.txt | Examples: - | space-role | permissions | dav-path | - | Manager | Editor | /remote.php/dav/spaces/<> | - | Manager | Uploader | /remote.php/dav/spaces/<> | - | Space Editor | Editor | /remote.php/dav/spaces/<> | - | Space Editor | Uploader | /remote.php/dav/spaces/<> | - | Space Viewer | Editor | /remote.php/dav/spaces/<> | - | Space Viewer | Uploader | /remote.php/dav/spaces/<> | - | Manager | Editor | /dav/spaces/<> | - | Manager | Uploader | /dav/spaces/<> | - | Space Editor | Editor | /dav/spaces/<> | - | Space Editor | Uploader | /dav/spaces/<> | - | Space Viewer | Editor | /dav/spaces/<> | - | Space Viewer | Uploader | /dav/spaces/<> | + | space-role | permissions | + | Manager | Editor | + | Manager | Uploader | + | Space Editor | Editor | + | Space Editor | Uploader | + | Space Viewer | Editor | + | Space Viewer | Uploader | Scenario Outline: try to copy a file from project to shares space with read permission @@ -624,7 +527,7 @@ Feature: copying file using file id | shareType | user | | permissionsRole | | And user "Brian" has a share "testshare" synced - When user "Brian" copies a file "textfile.txt" into "testshare" inside space "Shares" using file-id path "" + When user "Brian" copies a file "textfile.txt" into "testshare" inside space "Shares" using file-id "<>" Then the HTTP status code should be "403" And for user "Brian" folder "/" of the space "project-space" should contain these files: | textfile.txt | @@ -633,16 +536,10 @@ Feature: copying file using file id And for user "Alice" folder "testshare" of the space "Personal" should not contain these files: | textfile.txt | Examples: - | space-role | permissions | dav-path | - | Manager | Viewer | /remote.php/dav/spaces/<> | - | Manager | Secure viewer | /remote.php/dav/spaces/<> | - | Space Editor | Viewer | /remote.php/dav/spaces/<> | - | Space Editor | Secure viewer | /remote.php/dav/spaces/<> | - | Space Viewer | Viewer | /remote.php/dav/spaces/<> | - | Space Viewer | Secure viewer | /remote.php/dav/spaces/<> | - | Manager | Viewer | /dav/spaces/<> | - | Manager | Secure viewer | /dav/spaces/<> | - | Space Editor | Viewer | /dav/spaces/<> | - | Space Editor | Secure viewer | /dav/spaces/<> | - | Space Viewer | Viewer | /dav/spaces/<> | - | Space Viewer | Secure viewer | /dav/spaces/<> | + | space-role | permissions | + | Manager | Viewer | + | Manager | Secure viewer | + | Space Editor | Viewer | + | Space Editor | Secure viewer | + | Space Viewer | Viewer | + | Space Viewer | Secure viewer | diff --git a/tests/acceptance/features/apiSpacesDavOperation/fileVersionByFileID.feature b/tests/acceptance/features/apiSpacesDavOperation/fileVersionByFileID.feature index c7f3e96900..012c593852 100644 --- a/tests/acceptance/features/apiSpacesDavOperation/fileVersionByFileID.feature +++ b/tests/acceptance/features/apiSpacesDavOperation/fileVersionByFileID.feature @@ -24,10 +24,10 @@ Feature: checking file versions using file id | shareType | user | | permissionsRole | | And user "Brian" has a share "text.txt" synced - When user "Alice" gets the number of versions of file "/text.txt" using file-id path "/meta/<>/v" + When user "Alice" gets the number of versions of file "/text.txt" using file-id "<>" Then the HTTP status code should be "207" And the number of versions should be "1" - When user "Brian" tries to get the number of versions of file "/text.txt" using file-id path "/meta/<>/v" + When user "Brian" tries to get the number of versions of file "/text.txt" using file-id "<>" Then the HTTP status code should be "403" Examples: | role | @@ -41,10 +41,10 @@ Feature: checking file versions using file id | sharee | Brian | | shareType | user | | permissionsRole | | - When user "Alice" gets the number of versions of file "/text.txt" using file-id path "/meta/<>/v" + When user "Alice" gets the number of versions of file "/text.txt" using file-id "<>" Then the HTTP status code should be "207" And the number of versions should be "1" - When user "Brian" gets the number of versions of file "/text.txt" using file-id path "/meta/<>/v" + When user "Brian" gets the number of versions of file "/text.txt" using file-id "<>" Then the HTTP status code should be "207" And the number of versions should be "1" Examples: @@ -59,7 +59,7 @@ Feature: checking file versions using file id | sharee | Brian | | shareType | user | | permissionsRole | Space Viewer | - When user "Brian" tries to get the number of versions of file "/text.txt" using file-id path "/meta/<>/v" + When user "Brian" tries to get the number of versions of file "/text.txt" using file-id "<>" Then the HTTP status code should be "403" @issue-7738 @@ -73,10 +73,10 @@ Feature: checking file versions using file id | permissionsRole | | And user "Brian" has a share "text.txt" synced And user "Alice" has moved file "text.txt" to "/testFolder/movedText.txt" in space "Project1" - When user "Alice" gets the number of versions of file "/testFolder/movedText.txt" using file-id path "/meta/<>/v" + When user "Alice" gets the number of versions of file "/testFolder/movedText.txt" using file-id "<>" Then the HTTP status code should be "207" And the number of versions should be "1" - When user "Brian" tries to get the number of versions of file "/Shares/testFolder/movedText.txt" using file-id path "/meta/<>/v" + When user "Brian" tries to get the number of versions of file "/Shares/testFolder/movedText.txt" using file-id "<>" Then the HTTP status code should be "403" Examples: | role | @@ -99,7 +99,7 @@ Feature: checking file versions using file id | shareType | user | | permissionsRole | Manager | And user "Alice" has moved file "text.txt" to "/testFolder/movedText.txt" in space "Project1" - When user "Brian" gets the number of versions of file "/text.txt" using file-id path "/meta/<>/v" + When user "Brian" gets the number of versions of file "/text.txt" using file-id "<>" Then the HTTP status code should be "207" And the number of versions should be "1" @@ -110,7 +110,7 @@ Feature: checking file versions using file id And user "Alice" has uploaded file with content "some data - edited" to "textfile.txt" And we save it into "FILEID" And user "Alice" has moved file "textfile.txt" to "textfile.txt" in space "Personal" - When user "Alice" gets the number of versions of file "textfile.txt" using file-id path "/meta/<>/v" + When user "Alice" gets the number of versions of file "textfile.txt" using file-id "<>" Then the HTTP status code should be "207" And the number of versions should be "1" Examples: @@ -124,9 +124,10 @@ Feature: checking file versions using file id And user "Alice" has uploaded file with content "some data" to "textfile.txt" And user "Alice" has uploaded file with content "some data - edited" to "textfile.txt" And we save it into "FILEID" - When user "Alice" moves a file "textfile.txt" into "" inside space "Personal" using file-id path "/dav/spaces/<>" + And using spaces DAV path + When user "Alice" moves a file "textfile.txt" into "" inside space "Personal" using file-id "<>" Then the HTTP status code should be "201" - When user "Alice" gets the number of versions of file "textfile.txt" using file-id path "/meta/<>/v" + When user "Alice" gets the number of versions of file "textfile.txt" using file-id "<>" Then the HTTP status code should be "207" And the number of versions should be "1" Examples: @@ -141,7 +142,7 @@ Feature: checking file versions using file id And user "Alice" has uploaded a file inside space "Project1" with content "some data - edited" to "textfile.txt" And we save it into "FILEID" And user "Alice" has moved file "textfile.txt" to "textfile.txt" in space "Project1" - When user "Alice" gets the number of versions of file "textfile.txt" using file-id path "/meta/<>/v" + When user "Alice" gets the number of versions of file "textfile.txt" using file-id "<>" Then the HTTP status code should be "207" And the number of versions should be "1" Examples: @@ -155,9 +156,9 @@ Feature: checking file versions using file id And user "Alice" has uploaded a file inside space "Project1" with content "some data" to "textfile.txt" And user "Alice" has uploaded a file inside space "Project1" with content "some data - edited" to "textfile.txt" And we save it into "FILEID" - When user "Alice" moves a file "textfile.txt" into "" inside space "Project1" using file-id path "/dav/spaces/<>" + When user "Alice" moves a file "textfile.txt" into "" inside space "Project1" using file-id "<>" Then the HTTP status code should be "201" - When user "Alice" gets the number of versions of file "textfile.txt" using file-id path "/meta/<>/v" + When user "Alice" gets the number of versions of file "textfile.txt" using file-id "<>" Then the HTTP status code should be "207" And the number of versions should be "1" Examples: @@ -173,7 +174,7 @@ Feature: checking file versions using file id | sharee | Brian | | shareType | user | | permissionsRole | Space Editor Without Versions | - When user "Brian" gets the number of versions of file "/text.txt" using file-id path "/meta/<>/v" + When user "Brian" gets the number of versions of file "/text.txt" using file-id "<>" Then the HTTP status code should be "403" @@ -182,7 +183,7 @@ Feature: checking file versions using file id | space | Project1 | | permissionsRole | | | password | %public% | - When the public tries to get the number of versions of file "/text.txt" with password "%public%" using file-id path "/meta/<>/v" + When the public tries to get the number of versions of file "/text.txt" with password "%public%" using file-id "<>" Then the HTTP status code should be "401" Examples: | permissions-role | @@ -200,7 +201,7 @@ Feature: checking file versions using file id | space | Personal | | permissionsRole | | | password | %public% | - When the public tries to get the number of versions of file "/parent.txt" with password "%public%" using file-id path "/meta/<>/v" + When the public tries to get the number of versions of file "/parent.txt" with password "%public%" using file-id "<>" Then the HTTP status code should be "401" Examples: | permissions-role | diff --git a/tests/acceptance/features/apiSpacesDavOperation/getFileByFileId.feature b/tests/acceptance/features/apiSpacesDavOperation/getFileByFileId.feature index 01e82aad66..a698de27d6 100644 --- a/tests/acceptance/features/apiSpacesDavOperation/getFileByFileId.feature +++ b/tests/acceptance/features/apiSpacesDavOperation/getFileByFileId.feature @@ -15,9 +15,8 @@ Feature: accessing files using file id Then the HTTP status code should be "200" And the downloaded content should be "some data" Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | Scenario Outline: get content of a file inside a folder @@ -28,9 +27,8 @@ Feature: accessing files using file id Then the HTTP status code should be "200" And the downloaded content should be "some data" Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | Scenario Outline: get content of a file inside a project space @@ -42,9 +40,8 @@ Feature: accessing files using file id Then the HTTP status code should be "200" And the downloaded content should be "some data" Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | Scenario Outline: sharee gets content of a shared file @@ -63,7 +60,6 @@ Feature: accessing files using file id And the downloaded content should be "some data" Examples: | dav-path | - | /remote.php/dav/spaces/<> | | /dav/spaces/<> | @@ -83,9 +79,8 @@ Feature: accessing files using file id Then the HTTP status code should be "200" And the downloaded content should be "some data" Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | Scenario Outline: sharee gets content of a file inside a shared space @@ -103,9 +98,8 @@ Feature: accessing files using file id Then the HTTP status code should be "200" And the downloaded content should be "some data" Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | Scenario Outline: user tries to get content of file owned by others @@ -115,9 +109,8 @@ Feature: accessing files using file id When user "Brian" sends HTTP method "GET" to URL "" Then the HTTP status code should be "404" Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | Scenario Outline: sharee gets content of a shared file when sync is disable @@ -135,9 +128,8 @@ Feature: accessing files using file id Then the HTTP status code should be "200" And the downloaded content should be "some data" Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | Scenario Outline: sharee gets content of a file inside a shared folder when sync is disable @@ -156,9 +148,8 @@ Feature: accessing files using file id Then the HTTP status code should be "200" And the downloaded content should be "some data" Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | Scenario Outline: user who is member of group gets content of a shared file when sync is disable @@ -179,9 +170,8 @@ Feature: accessing files using file id Then the HTTP status code should be "200" And the downloaded content should be "some data" Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | Scenario Outline: user who is member of group gets content of a shared folder when sync is disable @@ -203,9 +193,8 @@ Feature: accessing files using file id Then the HTTP status code should be "200" And the downloaded content should be "some data" Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | Scenario Outline: sharee gets content of a shared file in project space when sync is disabled @@ -226,9 +215,8 @@ Feature: accessing files using file id Then the HTTP status code should be "200" And the downloaded content should be "some content" Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | Scenario Outline: sharee gets content of a file inside a shared folder in project space when sync is disabled @@ -250,9 +238,8 @@ Feature: accessing files using file id Then the HTTP status code should be "200" And the downloaded content should be "some content" Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | Scenario Outline: user who is member of group gets content of a shared file in project space when sync is disabled @@ -275,9 +262,8 @@ Feature: accessing files using file id Then the HTTP status code should be "200" And the downloaded content should be "some content" Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | Scenario Outline: user who is member of group gets content of a file from shared folder in project space when sync is disabled @@ -301,6 +287,5 @@ Feature: accessing files using file id Then the HTTP status code should be "200" And the downloaded content should be "some content" Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | diff --git a/tests/acceptance/features/apiSpacesDavOperation/moveByFileId.feature b/tests/acceptance/features/apiSpacesDavOperation/moveByFileId.feature index 03b5e35cc1..0f8c72c6ba 100644 --- a/tests/acceptance/features/apiSpacesDavOperation/moveByFileId.feature +++ b/tests/acceptance/features/apiSpacesDavOperation/moveByFileId.feature @@ -8,83 +8,63 @@ Feature: moving/renaming file using file id And user "Alice" has been created with default attributes and without skeleton files - Scenario Outline: move a file into a folder inside personal space + Scenario: move a file into a folder inside personal space Given user "Alice" has created folder "/folder" And user "Alice" has uploaded file with content "some data" to "/textfile.txt" And we save it into "FILEID" - When user "Alice" moves a file "/textfile.txt" into "/folder" inside space "Personal" using file-id path "" + When user "Alice" moves a file "/textfile.txt" into "/folder" inside space "Personal" using file-id "<>" Then the HTTP status code should be "201" And for user "Alice" folder "folder" of the space "Personal" should contain these files: | textfile.txt | But for user "Alice" the space "Personal" should not contain these entries: | textfile.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | - Scenario Outline: move a file into a sub-folder inside personal space + Scenario: move a file into a sub-folder inside personal space Given user "Alice" has created folder "/folder" And user "Alice" has created folder "folder/sub-folder" And user "Alice" has uploaded file with content "some data" to "/textfile.txt" And we save it into "FILEID" - When user "Alice" moves a file "/textfile.txt" into "/folder/sub-folder" inside space "Personal" using file-id path "" + When user "Alice" moves a file "/textfile.txt" into "/folder/sub-folder" inside space "Personal" using file-id "<>" Then the HTTP status code should be "201" And for user "Alice" folder "folder/sub-folder/" of the space "Personal" should contain these files: | textfile.txt | But for user "Alice" the space "Personal" should not contain these entries: | textfile.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | - Scenario Outline: move a file from folder to root inside personal space + Scenario: move a file from folder to root inside personal space Given user "Alice" has created folder "/folder" And user "Alice" has uploaded file with content "some data" to "folder/textfile.txt" And we save it into "FILEID" - When user "Alice" moves a file "folder/textfile.txt" into "/" inside space "Personal" using file-id path "" + When user "Alice" moves a file "folder/textfile.txt" into "/" inside space "Personal" using file-id "<>" Then the HTTP status code should be "201" And for user "Alice" the space "Personal" should contain these entries: | textfile.txt | But for user "Alice" folder "folder" of the space "Personal" should not contain these files: | textfile.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | - Scenario Outline: move a file from sub-folder to root inside personal space + Scenario: move a file from sub-folder to root inside personal space Given user "Alice" has created folder "/folder" And user "Alice" has created folder "folder/sub-folder" And user "Alice" has uploaded file with content "some data" to "folder/sub-folder/textfile.txt" And we save it into "FILEID" - When user "Alice" moves a file "folder/sub-folder/textfile.txt" into "/" inside space "Personal" using file-id path "" + When user "Alice" moves a file "folder/sub-folder/textfile.txt" into "/" inside space "Personal" using file-id "<>" Then the HTTP status code should be "201" And for user "Alice" the space "Personal" should contain these entries: | textfile.txt | But for user "Alice" folder "folder/sub-folder" of the space "Personal" should not contain these files: | textfile.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | @issue-1976 - Scenario Outline: try to move a file into same folder with same name + Scenario: try to move a file into same folder with same name And user "Alice" has uploaded file with content "some data" to "textfile.txt" And we save it into "FILEID" - When user "Alice" moves a file "textfile.txt" into "/" inside space "Personal" using file-id path "" + When user "Alice" moves a file "textfile.txt" into "/" inside space "Personal" using file-id "<>" Then the HTTP status code should be "403" And as "Alice" file "textfile.txt" should not exist in the trashbin of the space "Personal" And for user "Alice" the content of the file "textfile.txt" of the space "Personal" should be "some data" - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | Scenario Outline: move a file from personal to share space @@ -99,7 +79,7 @@ Feature: moving/renaming file using file id And user "Brian" has a share "folder" synced And user "Brian" has uploaded file with content "some data" to "/test.txt" And we save it into "FILEID" - When user "Brian" moves a file "test.txt" into "folder" inside space "Shares" using file-id path "" + When user "Brian" moves a file "test.txt" into "folder" inside space "Shares" using file-id "<>" Then the HTTP status code should be "502" And the value of the item "/d:error/s:message" in the response about user "Brian" should be "cross storage moves are not supported, use copy and delete" And for user "Brian" folder "/" of the space "Personal" should contain these files: @@ -107,11 +87,9 @@ Feature: moving/renaming file using file id But for user "Alice" folder "folder" of the space "Personal" should not contain these files: | test.txt | Examples: - | permissions | dav-path | - | Editor | /remote.php/dav/spaces/<> | - | Editor | /dav/spaces/<> | - | Viewer | /remote.php/dav/spaces/<> | - | Viewer | /dav/spaces/<> | + | permissions | + | Editor | + | Viewer | @issue-7618 Scenario Outline: move a file from personal to project space @@ -125,38 +103,31 @@ Feature: moving/renaming file using file id | sharee | Brian | | shareType | user | | permissionsRole | | - When user "Brian" moves a file "textfile.txt" into "/" inside space "project-space" using file-id path "" + When user "Brian" moves a file "textfile.txt" into "/" inside space "project-space" using file-id "<>" Then the HTTP status code should be "" And for user "Brian" folder "/" of the space "Personal" should contain these files: | textfile.txt | But for user "Brian" folder "/" of the space "project-space" should not contain these files: | textfile.txt | Examples: - | space-role | http-status-code | dav-path | - | Manager | 502 | /remote.php/dav/spaces/<> | - | Space Editor | 502 | /remote.php/dav/spaces/<> | - | Space Viewer | 403 | /remote.php/dav/spaces/<> | - | Manager | 502 | /dav/spaces/<> | - | Space Editor | 502 | /dav/spaces/<> | - | Space Viewer | 403 | /dav/spaces/<> | + | space-role | http-status-code | + | Manager | 502 | + | Space Editor | 502 | + | Space Viewer | 403 | @issue-7618 - Scenario Outline: move a file to different name from personal space to project space + Scenario: move a file to different name from personal space to project space Given the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API And user "Alice" has created a space "project-space" with the default quota using the Graph API And user "Alice" has uploaded a file inside space "Personal" with content "some data" to "textfile.txt" And we save it into "FILEID" - When user "Alice" renames a file "/textfile.txt" into "/renamed.txt" inside space "project-space" using file-id path "" + When user "Alice" renames a file "/textfile.txt" into "/renamed.txt" inside space "project-space" using file-id "<>" Then the HTTP status code should be "502" And the value of the item "/d:error/s:message" in the response about user "Alice" should be "move:error: not supported: cannot move across spaces" And for user "Alice" folder "/" of the space "Personal" should contain these files: | textfile.txt | But for user "Alice" folder "/" of the space "project-space" should not contain these files: | renamed.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | Scenario Outline: move a file into a folder inside project space (manager/editor) @@ -171,18 +142,16 @@ Feature: moving/renaming file using file id | sharee | Brian | | shareType | user | | permissionsRole | | - When user "Brian" moves a file "/textfile.txt" into "/folder" inside space "project-space" using file-id path "" + When user "Brian" moves a file "/textfile.txt" into "/folder" inside space "project-space" using file-id "<>" Then the HTTP status code should be "201" And for user "Alice" folder "folder" of the space "project-space" should contain these files: | textfile.txt | But for user "Alice" the space "project-space" should not contain these entries: | textfile.txt | Examples: - | space-role | dav-path | - | Manager | /remote.php/dav/spaces/<> | - | Space Editor | /remote.php/dav/spaces/<> | - | Manager | /dav/spaces/<> | - | Space Editor | /dav/spaces/<> | + | space-role | + | Manager | + | Space Editor | @issue-1976 Scenario Outline: try to move a file within a project space into a folder with same name @@ -196,21 +165,18 @@ Feature: moving/renaming file using file id | sharee | Brian | | shareType | user | | permissionsRole | | - When user "Brian" moves a file "textfile.txt" into "/" inside space "project-space" using file-id path "" + When user "Brian" moves a file "textfile.txt" into "/" inside space "project-space" using file-id "<>" Then the HTTP status code should be "403" And as "Alice" file "textfile.txt" should not exist in the trashbin of the space "project-space" And for user "Brian" the content of the file "textfile.txt" of the space "project-space" should be "some data" Examples: - | space-role | dav-path | - | Manager | /remote.php/dav/spaces/<> | - | Space Editor | /remote.php/dav/spaces/<> | - | Space Viewer | /remote.php/dav/spaces/<> | - | Manager | /dav/spaces/<> | - | Space Viewer | /dav/spaces/<> | - | viewer | /dav/spaces/<> | + | space-role | + | Manager | + | Space Viewer | + | viewer | - Scenario Outline: try to move a file into a folder inside project space (viewer) + Scenario: try to move a file into a folder inside project space (viewer) Given the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API And user "Brian" has been created with default attributes and without skeleton files And user "Alice" has created a space "project-space" with the default quota using the Graph API @@ -222,70 +188,54 @@ Feature: moving/renaming file using file id | sharee | Brian | | shareType | user | | permissionsRole | Space Viewer | - When user "Brian" moves a file "/textfile.txt" into "/folder" inside space "project-space" using file-id path "" + When user "Brian" moves a file "/textfile.txt" into "/folder" inside space "project-space" using file-id "<>" Then the HTTP status code should be "403" And for user "Alice" the space "project-space" should contain these entries: | textfile.txt | But for user "Alice" folder "folder" of the space "project-space" should not contain these files: | textfile.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | - Scenario Outline: move a file into a sub-folder inside project space + Scenario: move a file into a sub-folder inside project space Given the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API And user "Alice" has created a space "project-space" with the default quota using the Graph API And user "Alice" has created a folder "folder/sub-folder" in space "project-space" And user "Alice" has uploaded a file inside space "project-space" with content "some data" to "/textfile.txt" And we save it into "FILEID" - When user "Alice" moves a file "/textfile.txt" into "/folder/sub-folder" inside space "project-space" using file-id path "" + When user "Alice" moves a file "/textfile.txt" into "/folder/sub-folder" inside space "project-space" using file-id "<>" Then the HTTP status code should be "201" And for user "Alice" folder "folder/sub-folder/" of the space "project-space" should contain these files: | textfile.txt | But for user "Alice" the space "Personal" should not contain these entries: | textfile.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | - Scenario Outline: move a file from folder to root inside project space + Scenario: move a file from folder to root inside project space Given the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API And user "Alice" has created a space "project-space" with the default quota using the Graph API And user "Alice" has created a folder "folder" in space "project-space" And user "Alice" has uploaded a file inside space "project-space" with content "some data" to "folder/textfile.txt" And we save it into "FILEID" - When user "Alice" moves a file "folder/textfile.txt" into "/" inside space "project-space" using file-id path "" + When user "Alice" moves a file "folder/textfile.txt" into "/" inside space "project-space" using file-id "<>" Then the HTTP status code should be "201" And for user "Alice" the space "project-space" should contain these entries: | textfile.txt | But for user "Alice" folder "folder" of the space "project-space" should not contain these files: | textfile.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | - Scenario Outline: move a file from sub-folder to root inside project space + Scenario: move a file from sub-folder to root inside project space Given the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API And user "Alice" has created a space "project-space" with the default quota using the Graph API And user "Alice" has created a folder "folder/sub-folder" in space "project-space" And user "Alice" has uploaded a file inside space "project-space" with content "some data" to "folder/sub-folder/textfile.txt" And we save it into "FILEID" - When user "Alice" moves a file "folder/sub-folder/textfile.txt" into "/" inside space "project-space" using file-id path "" + When user "Alice" moves a file "folder/sub-folder/textfile.txt" into "/" inside space "project-space" using file-id "<>" Then the HTTP status code should be "201" And for user "Alice" the space "project-space" should contain these entries: | textfile.txt | But for user "Alice" folder "folder/sub-folder" of the space "project-space" should not contain these files: | textfile.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | @issue-8116 Scenario Outline: move a file between two project spaces @@ -305,42 +255,33 @@ Feature: moving/renaming file using file id | sharee | Brian | | shareType | user | | permissionsRole | | - When user "Brian" moves a file "file.txt" into "/" inside space "second-project-space" using file-id path "" + When user "Brian" moves a file "file.txt" into "/" inside space "second-project-space" using file-id "<>" Then the HTTP status code should be "" And for user "Brian" the space "second-project-space" should not contain these entries: | file.txt | But for user "Brian" the space "first-project-space" should contain these entries: | file.txt | Examples: - | from-space-role | to-space-role | http-status-code | dav-path | - | Manager | Manager | 502 | /remote.php/dav/spaces/<> | - | Space Editor | Manager | 502 | /remote.php/dav/spaces/<> | - | Manager | Space Editor | 502 | /remote.php/dav/spaces/<> | - | Space Editor | Space Editor | 502 | /remote.php/dav/spaces/<> | - | Manager | Space Viewer | 403 | /remote.php/dav/spaces/<> | - | Space Editor | Space Viewer | 403 | /remote.php/dav/spaces/<> | - | Space Viewer | Manager | 403 | /remote.php/dav/spaces/<> | - | Space Viewer | Space Editor | 403 | /remote.php/dav/spaces/<> | - | Space Viewer | Space Viewer | 403 | /remote.php/dav/spaces/<> | - | Manager | Manager | 502 | /dav/spaces/<> | - | Space Editor | Manager | 502 | /dav/spaces/<> | - | Manager | Space Editor | 502 | /dav/spaces/<> | - | Space Editor | Space Editor | 502 | /dav/spaces/<> | - | Manager | Space Viewer | 403 | /dav/spaces/<> | - | Space Editor | Space Viewer | 403 | /dav/spaces/<> | - | Space Viewer | Manager | 403 | /dav/spaces/<> | - | Space Viewer | Space Editor | 403 | /dav/spaces/<> | - | Space Viewer | Space Viewer | 403 | /dav/spaces/<> | + | from-space-role | to-space-role | http-status-code | + | Manager | Manager | 502 | + | Space Editor | Manager | 502 | + | Manager | Space Editor | 502 | + | Space Editor | Space Editor | 502 | + | Manager | Space Viewer | 403 | + | Space Editor | Space Viewer | 403 | + | Space Viewer | Manager | 403 | + | Space Viewer | Space Editor | 403 | + | Space Viewer | Space Viewer | 403 | @issue-8116 - Scenario Outline: move a file to different name between project spaces + Scenario: move a file to different name between project spaces Given the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API And user "Alice" has created a space "first-project-space" with the default quota using the Graph API And user "Alice" has created a space "second-project-space" with the default quota using the Graph API And user "Alice" has uploaded a file inside space "first-project-space" with content "data from first project space" to "firstProjectSpacetextfile.txt" And user "Alice" has uploaded a file inside space "second-project-space" with content "data from second project space" to "secondProjectSpacetextfile.txt" And we save it into "FILEID" - When user "Alice" renames a file "/secondProjectSpacetextfile.txt" into "/renamedSecondProjectSpacetextfile.txt" inside space "first-project-space" using file-id path "" + When user "Alice" renames a file "/secondProjectSpacetextfile.txt" into "/renamedSecondProjectSpacetextfile.txt" inside space "first-project-space" using file-id "<>" Then the HTTP status code should be "502" And the value of the item "/d:error/s:message" in the response about user "Alice" should be "move:error: not supported: cannot move across spaces" And for user "Alice" folder "/" of the space "first-project-space" should contain these files: @@ -349,10 +290,6 @@ Feature: moving/renaming file using file id | secondProjectSpacetextfile.txt | But for user "Alice" the space "first-project-space" should not contain these entries: | renamedSecondProjectSpacetextfile.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | Scenario Outline: move a file from project to shares space @@ -374,26 +311,20 @@ Feature: moving/renaming file using file id | shareType | user | | permissionsRole | | And user "Brian" has a share "testshare" synced - When user "Brian" moves a file "textfile.txt" into "testshare" inside space "Shares" using file-id path "" + When user "Brian" moves a file "textfile.txt" into "testshare" inside space "Shares" using file-id "<>" Then the HTTP status code should be "502" And for user "Brian" folder "/" of the space "project-space" should contain these files: | textfile.txt | But for user "Brian" folder "testshare" of the space "Shares" should not contain these files: | textfile.txt | Examples: - | space-role | permissions | dav-path | - | Manager | Editor | /remote.php/dav/spaces/<> | - | Space Editor | Editor | /remote.php/dav/spaces/<> | - | Space Viewer | Editor | /remote.php/dav/spaces/<> | - | Manager | Viewer | /remote.php/dav/spaces/<> | - | Space Editor | Viewer | /remote.php/dav/spaces/<> | - | Space Viewer | Viewer | /remote.php/dav/spaces/<> | - | Manager | Editor | /dav/spaces/<> | - | Space Editor | Editor | /dav/spaces/<> | - | Space Viewer | Editor | /dav/spaces/<> | - | Manager | Viewer | /dav/spaces/<> | - | Space Editor | Viewer | /dav/spaces/<> | - | Space Viewer | Viewer | /dav/spaces/<> | + | space-role | permissions | + | Manager | Editor | + | Space Editor | Editor | + | Space Viewer | Editor | + | Manager | Viewer | + | Space Editor | Viewer | + | Space Viewer | Viewer | @issue-7618 Scenario Outline: move a file from project to personal space @@ -407,54 +338,47 @@ Feature: moving/renaming file using file id | sharee | Brian | | shareType | user | | permissionsRole | | - When user "Brian" moves a file "/textfile.txt" into "/" inside space "Personal" using file-id path "" + When user "Brian" moves a file "/textfile.txt" into "/" inside space "Personal" using file-id "<>" Then the HTTP status code should be "" And for user "Brian" folder "/" of the space "project-space" should contain these files: | textfile.txt | But for user "Brian" folder "/" of the space "Personal" should not contain these files: | textfile.txt | Examples: - | space-role | http-status-code | dav-path | - | Manager | 502 | /remote.php/dav/spaces/<> | - | Space Editor | 502 | /remote.php/dav/spaces/<> | - | Space Viewer | 403 | /remote.php/dav/spaces/<> | - | Manager | 502 | /dav/spaces/<> | - | Space Editor | 502 | /dav/spaces/<> | - | Space Viewer | 403 | /dav/spaces/<> | + | space-role | http-status-code | + | Manager | 502 | + | Space Editor | 502 | + | Space Viewer | 403 | @issue-7618 - Scenario Outline: move a file to different name from project space to personal space + Scenario: move a file to different name from project space to personal space Given the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API And user "Alice" has created a space "project-space" with the default quota using the Graph API And user "Alice" has uploaded a file inside space "project-space" with content "some data" to "textfile.txt" And we save it into "FILEID" - When user "Alice" renames a file "/textfile.txt" into "/renamed.txt" inside space "Personal" using file-id path "" + When user "Alice" renames a file "/textfile.txt" into "/renamed.txt" inside space "Personal" using file-id "<>" Then the HTTP status code should be "502" And the value of the item "/d:error/s:message" in the response about user "Alice" should be "move:error: not supported: cannot move across spaces" And for user "Alice" folder "/" of the space "project-space" should contain these files: | textfile.txt | But for user "Alice" folder "/" of the space "Personal" should not contain these files: | renamed.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | @issue-7617 - Scenario Outline: move a file into a folder within a shared folder (edit permissions) + Scenario: move a file into a folder within a shared folder (edit permissions) Given user "Brian" has been created with default attributes and without skeleton files And user "Alice" has created folder "folder" And user "Alice" has created folder "folder/sub-folder" And user "Alice" has uploaded file with content "some data" to "folder/test.txt" And we save it into "FILEID" And user "Alice" has sent the following resource share invitation: - | resource | folder | - | space | Personal | - | sharee | Brian | - | shareType | user | - | permissionsRole | | + | resource | folder | + | space | Personal | + | sharee | Brian | + | shareType | user | + | permissionsRole | Editor | And user "Brian" has a share "folder" synced - When user "Brian" moves a file "Shares/folder/test.txt" into "folder/sub-folder" inside space "Shares" using file-id path "" + When user "Brian" moves a file "Shares/folder/test.txt" into "folder/sub-folder" inside space "Shares" using file-id "<>" Then the HTTP status code should be "201" And for user "Brian" folder "folder/sub-folder" of the space "Shares" should contain these files: | test.txt | @@ -464,36 +388,28 @@ Feature: moving/renaming file using file id | test.txt | And for user "Alice" folder "folder" of the space "Personal" should not contain these files: | test.txt | - Examples: - | permissions | dav-path | - | Editor | /remote.php/dav/spaces/<> | - | Editor | /dav/spaces/<> | @issue-1976 - Scenario Outline: sharee tries to move a file into same shared folder with same name + Scenario: sharee tries to move a file into same shared folder with same name Given user "Brian" has been created with default attributes and without skeleton files And user "Alice" has created folder "folder" And user "Alice" has uploaded file with content "some data" to "folder/test.txt" And we save it into "FILEID" And user "Alice" has sent the following resource share invitation: - | resource | folder | - | space | Personal | - | sharee | Brian | - | shareType | user | - | permissionsRole | | + | resource | folder | + | space | Personal | + | sharee | Brian | + | shareType | user | + | permissionsRole | Editor | And user "Brian" has a share "/folder" synced - When user "Brian" moves a file "Shares/folder/test.txt" into "folder" inside space "Shares" using file-id path "" + When user "Brian" moves a file "Shares/folder/test.txt" into "folder" inside space "Shares" using file-id "<>" Then the HTTP status code should be "403" And as "Alice" file "test.txt" should not exist in the trashbin of the space "Personal" And for user "Brian" the content of the file "folder/test.txt" of the space "Shares" should be "some data" And for user "Alice" the content of the file "folder/test.txt" of the space "Personal" should be "some data" - Examples: - | permissions | dav-path | - | Editor | /remote.php/dav/spaces/<> | - | Editor | /dav/spaces/<> | - Scenario Outline: try to move a file into a folder within a shared folder (read permissions) + Scenario: try to move a file into a folder within a shared folder (read permissions) Given user "Brian" has been created with default attributes and without skeleton files And user "Alice" has created folder "folder" And user "Alice" has created folder "folder/sub-folder" @@ -506,7 +422,7 @@ Feature: moving/renaming file using file id | shareType | user | | permissionsRole | Viewer | And user "Brian" has a share "folder" synced - When user "Brian" moves a file "Shares/folder/test.txt" into "folder/sub-folder" inside space "Shares" using file-id path "" + When user "Brian" moves a file "Shares/folder/test.txt" into "folder/sub-folder" inside space "Shares" using file-id "<>" Then the HTTP status code should be "502" And for user "Brian" folder "folder/sub-folder" of the space "Shares" should not contain these files: | test.txt | @@ -516,10 +432,6 @@ Feature: moving/renaming file using file id | test.txt | And for user "Alice" folder "folder" of the space "Personal" should contain these files: | test.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | Scenario Outline: move a file from one shared folder to another shared folder @@ -542,22 +454,18 @@ Feature: moving/renaming file using file id | shareType | user | | permissionsRole | | And user "Brian" has a share "testshare2" synced - When user "Brian" moves a file "Shares/testshare1/textfile.txt" into "testshare2" inside space "Shares" using file-id path "" + When user "Brian" moves a file "Shares/testshare1/textfile.txt" into "testshare2" inside space "Shares" using file-id "<>" Then the HTTP status code should be "502" And for user "Brian" folder "testshare1" of the space "Shares" should contain these files: | textfile.txt | But for user "Brian" folder "testshare2" of the space "Shares" should not contain these files: | textfile.txt | Examples: - | from-permissions | to-permissions | dav-path | - | Editor | Editor | /remote.php/dav/spaces/<> | - | Editor | Viewer | /remote.php/dav/spaces/<> | - | Viewer | Editor | /remote.php/dav/spaces/<> | - | Viewer | Viewer | /remote.php/dav/spaces/<> | - | Editor | Editor | /dav/spaces/<> | - | Editor | Viewer | /dav/spaces/<> | - | Viewer | Editor | /dav/spaces/<> | - | Viewer | Viewer | /dav/spaces/<> | + | from-permissions | to-permissions | + | Editor | Editor | + | Editor | Viewer | + | Viewer | Editor | + | Viewer | Viewer | @issue-8124 Scenario Outline: move a file from share to personal space @@ -572,18 +480,16 @@ Feature: moving/renaming file using file id | shareType | user | | permissionsRole | | And user "Brian" has a share "folder" synced - When user "Brian" moves a file "Shares/folder/test.txt" into "/" inside space "Personal" using file-id path "" + When user "Brian" moves a file "Shares/folder/test.txt" into "/" inside space "Personal" using file-id "<>" Then the HTTP status code should be "" And for user "Brian" folder "folder" of the space "Shares" should contain these files: | test.txt | And for user "Brian" folder "/" of the space "Personal" should not contain these files: | test.txt | Examples: - | permissions | dav-path | http-status-code | - | Editor | /remote.php/dav/spaces/<> | 502 | - | Editor | /dav/spaces/<> | 502 | - | Viewer | /remote.php/dav/spaces/<> | 403 | - | Viewer | /dav/spaces/<> | 403 | + | permissions | http-status-code | + | Editor | 502 | + | Viewer | 403 | @issue-8125 Scenario Outline: move a file from shares to project space @@ -605,110 +511,84 @@ Feature: moving/renaming file using file id | shareType | user | | permissionsRole | | And user "Brian" has a share "testshare" synced - When user "Brian" moves a file "Shares/testshare/textfile.txt" into "/" inside space "project-space" using file-id path "" + When user "Brian" moves a file "Shares/testshare/textfile.txt" into "/" inside space "project-space" using file-id "<>" Then the HTTP status code should be "" And for user "Brian" folder "testshare" of the space "Shares" should contain these files: | textfile.txt | But for user "Brian" folder "/" of the space "project-space" should not contain these files: | textfile.txt | Examples: - | space-role | permissions | http-status-code | dav-path | - | Manager | Editor | 502 | /remote.php/dav/spaces/<> | - | Space Editor | Editor | 502 | /remote.php/dav/spaces/<> | - | Space Viewer | Editor | 403 | /remote.php/dav/spaces/<> | - | Manager | Viewer | 403 | /remote.php/dav/spaces/<> | - | Space Editor | Viewer | 403 | /remote.php/dav/spaces/<> | - | Space Viewer | Viewer | 403 | /remote.php/dav/spaces/<> | - | Manager | Editor | 502 | /dav/spaces/<> | - | Space Editor | Editor | 502 | /dav/spaces/<> | - | Space Viewer | Editor | 403 | /dav/spaces/<> | - | Manager | Viewer | 403 | /dav/spaces/<> | - | Space Editor | Viewer | 403 | /dav/spaces/<> | - | Space Viewer | Viewer | 403 | /dav/spaces/<> | + | space-role | permissions | http-status-code | + | Manager | Editor | 502 | + | Space Editor | Editor | 502 | + | Space Viewer | Editor | 403 | + | Manager | Viewer | 403 | + | Space Editor | Viewer | 403 | + | Space Viewer | Viewer | 403 | - Scenario Outline: rename a root file inside personal space + Scenario: rename a root file inside personal space Given user "Alice" has uploaded file with content "some data" to "textfile.txt" And we save it into "FILEID" - When user "Alice" renames a file "textfile.txt" into "renamed.txt" inside space "Personal" using file-id path "" + When user "Alice" renames a file "textfile.txt" into "renamed.txt" inside space "Personal" using file-id "<>" Then the HTTP status code should be "201" And for user "Alice" the space "Personal" should contain these entries: | renamed.txt | But for user "Alice" the space "Personal" should not contain these entries: | textfile.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | - Scenario Outline: rename a file and move into a folder inside personal space + Scenario: rename a file and move into a folder inside personal space Given user "Alice" has created folder "/folder" And user "Alice" has uploaded file with content "some data" to "/textfile.txt" And we save it into "FILEID" - When user "Alice" renames a file "textfile.txt" into "/folder/renamed.txt" inside space "Personal" using file-id path "" + When user "Alice" renames a file "textfile.txt" into "/folder/renamed.txt" inside space "Personal" using file-id "<>" Then the HTTP status code should be "201" And for user "Alice" folder "folder" of the space "Personal" should contain these files: | renamed.txt | But for user "Alice" the space "Personal" should not contain these entries: | textfile.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | - Scenario Outline: rename a file and move into a sub-folder inside personal space + Scenario: rename a file and move into a sub-folder inside personal space Given user "Alice" has created folder "/folder" And user "Alice" has created folder "folder/sub-folder" And user "Alice" has uploaded file with content "some data" to "/textfile.txt" And we save it into "FILEID" - When user "Alice" renames a file "textfile.txt" into "/folder/sub-folder/renamed.txt" inside space "Personal" using file-id path "" + When user "Alice" renames a file "textfile.txt" into "/folder/sub-folder/renamed.txt" inside space "Personal" using file-id "<>" Then the HTTP status code should be "201" And for user "Alice" folder "folder/sub-folder" of the space "Personal" should contain these files: | renamed.txt | But for user "Alice" the space "Personal" should not contain these entries: | textfile.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | - Scenario Outline: rename a file and move from a folder to root inside personal space + Scenario: rename a file and move from a folder to root inside personal space Given user "Alice" has created folder "/folder" And user "Alice" has uploaded file with content "some data" to "folder/textfile.txt" And we save it into "FILEID" - When user "Alice" renames a file "folder/textfile.txt" into "/renamed.txt" inside space "Personal" using file-id path "" + When user "Alice" renames a file "folder/textfile.txt" into "/renamed.txt" inside space "Personal" using file-id "<>" Then the HTTP status code should be "201" And for user "Alice" the space "Personal" should contain these entries: | renamed.txt | But for user "Alice" folder "folder" of the space "Personal" should not contain these files: | renamed.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | - Scenario Outline: rename a file and move from sub-folder to root inside personal space + Scenario: rename a file and move from sub-folder to root inside personal space Given user "Alice" has created folder "/folder" And user "Alice" has created folder "folder/sub-folder" And user "Alice" has uploaded file with content "some data" to "folder/sub-folder/textfile.txt" And we save it into "FILEID" - When user "Alice" renames a file "folder/sub-folder/textfile.txt" into "/renamed.txt" inside space "Personal" using file-id path "" + When user "Alice" renames a file "folder/sub-folder/textfile.txt" into "/renamed.txt" inside space "Personal" using file-id "<>" Then the HTTP status code should be "201" And for user "Alice" the space "Personal" should contain these files: | renamed.txt | But for user "Alice" folder "folder/sub-folder" of the space "Personal" should not contain these files: | textfile.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | @issue-7617 - Scenario Outline: move a file to a different name into a sub-folder inside share space (editor permissions) + Scenario: move a file to a different name into a sub-folder inside share space (editor permissions) Given user "Brian" has been created with default attributes and without skeleton files And user "Alice" has created folder "/folder" And user "Alice" has created folder "/folder/sub-folder" @@ -721,19 +601,15 @@ Feature: moving/renaming file using file id | shareType | user | | permissionsRole | Editor | And user "Brian" has a share "folder" synced - When user "Brian" renames a file "Shares/folder/test.txt" into "folder/sub-folder/renamed.txt" inside space "Shares" using file-id path "" + When user "Brian" renames a file "Shares/folder/test.txt" into "folder/sub-folder/renamed.txt" inside space "Shares" using file-id "<>" Then the HTTP status code should be "201" And for user "Brian" folder "folder/sub-folder" of the space "Shares" should contain these files: | renamed.txt | But for user "Brian" folder "folder" of the space "Shares" should not contain these files: | test.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | - Scenario Outline: move a file to a different name into a sub-folder inside share space (read permissions) + Scenario: move a file to a different name into a sub-folder inside share space (read permissions) Given user "Brian" has been created with default attributes and without skeleton files And user "Alice" has created folder "/folder" And user "Alice" has created folder "/folder/sub-folder" @@ -746,81 +622,63 @@ Feature: moving/renaming file using file id | shareType | user | | permissionsRole | Viewer | And user "Brian" has a share "folder" synced - When user "Brian" renames a file "Shares/folder/test.txt" into "folder/sub-folder/renamed.txt" inside space "Shares" using file-id path "" + When user "Brian" renames a file "Shares/folder/test.txt" into "folder/sub-folder/renamed.txt" inside space "Shares" using file-id "<>" Then the HTTP status code should be "502" And for user "Brian" folder "folder" of the space "Shares" should contain these files: | test.txt | But for user "Brian" folder "folder/sub-folder" of the space "Shares" should not contain these files: | renamed.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | @issue-6739 Scenario Outline: try to move personal file to other spaces using its id as the destination Given the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API And user "Alice" has created a space "myspace" with the default quota using the Graph API And user "Alice" has uploaded file with content "some data" to "textfile.txt" - When user "Alice" tries to move file "textfile.txt" of space "Personal" to space "" using its id in destination path "" + When user "Alice" tries to move file "textfile.txt" of space "Personal" to space "" using its id in destination path Then the HTTP status code should be "" And for user "Alice" the space "Personal" should contain these entries: | textfile.txt | Examples: - | dav-path | space-name | http-status-code | - | /remote.php/dav/spaces | Personal | 409 | - | /dav/spaces | Personal | 409 | - | /remote.php/dav/spaces | myspace | 400 | - | /dav/spaces | myspace | 400 | - | /remote.php/dav/spaces | Shares | 404 | - | /dav/spaces | Shares | 404 | + | space-name | http-status-code | + | Personal | 409 | + | myspace | 400 | + | Shares | 404 | @issue-6739 Scenario Outline: try to move project file to other spaces using its id as the destination Given the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API And user "Alice" has created a space "myspace" with the default quota using the Graph API And user "Alice" has uploaded a file inside space "myspace" with content "some data" to "textfile.txt" - When user "Alice" tries to move file "textfile.txt" of space "myspace" to space "" using its id in destination path "" + When user "Alice" tries to move file "textfile.txt" of space "myspace" to space "" using its id in destination path Then the HTTP status code should be "" And for user "Alice" the space "myspace" should contain these entries: | textfile.txt | Examples: - | dav-path | space-name | http-status-code | - | /remote.php/dav/spaces | Personal | 400 | - | /dav/spaces | Personal | 400 | - | /remote.php/dav/spaces | myspace | 409 | - | /dav/spaces | myspace | 409 | - | /remote.php/dav/spaces | Shares | 404 | - | /dav/spaces | Shares | 404 | + | space-name | http-status-code | + | Personal | 400 | + | myspace | 409 | + | Shares | 404 | @issue-6739 - Scenario Outline: move a file to folder using its id as the destination (Personal space) + Scenario: move a file to folder using its id as the destination (Personal space) Given user "Alice" has uploaded file with content "some data" to "textfile.txt" And user "Alice" has created folder "docs" - When user "Alice" moves file "textfile.txt" of space "Personal" to folder "docs" using its id in destination path "" + When user "Alice" moves file "textfile.txt" of space "Personal" to folder "docs" using its id in destination path Then the HTTP status code should be "204" And the content of file "docs" for user "Alice" should be "some data" And as "Alice" file "textfile.txt" should not exist And as "Alice" folder "docs" should not exist And as "Alice" folder "docs" should exist in the trashbin of the space "Personal" - Examples: - | dav-path | - | /remote.php/dav/spaces | - | /dav/spaces | @issue-6739 - Scenario Outline: move a file to folder using its id as the destination (Project space) + Scenario: move a file to folder using its id as the destination (Project space) Given the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API And user "Alice" has created a space "myspace" with the default quota using the Graph API And user "Alice" has uploaded a file inside space "myspace" with content "some data" to "textfile.txt" And user "Alice" has created a folder "docs" in space "myspace" - When user "Alice" moves file "textfile.txt" of space "myspace" to folder "docs" using its id in destination path "" + When user "Alice" moves file "textfile.txt" of space "myspace" to folder "docs" using its id in destination path Then the HTTP status code should be "204" And for user "Alice" the content of the file "docs" of the space "myspace" should be "some data" And as "Alice" folder "docs" should exist in the trashbin of the space "myspace" And for user "Alice" folder "/" of the space "myspace" should not contain these files: | textfile.txt | - Examples: - | dav-path | - | /remote.php/dav/spaces | - | /dav/spaces | diff --git a/tests/acceptance/features/apiSpacesDavOperation/propfindByFileId.feature b/tests/acceptance/features/apiSpacesDavOperation/propfindByFileId.feature index 6ef92020c2..246c1cc03f 100644 --- a/tests/acceptance/features/apiSpacesDavOperation/propfindByFileId.feature +++ b/tests/acceptance/features/apiSpacesDavOperation/propfindByFileId.feature @@ -18,9 +18,8 @@ Feature: propfind a file using file id | oc:name | textfile.txt | | oc:permissions | RDNVWZP | Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | Scenario Outline: send a PROPFIND request to a file inside a folder of personal space @@ -34,9 +33,8 @@ Feature: propfind a file using file id | oc:name | textfile.txt | | oc:permissions | RDNVWZP | Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | Scenario Outline: send a PROPFIND request to a file in personal space owned by another user @@ -46,9 +44,8 @@ Feature: propfind a file using file id When user "Brian" sends HTTP method "PROPFIND" to URL "" Then the HTTP status code should be "404" Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | Scenario Outline: send a PROPFIND request to a file of inside project space @@ -63,9 +60,8 @@ Feature: propfind a file using file id | oc:name | textfile.txt | | oc:permissions | RDNVWZP | Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | Scenario Outline: send a PROPFIND request to a file inside a folder of project space @@ -81,9 +77,8 @@ Feature: propfind a file using file id | oc:name | textfile.txt | | oc:permissions | RDNVWZP | Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | Scenario Outline: send a PROPFIND request to a file inside project space owned by another user @@ -95,9 +90,8 @@ Feature: propfind a file using file id When user "Brian" sends HTTP method "PROPFIND" to URL "" Then the HTTP status code should be "404" Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | Scenario Outline: send a PROPFIND request to a shared file @@ -118,9 +112,8 @@ Feature: propfind a file using file id | oc:name | textfile.txt | | oc:permissions | SNVW | Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | Scenario Outline: sharee sends a PROPFIND request to a file inside of a shared folder @@ -142,6 +135,5 @@ Feature: propfind a file using file id | oc:name | textfile.txt | | oc:permissions | DNVW | Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | diff --git a/tests/acceptance/features/apiSpacesDavOperation/updateFileByFileId.feature b/tests/acceptance/features/apiSpacesDavOperation/updateFileByFileId.feature index da1b6773f7..e2b4081c41 100644 --- a/tests/acceptance/features/apiSpacesDavOperation/updateFileByFileId.feature +++ b/tests/acceptance/features/apiSpacesDavOperation/updateFileByFileId.feature @@ -15,9 +15,8 @@ Feature: update files using file id Then the HTTP status code should be "204" And for user "Alice" the content of the file "/textfile.txt" of the space "Personal" should be "updated content" Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | Scenario Outline: update content of a file inside a folder @@ -28,9 +27,8 @@ Feature: update files using file id Then the HTTP status code should be "204" And for user "Alice" the content of the file "/uploadFolder/textfile.txt" of the space "Personal" should be "updated content" Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | Scenario Outline: update content of a file inside a project space @@ -42,9 +40,8 @@ Feature: update files using file id Then the HTTP status code should be "204" And for user "Alice" the content of the file "/textfile.txt" of the space "new-space" should be "updated content" Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | Scenario Outline: sharee updates content of a shared file @@ -63,9 +60,8 @@ Feature: update files using file id And for user "Alice" the content of the file "/textfile.txt" of the space "Personal" should be "updated content" And for user "Brian" the content of the file "textfile.txt" of the space "Shares" should be "updated content" Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | Scenario Outline: sharee updates content of a file inside a shared folder @@ -85,9 +81,8 @@ Feature: update files using file id And for user "Alice" the content of the file "uploadFolder/textfile.txt" of the space "Personal" should be "updated content" And for user "Brian" the content of the file "uploadFolder/textfile.txt" of the space "Shares" should be "updated content" Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | + | dav-path | + | /dav/spaces/<> | Scenario Outline: sharee with different role tries to update content of a file inside a shared space @@ -106,9 +101,8 @@ Feature: update files using file id And for user "Alice" the content of the file "/textfile.txt" of the space "new-space" should be "" And for user "Brian" the content of the file "/textfile.txt" of the space "new-space" should be "" Examples: - | dav-path | space-role | http-status-code | file-content | - | /remote.php/dav/spaces/<> | Space Viewer | 403 | some data | - | /dav/spaces/<> | Space Editor | 204 | updated content | + | dav-path | space-role | http-status-code | file-content | + | /dav/spaces/<> | Space Editor | 204 | updated content | Scenario Outline: user tries to update content of a file owned by others @@ -119,6 +113,5 @@ Feature: update files using file id Then the HTTP status code should be "404" And for user "Alice" the content of the file "/textfile.txt" of the space "Personal" should be "some data" Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spcaes/<> | + | dav-path | + | /dav/spcaes/<> | diff --git a/tests/acceptance/features/apiSpacesShares/publicLinkDownload.feature b/tests/acceptance/features/apiSpacesShares/publicLinkDownload.feature index 38c33f5b7a..0289e110d9 100644 --- a/tests/acceptance/features/apiSpacesShares/publicLinkDownload.feature +++ b/tests/acceptance/features/apiSpacesShares/publicLinkDownload.feature @@ -12,7 +12,7 @@ Feature: Public can download folders from project space public link 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 - @env-config + @env-config @issue-9724 @issue-10331 Scenario: download a folder from public link of a space Given the config "OCIS_SHARING_PUBLIC_SHARE_MUST_HAVE_PASSWORD" has been set to "false" And using SharingNG @@ -28,7 +28,7 @@ Feature: Public can download folders from project space public link | name | content | | NewFolder/test.txt | some content | - @env-config @issue-5229 + @env-config @issue-5229 @issue-9724 @issue-10331 Scenario: download a folder from public link of a folder inside a space Given the config "OCIS_SHARING_PUBLIC_SHARE_MUST_HAVE_PASSWORD" has been set to "false" And using SharingNG diff --git a/tests/acceptance/features/apiSpacesShares/shareSpacesViaLink.feature b/tests/acceptance/features/apiSpacesShares/shareSpacesViaLink.feature index 81afbbacb3..4eed4ce4ae 100644 --- a/tests/acceptance/features/apiSpacesShares/shareSpacesViaLink.feature +++ b/tests/acceptance/features/apiSpacesShares/shareSpacesViaLink.feature @@ -16,7 +16,7 @@ Feature: Share spaces via link And user "Alice" has created a space "share space" with the default quota using the Graph API And user "Alice" has uploaded a file inside space "share space" with content "some content" to "test.txt" - + @issue-9724 @issue-10331 Scenario Outline: manager can share a space to public via link with different permissions When user "Alice" creates a public link share of the space "share space" with settings: | permissions | | @@ -57,7 +57,7 @@ Feature: Share spaces via link | permissions | 0 | | share_type | public_link | - + @issue-10331 Scenario: uploader should be able to upload a file When user "Alice" creates a public link share of the space "share space" with settings: | permissions | 4 | diff --git a/tests/acceptance/features/apiSpacesShares/shareSubItemOfSpaceViaPublicLink.feature b/tests/acceptance/features/apiSpacesShares/shareSubItemOfSpaceViaPublicLink.feature index e96e408e77..0247eae037 100644 --- a/tests/acceptance/features/apiSpacesShares/shareSubItemOfSpaceViaPublicLink.feature +++ b/tests/acceptance/features/apiSpacesShares/shareSubItemOfSpaceViaPublicLink.feature @@ -121,7 +121,7 @@ Feature: Share a file or folder that is inside a space via public link | folder/file.txt | Space Editor | | folder/file.txt | Space Viewer | - + @issue-9724 @issue-10331 Scenario Outline: user creates a new public link share of a file inside the personal space with edit permissions Given using OCS API version "" And user "Alice" has uploaded file with content "Random data" to "/file.txt" diff --git a/tests/acceptance/features/cliCommands/removeFileVersions.feature b/tests/acceptance/features/cliCommands/removeFileVersions.feature index f9b2b252a4..fbaba57a7a 100644 --- a/tests/acceptance/features/cliCommands/removeFileVersions.feature +++ b/tests/acceptance/features/cliCommands/removeFileVersions.feature @@ -56,9 +56,9 @@ Feature: remove file versions via CLI command When user "Alice" gets the number of versions of file "file.txt" Then the HTTP status code should be "207" And the number of versions should be "2" - When user "Alice" gets the number of versions of file "lorem.txt" using file-id path "/meta/<>/v" + When user "Alice" gets the number of versions of file "lorem.txt" using file-id "<>" Then the HTTP status code should be "207" And the number of versions should be "0" - When user "Alice" gets the number of versions of file "epsum.txt" using file-id path "/meta/<>/v" + When user "Alice" gets the number of versions of file "epsum.txt" using file-id "<>" Then the HTTP status code should be "207" And the number of versions should be "0" diff --git a/tests/acceptance/features/cliCommands/searchReIndex.feature b/tests/acceptance/features/cliCommands/searchReIndex.feature index 40c42541d8..f20ea50b88 100644 --- a/tests/acceptance/features/cliCommands/searchReIndex.feature +++ b/tests/acceptance/features/cliCommands/searchReIndex.feature @@ -10,9 +10,8 @@ Feature: reindex space via CLI command 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 "some data" to "textfile.txt" - And using new DAV path - + @issue-10329 Scenario: reindex all spaces When the administrator reindexes all spaces using the CLI Then the command should be successful diff --git a/tests/acceptance/features/coreApiAuth/webDavAuth.feature b/tests/acceptance/features/coreApiAuth/webDavAuth.feature index 7661c3b829..78fb4b9e91 100644 --- a/tests/acceptance/features/coreApiAuth/webDavAuth.feature +++ b/tests/acceptance/features/coreApiAuth/webDavAuth.feature @@ -6,20 +6,22 @@ Feature: auth Background: Given user "Alice" has been created with default attributes and without skeleton files - @smokeTest + @smokeTest @issue-10334 Scenario Outline: using WebDAV anonymously When a user requests "" with "PROPFIND" and no authentication Then the HTTP status code should be "401" Examples: | dav-path | - | /remote.php/webdav | + | /webdav | + | /dav/files/%username% | | /dav/spaces/%spaceid% | - @smokeTest + @smokeTest @issue-10334 Scenario Outline: using WebDAV with basic auth When user "Alice" requests "" with "PROPFIND" using basic auth Then the HTTP status code should be "207" Examples: | dav-path | - | /remote.php/webdav | + | /webdav | + | /dav/files/%username% | | /dav/spaces/%spaceid% | diff --git a/tests/acceptance/features/coreApiAuth/webDavCOPYAuth.feature b/tests/acceptance/features/coreApiAuth/webDavCOPYAuth.feature index 64c3d8f996..408f539587 100644 --- a/tests/acceptance/features/coreApiAuth/webDavCOPYAuth.feature +++ b/tests/acceptance/features/coreApiAuth/webDavCOPYAuth.feature @@ -17,109 +17,109 @@ Feature: COPY file/folder @smokeTest Scenario: send COPY requests to webDav endpoints as normal user with wrong password When user "Alice" requests these endpoints with "COPY" using password "invalid" about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @smokeTest Scenario: send COPY requests to webDav endpoints as normal user with no password When user "Alice" requests these endpoints with "COPY" using password "" about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @issue-3882 Scenario: send COPY requests to another user's webDav endpoints as normal user When user "Brian" requests these endpoints with "COPY" about user "Alice" - | endpoint | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | + | endpoint | + | /dav/files/%username%/textfile0.txt | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "404" @issue-3882 Scenario: send COPY requests to another user's webDav endpoints as normal user using the spaces WebDAV API Given using spaces DAV path When user "Brian" requests these endpoints with "COPY" about user "Alice" - | endpoint | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "404" Scenario: send COPY requests to webDav endpoints using invalid username but correct password When user "usero" requests these endpoints with "COPY" using the password of user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" Scenario: send COPY requests to webDav endpoints using valid password and username of different user When user "Brian" requests these endpoints with "COPY" using the password of user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @smokeTest Scenario: send COPY requests to webDav endpoints without any authentication When a user requests these endpoints with "COPY" with no authentication about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @issue-4332 @issue-3882 Scenario: send COPY requests to webDav endpoints with body as normal user When user "Alice" requests these endpoints with "COPY" including body "doesnotmatter" about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/webdav/PARENT/parent.txt | - | /remote.php/dav/files/%username%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /webdav/PARENT/parent.txt | + | /dav/files/%username%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "415" @issue-4332 @issue-3882 Scenario: send COPY requests to webDav endpoints with body as normal user using the spaces WebDAV API When user "Alice" requests these endpoints with "COPY" including body "doesnotmatter" about user "Alice" - | endpoint | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "415" diff --git a/tests/acceptance/features/coreApiAuth/webDavDELETEAuth.feature b/tests/acceptance/features/coreApiAuth/webDavDELETEAuth.feature index dd6aeaaf9e..7434072498 100644 --- a/tests/acceptance/features/coreApiAuth/webDavDELETEAuth.feature +++ b/tests/acceptance/features/coreApiAuth/webDavDELETEAuth.feature @@ -17,109 +17,109 @@ Feature: delete file/folder @smokeTest Scenario: send DELETE requests to webDav endpoints as normal user with wrong password When user "Alice" requests these endpoints with "DELETE" using password "invalid" about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/webdav/PARENT/parent.txt | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /webdav/PARENT/parent.txt | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" Scenario: send DELETE requests to webDav endpoints as normal user with no password When user "Alice" requests these endpoints with "DELETE" using password "" about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/webdav/PARENT/parent.txt | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /webdav/PARENT/parent.txt | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" Scenario: send DELETE requests to another user's webDav endpoints as normal user When user "Brian" requests these endpoints with "DELETE" about user "Alice" - | endpoint | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | + | endpoint | + | /dav/files/%username%/textfile0.txt | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "404" Scenario: send DELETE requests to another user's webDav endpoints as normal user using the spaces WebDAV API When user "Brian" requests these endpoints with "DELETE" about user "Alice" - | endpoint | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "404" @smokeTest Scenario: send DELETE requests to webDav endpoints using invalid username but correct password When user "usero" requests these endpoints with "DELETE" using the password of user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" Scenario: send DELETE requests to webDav endpoints using valid password and username of different user When user "Brian" requests these endpoints with "DELETE" using the password of user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @smokeTest Scenario: send DELETE requests to webDav endpoints without any authentication When a user requests these endpoints with "DELETE" with no authentication about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @issue-4332 Scenario: send DELETE requests to webDav endpoints with body as normal user When user "Alice" requests these endpoints with "DELETE" including body "doesnotmatter" about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile1.txt | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/FOLDER | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile1.txt | + | /dav/files/%username%/PARENT/parent.txt | + | /webdav/PARENT | + | /dav/files/%username%/FOLDER | Then the HTTP status code of responses on all endpoints should be "415" @issue-4332 Scenario: send DELETE requests to webDav endpoints with body as normal user using the spaces WebDAV API When user "Alice" requests these endpoints with "DELETE" including body "doesnotmatter" about user "Alice" - | endpoint | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | + | endpoint | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/PARENT | Then the HTTP status code of responses on all endpoints should be "415" diff --git a/tests/acceptance/features/coreApiAuth/webDavLOCKAuth.feature b/tests/acceptance/features/coreApiAuth/webDavLOCKAuth.feature index d47099be9c..eef322f2ed 100644 --- a/tests/acceptance/features/coreApiAuth/webDavLOCKAuth.feature +++ b/tests/acceptance/features/coreApiAuth/webDavLOCKAuth.feature @@ -17,93 +17,93 @@ Feature: LOCK file/folder @smokeTest Scenario: send LOCK requests to webDav endpoints as normal user with wrong password When user "Alice" requests these endpoints with "LOCK" including body "doesnotmatter" using password "invalid" about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @smokeTest Scenario: send LOCK requests to webDav endpoints as normal user with no password When user "Alice" requests these endpoints with "LOCK" including body "doesnotmatter" using password "" about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @issue-1347 @issue-2176 Scenario: send LOCK requests to another user's webDav endpoints as normal user When user "Brian" requests these endpoints with "LOCK" to get property "d:shared" about user "Alice" - | endpoint | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/dav/files/%username%/PARENT | + | endpoint | + | /dav/files/%username%/textfile0.txt | + | /dav/files/%username%/PARENT | Then the HTTP status code of responses on all endpoints should be "403" When user "Brian" requests these endpoints with "LOCK" to get property "d:shared" about user "Alice" - | endpoint | - | /remote.php/dav/files/%username%/PARENT/parent.txt | + | endpoint | + | /dav/files/%username%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "409" @issue-1347 @issue-2176 Scenario: send LOCK requests to another user's webDav endpoints as normal user using the spaces WebDAV API When user "Brian" requests these endpoints with "LOCK" to get property "d:shared" about user "Alice" - | endpoint | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | + | endpoint | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | Then the HTTP status code of responses on all endpoints should be "403" When user "Brian" requests these endpoints with "LOCK" to get property "d:shared" about user "Alice" - | endpoint | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "409" Scenario: send LOCK requests to webDav endpoints using invalid username but correct password When user "usero" requests these endpoints with "LOCK" including body "doesnotmatter" using the password of user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" Scenario: send LOCK requests to webDav endpoints using valid password and username of different user When user "Brian" requests these endpoints with "LOCK" including body "doesnotmatter" using the password of user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @smokeTest Scenario: send LOCK requests to webDav endpoints without any authentication When a user requests these endpoints with "LOCK" with body "doesnotmatter" and no authentication about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" diff --git a/tests/acceptance/features/coreApiAuth/webDavMKCOLAuth.feature b/tests/acceptance/features/coreApiAuth/webDavMKCOLAuth.feature index 052d256e44..52b141e5d6 100644 --- a/tests/acceptance/features/coreApiAuth/webDavMKCOLAuth.feature +++ b/tests/acceptance/features/coreApiAuth/webDavMKCOLAuth.feature @@ -13,114 +13,114 @@ Feature: create folder using MKCOL @smokeTest Scenario: send MKCOL requests to webDav endpoints as normal user with wrong password When user "Alice" requests these endpoints with "MKCOL" including body "doesnotmatter" using password "invalid" about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @smokeTest Scenario: send MKCOL requests to webDav endpoints as normal user with no password When user "Alice" requests these endpoints with "MKCOL" including body "doesnotmatter" using password "" about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @issue-5049 @issue-1347 @issue-1292 Scenario: send MKCOL requests to another user's webDav endpoints as normal user Given user "Brian" has been created with default attributes and without skeleton files When user "Brian" requests these endpoints with "MKCOL" including body "" about user "Alice" - | endpoint | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/does-not-exist | - | /remote.php/dav/files/%username%/PARENT/parent.txt | + | endpoint | + | /dav/files/%username%/textfile0.txt | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/does-not-exist | + | /dav/files/%username%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "404" @issue-5049 @issue-1347 @issue-1292 Scenario: send MKCOL requests to non-existent user's webDav endpoints as normal user Given user "Brian" has been created with default attributes and without skeleton files When user "Brian" requests these endpoints with "MKCOL" including body "" about user "non-existent-user" - | endpoint | - | /remote.php/dav/files/non-existent-user/textfile0.txt | - | /remote.php/dav/files/non-existent-user/PARENT | - | /remote.php/dav/files/non-existent-user/does-not-exist | - | /remote.php/dav/files/non-existent-user/PARENT/parent.txt | + | endpoint | + | /dav/files/non-existent-user/textfile0.txt | + | /dav/files/non-existent-user/PARENT | + | /dav/files/non-existent-user/does-not-exist | + | /dav/files/non-existent-user/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "404" @issue-1347 @issue-1292 Scenario: send MKCOL requests to another user's webDav endpoints as normal user using the spaces WebDAV API Given user "Brian" has been created with default attributes and without skeleton files When user "Brian" requests these endpoints with "MKCOL" including body "" about user "Alice" - | endpoint | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/does-not-exist | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/does-not-exist | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "404" @issue-5049 @issue-1347 @issue-1292 Scenario: send MKCOL requests to non-existent user's webDav endpoints as normal user using the spaces WebDAV API Given user "Brian" has been created with default attributes and without skeleton files When user "Brian" requests these endpoints with "MKCOL" including body "" about user "non-existent-user" - | endpoint | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/does-not-exist | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/does-not-exist | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "404" Scenario: send MKCOL requests to webDav endpoints using invalid username but correct password When user "usero" requests these endpoints with "MKCOL" including body "doesnotmatter" using the password of user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" Scenario: send MKCOL requests to webDav endpoints using valid password and username of different user Given user "Brian" has been created with default attributes and without skeleton files When user "Brian" requests these endpoints with "MKCOL" including body "doesnotmatter" using the password of user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @smokeTest Scenario: send MKCOL requests to webDav endpoints without any authentication When a user requests these endpoints with "MKCOL" with body "doesnotmatter" and no authentication about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" diff --git a/tests/acceptance/features/coreApiAuth/webDavMOVEAuth.feature b/tests/acceptance/features/coreApiAuth/webDavMOVEAuth.feature index a215dd32e7..9f57b14fa5 100644 --- a/tests/acceptance/features/coreApiAuth/webDavMOVEAuth.feature +++ b/tests/acceptance/features/coreApiAuth/webDavMOVEAuth.feature @@ -17,109 +17,109 @@ Feature: MOVE file/folder @smokeTest Scenario: send MOVE requests to webDav endpoints as normal user with wrong password When user "Alice" requests these endpoints with "MOVE" using password "invalid" about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @smokeTest Scenario: send MOVE requests to webDav endpoints as normal user with no password When user "Alice" requests these endpoints with "MOVE" using password "" about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @issue-3882 Scenario: send MOVE requests to another user's webDav endpoints as normal user When user "Brian" requests these endpoints with "MOVE" about user "Alice" - | endpoint | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | + | endpoint | + | /dav/files/%username%/textfile0.txt | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "404" @issue-3882 Scenario: send MOVE requests to another user's webDav endpoints as normal user using the spaces WebDAV API Given using spaces DAV path When user "Brian" requests these endpoints with "MOVE" about user "Alice" - | endpoint | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "404" Scenario: send MOVE requests to webDav endpoints using invalid username but correct password When user "usero" requests these endpoints with "MOVE" using the password of user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" Scenario: send MOVE requests to webDav endpoints using valid password and username of different user When user "Brian" requests these endpoints with "MOVE" using the password of user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @smokeTest Scenario: send MOVE requests to webDav endpoints without any authentication When a user requests these endpoints with "MOVE" with no authentication about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @issue-4332 @issue-3882 Scenario: send MOVE requests to webDav endpoints with body as normal user When user "Alice" requests these endpoints with "MOVE" including body "doesnotmatter" about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/webdav/PARENT/parent.txt | - | /remote.php/dav/files/%username%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /webdav/PARENT/parent.txt | + | /dav/files/%username%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "415" @issue-4332 @issue-3882 Scenario: send MOVE requests to webDav endpoints with body as normal user using the spaces WebDAV API When user "Alice" requests these endpoints with "MOVE" including body "doesnotmatter" about user "Alice" - | endpoint | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "415" diff --git a/tests/acceptance/features/coreApiAuth/webDavPOSTAuth.feature b/tests/acceptance/features/coreApiAuth/webDavPOSTAuth.feature index 76b87436eb..bfd35f4f21 100644 --- a/tests/acceptance/features/coreApiAuth/webDavPOSTAuth.feature +++ b/tests/acceptance/features/coreApiAuth/webDavPOSTAuth.feature @@ -17,87 +17,87 @@ Feature: POST file/folder @smokeTest Scenario: send POST requests to webDav endpoints as normal user with wrong password When user "Alice" requests these endpoints with "POST" including body "doesnotmatter" using password "invalid" about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @smokeTest Scenario: send POST requests to webDav endpoints as normal user with no password When user "Alice" requests these endpoints with "POST" including body "doesnotmatter" using password "" about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @issue-1287 Scenario: send POST requests to another user's webDav endpoints as normal user When user "Brian" requests these endpoints with "POST" including body "doesnotmatter" about user "Alice" - | endpoint | - | /remote.php/dav/files/%username%/textfile1.txt | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | + | endpoint | + | /dav/files/%username%/textfile1.txt | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "412" @issue-1287 Scenario: send POST requests to another user's webDav endpoints as normal user using the spaces WebDAV API When user "Brian" requests these endpoints with "POST" including body "doesnotmatter" about user "Alice" - | endpoint | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "412" Scenario: send POST requests to webDav endpoints using invalid username but correct password When user "usero" requests these endpoints with "POST" including body "doesnotmatter" using the password of user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" Scenario: send POST requests to webDav endpoints using valid password and username of different user When user "Brian" requests these endpoints with "POST" including body "doesnotmatter" using the password of user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @smokeTest Scenario: send POST requests to webDav endpoints without any authentication When a user requests these endpoints with "POST" with body "doesnotmatter" and no authentication about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" diff --git a/tests/acceptance/features/coreApiAuth/webDavPROPFINDAuth.feature b/tests/acceptance/features/coreApiAuth/webDavPROPFINDAuth.feature index ba0fc792df..5ffdede30a 100644 --- a/tests/acceptance/features/coreApiAuth/webDavPROPFINDAuth.feature +++ b/tests/acceptance/features/coreApiAuth/webDavPROPFINDAuth.feature @@ -16,87 +16,87 @@ Feature: PROPFIND file/folder @smokeTest Scenario: send PROPFIND requests to webDav endpoints as normal user with wrong password When user "Alice" requests these endpoints with "PROPFIND" including body "doesnotmatter" using password "invalid" about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @smokeTest Scenario: send PROPFIND requests to webDav endpoints as normal user with no password When user "Alice" requests these endpoints with "PROPFIND" including body "doesnotmatter" using password "" about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @issue-1347 Scenario: send PROPFIND requests to another user's webDav endpoints as normal user When user "Brian" requests these endpoints with "PROPFIND" to get property "d:getetag" about user "Alice" - | endpoint | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | + | endpoint | + | /dav/files/%username%/textfile0.txt | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "404" @issue-1347 Scenario: send PROPFIND requests to another user's webDav endpoints as normal user using the spaces WebDAV API When user "Brian" requests these endpoints with "PROPFIND" to get property "d:getetag" about user "Alice" - | endpoint | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "404" Scenario: send PROPFIND requests to webDav endpoints using invalid username but correct password When user "usero" requests these endpoints with "PROPFIND" including body "doesnotmatter" using the password of user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" Scenario: send PROPFIND requests to webDav endpoints using valid password and username of different user When user "Brian" requests these endpoints with "PROPFIND" including body "doesnotmatter" using the password of user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @smokeTest Scenario: send PROPFIND requests to webDav endpoints without any authentication When a user requests these endpoints with "PROPFIND" with body "doesnotmatter" and no authentication about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" diff --git a/tests/acceptance/features/coreApiAuth/webDavPROPPATCHAuth.feature b/tests/acceptance/features/coreApiAuth/webDavPROPPATCHAuth.feature index ff646655cf..16b93b0d3b 100644 --- a/tests/acceptance/features/coreApiAuth/webDavPROPPATCHAuth.feature +++ b/tests/acceptance/features/coreApiAuth/webDavPROPPATCHAuth.feature @@ -17,87 +17,87 @@ Feature: PROPPATCH file/folder @smokeTest Scenario: send PROPPATCH requests to webDav endpoints as normal user with wrong password When user "Alice" requests these endpoints with "PROPPATCH" including body "doesnotmatter" using password "invalid" about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @smokeTest Scenario: send PROPPATCH requests to webDav endpoints as normal user with no password When user "Alice" requests these endpoints with "PROPPATCH" including body "doesnotmatter" using password "" about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @issue-1347 @issue-1292 Scenario: send PROPPATCH requests to another user's webDav endpoints as normal user When user "Brian" requests these endpoints with "PROPPATCH" to set property "favorite" about user "Alice" - | endpoint | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | + | endpoint | + | /dav/files/%username%/textfile0.txt | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "404" @issue-1347 @issue-1292 Scenario: send PROPPATCH requests to another user's webDav endpoints as normal user using the spaces WebDAV API When user "Brian" requests these endpoints with "PROPPATCH" to set property "favorite" about user "Alice" - | endpoint | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "404" Scenario: send PROPPATCH requests to webDav endpoints using invalid username but correct password When user "usero" requests these endpoints with "PROPPATCH" including body "doesnotmatter" using the password of user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" Scenario: send PROPPATCH requests to webDav endpoints using valid password and username of different user When user "Brian" requests these endpoints with "PROPPATCH" including body "doesnotmatter" using the password of user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @smokeTest Scenario: send PROPPATCH requests to webDav endpoints without any authentication When a user requests these endpoints with "PROPPATCH" with body "doesnotmatter" and no authentication about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" diff --git a/tests/acceptance/features/coreApiAuth/webDavPUTAuth.feature b/tests/acceptance/features/coreApiAuth/webDavPUTAuth.feature index 5e2967abdd..50b60368c1 100644 --- a/tests/acceptance/features/coreApiAuth/webDavPUTAuth.feature +++ b/tests/acceptance/features/coreApiAuth/webDavPUTAuth.feature @@ -17,93 +17,93 @@ Feature: PUT file/folder @smokeTest Scenario: send PUT requests to webDav endpoints as normal user with wrong password When user "Alice" requests these endpoints with "PUT" including body "doesnotmatter" using password "invalid" about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @smokeTest Scenario: send PUT requests to webDav endpoints as normal user with no password When user "Alice" requests these endpoints with "PUT" including body "doesnotmatter" using password "" about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" Scenario: send PUT requests to another user's webDav endpoints as normal user When user "Brian" requests these endpoints with "PUT" including body "doesnotmatter" about user "Alice" - | endpoint | - | /remote.php/dav/files/%username%/textfile1.txt | - | /remote.php/dav/files/%username%/PARENT | + | endpoint | + | /dav/files/%username%/textfile1.txt | + | /dav/files/%username%/PARENT | Then the HTTP status code of responses on all endpoints should be "404" When user "Brian" requests these endpoints with "PUT" including body "doesnotmatter" about user "Alice" - | endpoint | - | /remote.php/dav/files/%username%/PARENT/parent.txt | + | endpoint | + | /dav/files/%username%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "404" Scenario: send PUT requests to another user's webDav endpoints as normal user using the spaces WebDAV API When user "Brian" requests these endpoints with "PUT" including body "doesnotmatter" about user "Alice" - | endpoint | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | + | endpoint | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | Then the HTTP status code of responses on all endpoints should be "404" When user "Brian" requests these endpoints with "PUT" including body "doesnotmatter" about user "Alice" - | endpoint | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "404" Scenario: send PUT requests to webDav endpoints using invalid username but correct password When user "usero" requests these endpoints with "PUT" including body "doesnotmatter" using the password of user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" Scenario: send PUT requests to webDav endpoints using valid password and username of different user When user "Brian" requests these endpoints with "PUT" including body "doesnotmatter" using the password of user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" @smokeTest Scenario: send PUT requests to webDav endpoints without any authentication When a user requests these endpoints with "PUT" with body "doesnotmatter" and no authentication about user "Alice" - | endpoint | - | /remote.php/webdav/textfile0.txt | - | /remote.php/dav/files/%username%/textfile0.txt | - | /remote.php/webdav/PARENT | - | /remote.php/dav/files/%username%/PARENT | - | /remote.php/dav/files/%username%/PARENT/parent.txt | - | /remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php/dav/spaces/%spaceid%/PARENT | - | /remote.php/dav/spaces/%spaceid%/PARENT/parent.txt | + | endpoint | + | /webdav/textfile0.txt | + | /dav/files/%username%/textfile0.txt | + | /webdav/PARENT | + | /dav/files/%username%/PARENT | + | /dav/files/%username%/PARENT/parent.txt | + | /dav/spaces/%spaceid%/textfile0.txt | + | /dav/spaces/%spaceid%/PARENT | + | /dav/spaces/%spaceid%/PARENT/parent.txt | Then the HTTP status code of responses on all endpoints should be "401" diff --git a/tests/acceptance/features/coreApiAuth/webDavSpecialURLs.feature b/tests/acceptance/features/coreApiAuth/webDavSpecialURLs.feature index cea04b373b..1e17531905 100644 --- a/tests/acceptance/features/coreApiAuth/webDavSpecialURLs.feature +++ b/tests/acceptance/features/coreApiAuth/webDavSpecialURLs.feature @@ -14,192 +14,192 @@ Feature: make webdav request with special urls Scenario: send DELETE requests to webDav endpoints with 2 slashes When user "Alice" requests these endpoints with "DELETE" using password "%regular%" about user "Alice" - | endpoint | - | //remote.php/webdav/textfile0.txt | - | //remote.php//dav/files/%username%/textfile1.txt | - | /remote.php//dav/files/%username%/PARENT/parent.txt | - | /remote.php//webdav/PARENT | - | //remote.php/dav//files/%username%//FOLDER | + | endpoint | + | //webdav/textfile0.txt | + | //dav//files/%username%/textfile1.txt | + | /dav//files/%username%/PARENT/parent.txt | + | /webdav//PARENT | + | //dav/files/%username%//FOLDER | Then the HTTP status code of responses on each endpoint should be "200,200,204,204,200" on oCIS or "204,204,204,204,204" on reva Scenario: send DELETE requests to webDav endpoints with 2 slashes using the spaces WebDAV API When user "Alice" requests these endpoints with "DELETE" using password "%regular%" about user "Alice" - | endpoint | - | //remote.php/dav/spaces/%spaceid%/textfile0.txt | - | //remote.php//dav/spaces/%spaceid%/PARENT/parent.txt | - | /remote.php//dav/spaces/%spaceid%/PARENT | - | //remote.php/dav//spaces/%spaceid%//FOLDER | + | endpoint | + | //dav/spaces/%spaceid%/textfile0.txt | + | //dav//spaces/%spaceid%/PARENT/parent.txt | + | /dav//spaces/%spaceid%/PARENT | + | //dav/spaces/%spaceid%//FOLDER | Then the HTTP status code of responses on each endpoint should be "200,200,204,200" on oCIS or "204,204,204,204" on reva Scenario: send GET requests to webDav endpoints with 2 slashes When user "Alice" requests these endpoints with "GET" using password "%regular%" about user "Alice" - | endpoint | - | //remote.php/webdav/textfile0.txt | - | //remote.php//dav/files/%username%/textfile1.txt | - | /remote.php//dav/files/%username%/PARENT/parent.txt | - | /remote.php//webdav/PARENT | - | //remote.php/dav//files/%username%//FOLDER | + | endpoint | + | //webdav/textfile0.txt | + | //dav//files/%username%/textfile1.txt | + | /dav//files/%username%/PARENT/parent.txt | + | //webdav/PARENT | + | //dav/files/%username%//FOLDER | Then the HTTP status code of responses on all endpoints should be "200" Scenario: send GET requests to webDav endpoints with 2 slashes using the spaces WebDAV API When user "Alice" requests these endpoints with "GET" using password "%regular%" about user "Alice" - | endpoint | - | //remote.php/dav/spaces/%spaceid%/textfile0.txt | - | //remote.php//dav/spaces/%spaceid%/PARENT/parent.txt | - | /remote.php//dav/spaces/%spaceid%/PARENT | - | //remote.php/dav//spaces/%spaceid%//FOLDER | + | endpoint | + | //dav/spaces/%spaceid%/textfile0.txt | + | //dav//spaces/%spaceid%/PARENT/parent.txt | + | /dav//spaces/%spaceid%/PARENT | + | //dav/spaces/%spaceid%//FOLDER | Then the HTTP status code of responses on all endpoints should be "200" Scenario: send LOCK requests to webDav endpoints with 2 slashes When user "Alice" requests these endpoints with "LOCK" to get property "d:shared" about user "Alice" - | endpoint | - | //remote.php/webdav/textfile0.txt | - | //remote.php//dav/files/%username%/textfile1.txt | - | /remote.php//dav/files/%username%/PARENT/parent.txt | - | /remote.php//webdav/PARENT | - | //remote.php/dav//files/%username%//FOLDER | + | endpoint | + | //webdav/textfile0.txt | + | //dav//files/%username%/textfile1.txt | + | /dav//files/%username%/PARENT/parent.txt | + | //webdav/PARENT | + | //dav/files/%username%//FOLDER | Then the HTTP status code of responses on all endpoints should be "200" Scenario: send LOCK requests to webDav endpoints with 2 slashes using the spaces WebDAV API When user "Alice" requests these endpoints with "LOCK" to get property "d:shared" about user "Alice" - | endpoint | - | //remote.php/dav/spaces/%spaceid%/textfile0.txt | - | //remote.php//dav/spaces/%spaceid%/PARENT/parent.txt | - | /remote.php//dav/spaces/%spaceid%/PARENT | - | //remote.php/dav//spaces/%spaceid%//FOLDER | + | endpoint | + | //dav/spaces/%spaceid%/textfile0.txt | + | //dav//spaces/%spaceid%/PARENT/parent.txt | + | /dav//spaces/%spaceid%/PARENT | + | //dav/spaces/%spaceid%//FOLDER | Then the HTTP status code of responses on all endpoints should be "200" Scenario: send MKCOL requests to webDav endpoints with 2 slashes When user "Alice" requests these endpoints with "MKCOL" using password "%regular%" about user "Alice" - | endpoint | - | //remote.php/webdav/PARENT1 | - | /remote.php//webdav/PARENT2 | - | //remote.php//webdav/PARENT3 | - | //remote.php/dav//files/%username%/PARENT4 | - | /remote.php/dav/files/%username%//PARENT5 | - | /remote.php/dav//files/%username%/PARENT6 | + | endpoint | + | //webdav/PARENT1 | + | /webdav//PARENT2 | + | //webdav//PARENT3 | + | //dav//files/%username%/PARENT4 | + | /dav/files/%username%//PARENT5 | + | /dav//files/%username%/PARENT6 | Then the HTTP status code of responses on each endpoint should be "200,201,200,200,201,201" on oCIS or "201,201,201,201,201,201" on reva Scenario: send MKCOL requests to webDav endpoints with 2 slashes using the spaces WebDAV API When user "Alice" requests these endpoints with "MKCOL" using password "%regular%" about user "Alice" - | endpoint | - | //remote.php/dav/spaces/%spaceid%/PARENT1 | - | /remote.php//dav/spaces/%spaceid%/PARENT2 | - | //remote.php//dav/spaces/%spaceid%/PARENT3 | - | //remote.php/dav//spaces/%spaceid%/PARENT4 | - | /remote.php/dav/spaces/%spaceid%//PARENT5 | - | /remote.php/dav//spaces/%spaceid%/PARENT6 | + | endpoint | + | //dav/spaces/%spaceid%/PARENT1 | + | /dav//spaces/%spaceid%/PARENT2 | + | //dav//spaces/%spaceid%/PARENT3 | + | //dav/spaces//%spaceid%/PARENT4 | + | /dav/spaces/%spaceid%//PARENT5 | + | /dav//spaces/%spaceid%/PARENT6 | Then the HTTP status code of responses on each endpoint should be "200,201,200,200,201,201" on oCIS or "201,201,201,201,201,201" on reva Scenario: send MOVE requests to webDav endpoints with 2 slashes When user "Alice" requests these endpoints with "MOVE" using password "%regular%" about user "Alice" - | endpoint | destination | - | //remote.php/webdav/textfile0.txt | /remote.php/webdav/textfileZero.txt | - | /remote.php//dav/files/%username%/textfile1.txt | /remote.php/dav/files/%username%/textfileOne.txt | - | /remote.php/webdav//PARENT | /remote.php/webdav/PARENT1 | - | //remote.php/dav/files/%username%//PARENT1 | /remote.php/dav/files/%username%/PARENT2 | - | /remote.php/dav//files/%username%/PARENT2/parent.txt | /remote.php/dav/files/%username%/PARENT2/parent1.txt | + | endpoint | destination | + | //webdav/textfile0.txt | /webdav/textfileZero.txt | + | /dav//files/%username%/textfile1.txt | /dav/files/%username%/textfileOne.txt | + | /webdav//PARENT | /webdav/PARENT1 | + | //dav/files//%username%//PARENT1 | /dav/files/%username%/PARENT2 | + | /dav//files/%username%/PARENT2/parent.txt | /dav/files/%username%/PARENT2/parent1.txt | Then the HTTP status code of responses on each endpoint should be "200,201,201,200,404" on oCIS or "201,201,201,201,201" on reva Scenario: send MOVE requests to webDav endpoints with 2 slashes using the spaces WebDAV API When user "Alice" requests these endpoints with "MOVE" using password "%regular%" about user "Alice" - | endpoint | destination | - | /remote.php//dav/spaces/%spaceid%/textfile1.txt | /remote.php/dav/spaces/%spaceid%/textfileOne.txt | - | /remote.php/dav//spaces/%spaceid%/PARENT | /remote.php/dav/spaces/%spaceid%/PARENT1 | - | //remote.php/dav/spaces/%spaceid%//PARENT1 | /remote.php/dav/spaces/%spaceid%/PARENT2 | - | //remote.php/dav/spaces/%spaceid%/PARENT2/parent.txt | /remote.php/dav/spaces/%spaceid%/PARENT2/parent1.txt | + | endpoint | destination | + | /dav//spaces/%spaceid%/textfile1.txt | /dav/spaces/%spaceid%/textfileOne.txt | + | /dav/spaces/%spaceid%//PARENT | /dav/spaces/%spaceid%/PARENT1 | + | //dav/spaces/%spaceid%//PARENT1 | /dav/spaces/%spaceid%/PARENT2 | + | //dav/spaces/%spaceid%/PARENT2/parent.txt | /dav/spaces/%spaceid%/PARENT2/parent1.txt | Then the HTTP status code of responses on each endpoint should be "201,201,200,200" on oCIS or "201,201,201,201" on reva Scenario: send POST requests to webDav endpoints with 2 slashes When user "Alice" requests these endpoints with "POST" including body "doesnotmatter" using password "%regular%" about user "Alice" - | endpoint | - | //remote.php/webdav/textfile0.txt | - | //remote.php//dav/files/%username%/textfile1.txt | - | /remote.php//dav/files/%username%/PARENT/parent.txt | - | /remote.php//webdav/PARENT | - | //remote.php/dav//files/%username%//FOLDER | + | endpoint | + | //webdav/textfile0.txt | + | //dav//files/%username%/textfile1.txt | + | /dav//files/%username%/PARENT/parent.txt | + | /webdav//PARENT | + | //dav/files//%username%//FOLDER | Then the HTTP status code of responses on each endpoint should be "200,200,412,412,200" respectively Scenario: send POST requests to webDav endpoints with 2 slashes using the spaces WebDAV API When user "Alice" requests these endpoints with "POST" including body "doesnotmatter" using password "%regular%" about user "Alice" - | endpoint | - | //remote.php//dav/spaces/%spaceid%/textfile1.txt | - | /remote.php//dav/spaces/%spaceid%/PARENT/parent.txt | - | /remote.php//dav/spaces/%spaceid%/PARENT | - | //remote.php/dav//spaces/%spaceid%//FOLDER | + | endpoint | + | //dav//spaces/%spaceid%/textfile1.txt | + | /dav//spaces/%spaceid%/PARENT/parent.txt | + | /dav//spaces/%spaceid%/PARENT | + | //dav//spaces/%spaceid%//FOLDER | Then the HTTP status code of responses on each endpoint should be "200,412,412,200" respectively Scenario: send PROPFIND requests to webDav endpoints with 2 slashes When user "Alice" requests these endpoints with "PROPFIND" to get property "d:href" about user "Alice" - | endpoint | - | //remote.php/webdav/textfile0.txt | - | //remote.php//dav/files/%username%/textfile1.txt | - | /remote.php//dav/files/%username%/PARENT/parent.txt | - | /remote.php//webdav/PARENT | - | //remote.php/dav//files/%username%//FOLDER | + | endpoint | + | //webdav/textfile0.txt | + | //dav//files/%username%/textfile1.txt | + | /dav//files/%username%/PARENT/parent.txt | + | /webdav//PARENT | + | //dav/files//%username%//FOLDER | Then the HTTP status code of responses on each endpoint should be "200,200,207,207,200" on oCIS or "207,207,207,207,207" on reva Scenario: send PROPFIND requests to webDav endpoints with 2 slashes using the spaces WebDAV API When user "Alice" requests these endpoints with "PROPFIND" to get property "d:href" about user "Alice" - | endpoint | - | //remote.php//dav/spaces/%spaceid%/textfile1.txt | - | /remote.php//dav/spaces/%spaceid%/PARENT/parent.txt | - | /remote.php//dav/spaces/%spaceid%/PARENT | - | //remote.php/dav//spaces/%spaceid%//FOLDER | + | endpoint | + | //dav//spaces/%spaceid%/textfile1.txt | + | /dav//spaces/%spaceid%/PARENT/parent.txt | + | /dav//spaces/%spaceid%/PARENT | + | //dav/spaces//%spaceid%//FOLDER | Then the HTTP status code of responses on each endpoint should be "200,207,207,200" on oCIS or "207,207,207,207" on reva Scenario: send PROPPATCH requests to webDav endpoints with 2 slashes When user "Alice" requests these endpoints with "PROPPATCH" to set property "d:getlastmodified" about user "Alice" - | endpoint | - | //remote.php/webdav/textfile0.txt | - | //remote.php//dav/files/%username%/textfile1.txt | - | /remote.php//dav/files/%username%/PARENT/parent.txt | - | /remote.php//webdav/PARENT | - | //remote.php/dav//files/%username%//FOLDER | + | endpoint | + | //webdav/textfile0.txt | + | //dav//files/%username%/textfile1.txt | + | /dav//files/%username%/PARENT/parent.txt | + | /webdav//PARENT | + | //dav//files/%username%//FOLDER | Then the HTTP status code of responses on each endpoint should be "200,200,400,400,200" respectively Scenario: send PROPPATCH requests to webDav endpoints with 2 slashes using the spaces WebDAV API When user "Alice" requests these endpoints with "PROPPATCH" to set property "d:getlastmodified" about user "Alice" - | endpoint | - | //remote.php//dav/spaces/%spaceid%/textfile1.txt | - | /remote.php//dav/spaces/%spaceid%/PARENT/parent.txt | - | /remote.php//dav/spaces/%spaceid%/PARENT | - | //remote.php/dav//spaces/%spaceid%//FOLDER | + | endpoint | + | //dav//spaces/%spaceid%/textfile1.txt | + | /dav//spaces/%spaceid%/PARENT/parent.txt | + | /dav//spaces/%spaceid%/PARENT | + | //dav/spaces//%spaceid%//FOLDER | Then the HTTP status code of responses on each endpoint should be "200,400,400,200" respectively Scenario: send PUT requests to webDav endpoints with 2 slashes When user "Alice" requests these endpoints with "PUT" including body "doesnotmatter" using password "%regular%" about user "Alice" - | endpoint | - | //remote.php/webdav/textfile0.txt | - | /remote.php//webdav/textfile1.txt | - | //remote.php//dav/files/%username%/textfile1.txt | - | /remote.php/dav/files/%username%/textfile7.txt | - | //remote.php/dav/files/%username%/PARENT//parent.txt | + | endpoint | + | //webdav/textfile0.txt | + | /webdav//textfile1.txt | + | //dav//files/%username%/textfile1.txt | + | /dav/files//%username%/textfile7.txt | + | //dav//files/%username%/PARENT//parent.txt | Then the HTTP status code of responses on each endpoint should be "200,204,200,201,200" on oCIS or "204,204,204,201,204" on reva Scenario: send PUT requests to webDav endpoints with 2 slashes using the spaces WebDAV API When user "Alice" requests these endpoints with "PUT" including body "doesnotmatter" using password "%regular%" about user "Alice" - | endpoint | - | //remote.php/dav/spaces/%spaceid%/textfile0.txt | - | /remote.php//dav/spaces/%spaceid%/textfile1.txt | - | //remote.php//dav/spaces/%spaceid%/textfile1.txt | - | /remote.php/dav/spaces/%spaceid%/textfile7.txt | - | //remote.php/dav/spaces/%spaceid%/PARENT//parent.txt | + | endpoint | + | //dav/spaces/%spaceid%/textfile0.txt | + | /dav//spaces/%spaceid%/textfile1.txt | + | //dav//spaces/%spaceid%/textfile1.txt | + | /dav/spaces//%spaceid%/textfile7.txt | + | //dav/spaces//%spaceid%/PARENT//parent.txt | Then the HTTP status code of responses on each endpoint should be "200,204,200,201,200" on oCIS or "204,204,204,201,204" on reva diff --git a/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature b/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature index 7d3f8db57e..ee1d113c14 100644 --- a/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature +++ b/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature @@ -251,7 +251,7 @@ Feature: sharing When user "Alice" deletes the last share using the sharing API Then the OCS status code should be "" And the HTTP status code should be "200" - When user "Brian" requests "/remote.php/dav/files/%username%" with "PROPFIND" using basic auth + When user "Brian" requests "/dav/files/%username%" with "PROPFIND" using basic auth Then the HTTP status code should be "207" Examples: | ocs-api-version | ocs-status-code | diff --git a/tests/acceptance/features/coreApiShareManagementToShares/moveReceivedShare.feature b/tests/acceptance/features/coreApiShareManagementToShares/moveReceivedShare.feature index f08d016fb4..48648be44d 100644 --- a/tests/acceptance/features/coreApiShareManagementToShares/moveReceivedShare.feature +++ b/tests/acceptance/features/coreApiShareManagementToShares/moveReceivedShare.feature @@ -9,7 +9,7 @@ Feature: sharing | Brian | | Carol | - @issue-8242 + @issue-8242 @issue-10334 Scenario Outline: sharer renames the shared item (old/new webdav) Given user "Alice" has uploaded file with content "foo" to "sharefile.txt" And using DAV path @@ -45,10 +45,9 @@ Feature: sharing And as user "Carol" the value of the item "//oc:name" of path "/Shares/sharefile.txt" in the response should be "sharefile.txt" And as user "Carol" the value of the item "//d:displayname" of path "/Shares/sharefile.txt" in the response should be "sharefile.txt" Examples: - | dav-path-version | dav-path | - | old | /remote.php/webdav | - | new | /remote.php/dav/files/%username% | - | new | /dav/files/%username% | + | dav-path-version | dav-path | + | old | /webdav | + | new | /dav/files/%username% | @issue-8242 Scenario Outline: sharer renames the shared item (spaces webdav) @@ -86,11 +85,10 @@ Feature: sharing And as user "Carol" the value of the item "//oc:name" of path "/sharefile.txt" in the response should be "sharefile.txt" And as user "Carol" the value of the item "//d:displayname" of path "/sharefile.txt" in the response should be "sharefile.txt" Examples: - | dav-path | dav-path-personal | - | /remote.php/dav/spaces/%shares_drive_id% | /remote.php/dav/spaces/%spaceid% | - | /dav/spaces/%shares_drive_id% | /remote.php/dav/spaces/%spaceid% | + | dav-path | dav-path-personal | + | /dav/spaces/%shares_drive_id% | /dav/spaces/%spaceid% | - @issue-8242 + @issue-8242 @issue-10334 Scenario Outline: share receiver renames the shared item (old/new webdav) Given user "Alice" has uploaded file with content "foo" to "/sharefile.txt" And using DAV path @@ -126,13 +124,11 @@ Feature: sharing And as user "Brian" the value of the item "//oc:name" of path "/Shares/sharefile.txt" in the response should be "sharefile.txt" And as user "Brian" the value of the item "//d:displayname" of path "/Shares/sharefile.txt" in the response should be "sharefile.txt" Examples: - | dav-path-version | dav-path | permissions-role | - | old | /remote.php/webdav | Viewer | - | new | /remote.php/dav/files/%username% | Viewer | - | new | /dav/files/%username% | Viewer | - | old | /remote.php/webdav | Secure viewer | - | new | /remote.php/dav/files/%username% | Secure viewer | - | new | /dav/files/%username% | Secure viewer | + | dav-path-version | dav-path | permissions-role | + | old | /webdav | Viewer | + | old | /webdav | Secure viewer | + | new | /dav/files/%username% | Viewer | + | new | /dav/files/%username% | Secure viewer | @issue-8242 Scenario Outline: share receiver renames the shared item (spaces webdav) @@ -170,11 +166,9 @@ Feature: sharing And as user "Brian" the value of the item "//oc:name" of path "/sharefile.txt" in the response should be "sharefile.txt" And as user "Brian" the value of the item "//d:displayname" of path "/sharefile.txt" in the response should be "sharefile.txt" Examples: - | dav-path | dav-path-personal | permissions-role | - | /remote.php/dav/spaces/%shares_drive_id% | /remote.php/dav/spaces/%spaceid% | Viewer | - | /dav/spaces/%shares_drive_id% | /remote.php/dav/spaces/%spaceid% | Viewer | - | /remote.php/dav/spaces/%shares_drive_id% | /remote.php/dav/spaces/%spaceid% | Secure viewer | - | /dav/spaces/%shares_drive_id% | /remote.php/dav/spaces/%spaceid% | Secure viewer | + | dav-path | dav-path-personal | permissions-role | + | /dav/spaces/%shares_drive_id% | /dav/spaces/%spaceid% | Viewer | + | /dav/spaces/%shares_drive_id% | /dav/spaces/%spaceid% | Secure viewer | Scenario: keep group share when the one user renames the share and the user is deleted diff --git a/tests/acceptance/features/coreApiSharePublicLink1/accessToPublicLinkShare.feature b/tests/acceptance/features/coreApiSharePublicLink1/accessToPublicLinkShare.feature index 203577ff50..0a71d0f1e9 100644 --- a/tests/acceptance/features/coreApiSharePublicLink1/accessToPublicLinkShare.feature +++ b/tests/acceptance/features/coreApiSharePublicLink1/accessToPublicLinkShare.feature @@ -21,7 +21,7 @@ Feature: accessing a public link share When the public accesses the preview of file "testavatar.jpg" from the last shared public link using the sharing API Then the HTTP status code should be "404" - @env-config + @env-config @issue-10341 Scenario: access to the preview of public shared file without password Given the config "OCIS_SHARING_PUBLIC_SHARE_MUST_HAVE_PASSWORD" has been set to "false" And user "Alice" has uploaded file "filesForUpload/testavatar.jpg" to "testavatar.jpg" @@ -50,7 +50,7 @@ Feature: accessing a public link share | textfile0.txt | Then the HTTP status code of responses on all endpoints should be "404" - @env-config + @env-config @issue-10341 Scenario: access to the preview of public shared file inside a folder without password Given the config "OCIS_SHARING_PUBLIC_SHARE_MUST_HAVE_PASSWORD" has been set to "false" And user "Alice" has created folder "FOLDER" diff --git a/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature b/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature index 3bcdbee939..9978487a5d 100644 --- a/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature +++ b/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature @@ -11,7 +11,7 @@ Feature: changing a public link share And user "Alice" has created folder "PARENT" And user "Alice" has uploaded file "filesForUpload/textfile.txt" to "PARENT/parent.txt" - + @issue-10331 Scenario Outline: public can or cannot delete file through publicly shared link depending on having delete permissions using the public WebDAV API Given using SharingNG And user "Alice" has created the following resource link share: @@ -29,7 +29,7 @@ Feature: changing a public link share | createOnly | 403 | should | | edit | 204 | should not | - + @issue-10331 Scenario: public link share permissions work correctly for renaming and share permissions edit using the public WebDAV API Given using SharingNG And user "Alice" has created the following resource link share: @@ -42,7 +42,7 @@ Feature: changing a public link share And as "Alice" file "/PARENT/parent.txt" should not exist And as "Alice" file "/PARENT/newparent.txt" should exist - + @issue-10331 Scenario: public link share permissions work correctly for upload with share permissions edit with the public WebDAV API Given using SharingNG And user "Alice" has created the following resource link share: @@ -66,7 +66,7 @@ Feature: changing a public link share Then the HTTP status code should be "401" And as "Alice" file "PARENT/parent.txt" should exist - + @issue-10331 Scenario: public can delete file through publicly shared link with password using the valid password with the public WebDAV API Given using SharingNG And user "Alice" has created the following resource link share: @@ -91,7 +91,7 @@ Feature: changing a public link share And as "Alice" file "/PARENT/newparent.txt" should not exist And as "Alice" file "/PARENT/parent.txt" should exist - + @issue-10331 Scenario: public tries to rename a file in a password protected share using the valid password with the public WebDAV API Given using SharingNG And user "Alice" has created the following resource link share: @@ -116,7 +116,7 @@ Feature: changing a public link share Then the HTTP status code should be "401" And as "Alice" file "/PARENT/lorem.txt" should not exist - + @issue-10331 Scenario: public tries to upload to a password protected public share using the valid password with the public WebDAV API Given using SharingNG And user "Alice" has created the following resource link share: @@ -128,7 +128,7 @@ Feature: changing a public link share Then the HTTP status code should be "201" And as "Alice" file "/PARENT/lorem.txt" should exist - + @issue-10331 Scenario: public cannot rename a file in upload-write-only public link share with the public WebDAV API Given using SharingNG And user "Alice" has created the following resource link share: @@ -141,7 +141,7 @@ Feature: changing a public link share And as "Alice" file "/PARENT/parent.txt" should exist And as "Alice" file "/PARENT/newparent.txt" should not exist - + @issue-10331 Scenario: public cannot delete a file in upload-write-only public link share with the public WebDAV API Given using SharingNG And user "Alice" has created the following resource link share: @@ -196,7 +196,7 @@ Feature: changing a public link share | 1 | 200 | | 2 | 403 | - + @issue-9724 @issue-10331 Scenario Outline: administrator removes password of a read-only public link Given using OCS API version "" And admin has created folder "/PARENT" diff --git a/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature b/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature index 1999f9e596..286d2f56ce 100644 --- a/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature +++ b/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature @@ -26,7 +26,7 @@ Feature: create a public link share | 1 | 200 | | 2 | 400 | - @smokeTest + @smokeTest @issue-10331 @issue-9724 Scenario Outline: creating a new public link share of a file with password using the new public WebDAV API Given using OCS API version "" And user "Alice" has uploaded file with content "Random data" to "/randomfile.txt" @@ -59,7 +59,7 @@ Feature: create a public link share | 1 | 100 | | 2 | 200 | - + @issue-10331 @issue-9724 Scenario Outline: create a new public link share of a file with edit permissions Given using OCS API version "" And user "Alice" has uploaded file with content "Random data" to "/randomfile.txt" @@ -88,7 +88,7 @@ Feature: create a public link share | 1 | 100 | | 2 | 200 | - + @issue-10331 @issue-9724 Scenario Outline: creating a new public link share of a folder, with a password and accessing using the public WebDAV API Given using OCS API version "" And user "Alice" has created folder "/PARENT" @@ -189,7 +189,7 @@ Feature: create a public link share | 1 | 100 | | 2 | 200 | - + @issue-10331 @issue-9724 Scenario Outline: creating a link share with edit permissions keeps it using the public WebDAV API Given using OCS API version "" And user "Alice" has created folder "/afolder" @@ -209,7 +209,7 @@ Feature: create a public link share | 1 | 100 | | 2 | 200 | - + @issue-10331 @issue-9724 Scenario Outline: creating a link share with upload permissions keeps it using the public WebDAV API Given using OCS API version "" And user "Alice" has created folder "/afolder" @@ -242,7 +242,7 @@ Feature: create a public link share | 1 | 200 | | 2 | 400 | - + @issue-10331 @issue-9724 Scenario Outline: user creates a public link share of a file with file name longer than 64 chars using the public WebDAV API Given using OCS API version "" And user "Alice" has uploaded file with content "long file" to "/aquickbrownfoxjumpsoveraverylazydogaquickbrownfoxjumpsoveralazydog.txt" @@ -257,7 +257,7 @@ Feature: create a public link share | 1 | 100 | | 2 | 200 | - + @issue-9724 @issue-10331 Scenario Outline: user creates a public link share of a folder with folder name longer than 64 chars and access using the public WebDAV API Given using OCS API version "" And user "Alice" has created folder "/aquickbrownfoxjumpsoveraverylazydogaquickbrownfoxjumpsoveralazydog" @@ -267,13 +267,13 @@ Feature: create a public link share | password | %public% | Then the OCS status code should be "" And the HTTP status code should be "200" - And the public should be able to download file "/randomfile.txt" from inside the last public link shared folder using the old public WebDAV API with password "%public%" and the content should be "Random data" + And the public should be able to download file "/randomfile.txt" from inside the last public link shared folder using the new public WebDAV API with password "%public%" and the content should be "Random data" Examples: | ocs-api-version | ocs-status-code | | 1 | 100 | | 2 | 200 | - @issue-1293 @skipOnReva + @issue-1293 @skipOnReva @issue-10331 @issue-9724 Scenario: delete a folder that has been publicly shared and try to access using the public WebDAV API Given user "Alice" has created folder "PARENT" And user "Alice" has uploaded file with content "Random data" to "/PARENT/parent.txt" @@ -287,7 +287,7 @@ Feature: create a public link share And the public tries to download file "/parent.txt" from inside the last public link shared folder with password "%public%" using the new public WebDAV API Then the HTTP status code should be "404" - @issue-1269 @issue-1293 @skipOnReva + @issue-1269 @issue-1293 @skipOnReva @issue-10331 @issue-9724 Scenario: try to download from a public share that has upload only permissions using the public webdav api Given user "Alice" has created folder "PARENT" And user "Alice" has uploaded file with content "Random data" to "/PARENT/parent.txt" @@ -300,7 +300,7 @@ Feature: create a public link share When the public tries to download file "/parent.txt" from inside the last public link shared folder with password "%public%" using the new public WebDAV API Then the HTTP status code should be "403" - @env-config @skipOnReva + @env-config @skipOnReva @issue-10331 @issue-10071 Scenario: get the size of a file shared by public link Given the config "OCIS_SHARING_PUBLIC_SHARE_MUST_HAVE_PASSWORD" has been set to "false" And user "Alice" has uploaded file with content "This is a test file" to "test-file.txt" @@ -313,7 +313,7 @@ Feature: create a public link share Then the HTTP status code should be "207" And the size of the file should be "19" - @env-config + @env-config @issue-10331 @issue-10071 Scenario Outline: get the mtime of a file shared by public link Given the config "OCIS_SHARING_PUBLIC_SHARE_MUST_HAVE_PASSWORD" has been set to "false" And using DAV path @@ -328,7 +328,7 @@ Feature: create a public link share | old | | new | - @env-config + @env-config @issue-10331 @issue-10071 Scenario Outline: get the mtime of a file inside a folder shared by public link Given the config "OCIS_SHARING_PUBLIC_SHARE_MUST_HAVE_PASSWORD" has been set to "false" And using DAV path @@ -344,7 +344,7 @@ Feature: create a public link share | old | | new | - @env-config @skipOnReva + @env-config @skipOnReva @issue-10331 @issue-10071 Scenario: get the mtime of a file inside a folder shared by public link using new webDAV version Given the config "OCIS_SHARING_PUBLIC_SHARE_MUST_HAVE_PASSWORD" has been set to "false" And user "Alice" has created folder "testFolder" @@ -359,7 +359,7 @@ Feature: create a public link share And as "Alice" the mtime of the file "testFolder/file.txt" should be "Thu, 08 Aug 2019 04:18:13 GMT" And the mtime of file "file.txt" in the last shared public link using the WebDAV API should be "Thu, 08 Aug 2019 04:18:13 GMT" - @env-config + @env-config @issue-10331 @issue-10071 Scenario: overwriting a file changes its mtime (new public webDAV API) Given the config "OCIS_SHARING_PUBLIC_SHARE_MUST_HAVE_PASSWORD" has been set to "false" And user "Alice" has created folder "testFolder" @@ -373,7 +373,7 @@ Feature: create a public link share And as "Alice" the mtime of the file "testFolder/file.txt" should be "Thu, 08 Aug 2019 04:18:13 GMT" And the mtime of file "file.txt" in the last shared public link using the WebDAV API should be "Thu, 08 Aug 2019 04:18:13 GMT" - @env-config @skipOnReva + @env-config @skipOnReva @issue-10331 @issue-10071 Scenario: check the href of a public link file Given the config "OCIS_SHARING_PUBLIC_SHARE_MUST_HAVE_PASSWORD" has been set to "false" And using new DAV path @@ -385,12 +385,12 @@ Feature: create a public link share | permissionsRole | view | 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 value of the item "//d:response[2]//d:href" in the response should match "/%base_path%\/remote.php\/dav\/public-files\/%public_token%\/file.txt$/" + And the value of the item "//d:response[2]//d:href" in the response should match "/\/dav\/public-files\/%public_token%\/file.txt$/" When the public gets the following properties of entry "/file.txt" in the last created public link using the WebDAV API | propertyName | | d:href | Then the HTTP status code should be "207" - And the value of the item "//d:href" in the response should match "/%base_path%\/remote.php\/dav\/public-files\/%public_token%\/file.txt$/" + And the value of the item "//d:href" in the response should match "/\/dav\/public-files\/%public_token%\/file.txt$/" @issue-6929 @@skipOnReva Scenario Outline: create a password-protected public link on a file with the name same to the previously deleted one diff --git a/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature b/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature index 40000d8099..89869047fa 100644 --- a/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature +++ b/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature @@ -9,7 +9,7 @@ Feature: copying from public link share And user "Alice" has created folder "/PARENT" And the config "OCIS_SHARING_PUBLIC_SHARE_MUST_HAVE_PASSWORD" has been set to "false" - + @issue-10331 Scenario: copy file within a public link folder new public WebDAV API Given user "Alice" has uploaded file with content "some data" to "/PARENT/testfile.txt" And using SharingNG @@ -24,7 +24,7 @@ Feature: copying from public link share And the content of file "/PARENT/testfile.txt" for user "Alice" should be "some data" And the content of file "/PARENT/copy1.txt" for user "Alice" should be "some data" - + @issue-10331 Scenario: copy folder within a public link folder new public WebDAV API Given user "Alice" has created folder "/PARENT/testFolder" And user "Alice" has uploaded file with content "some data" to "/PARENT/testFolder/testfile.txt" @@ -40,7 +40,7 @@ Feature: copying from public link share And the content of file "/PARENT/testFolder/testfile.txt" for user "Alice" should be "some data" And the content of file "/PARENT/testFolder-copy/testfile.txt" for user "Alice" should be "some data" - + @issue-10331 Scenario: copy file within a public link folder to a new folder Given user "Alice" has uploaded file with content "some data" to "/PARENT/testfile.txt" And user "Alice" has created folder "/PARENT/testFolder" @@ -56,7 +56,7 @@ Feature: copying from public link share And the content of file "/PARENT/testfile.txt" for user "Alice" should be "some data" And the content of file "/PARENT/testFolder/copy1.txt" for user "Alice" should be "some data" - + @issue-10331 Scenario: copy file within a public link folder to existing file Given user "Alice" has uploaded file with content "some data 0" to "/PARENT/testfile.txt" And user "Alice" has uploaded file with content "some data 1" to "/PARENT/copy1.txt" @@ -71,7 +71,7 @@ Feature: copying from public link share And as "Alice" file "/PARENT/copy1.txt" should exist And the content of file "/PARENT/copy1.txt" for user "Alice" should be "some data 0" - @issue-1232 + @issue-1232 @issue-10331 Scenario: copy folder within a public link folder to existing file Given user "Alice" has created folder "/PARENT/testFolder" And user "Alice" has uploaded file with content "some data" to "/PARENT/testFolder/testfile.txt" @@ -88,7 +88,7 @@ Feature: copying from public link share But as "Alice" file "/PARENT/copy1.txt" should not exist And as "Alice" file "/copy1.txt" should exist in the trashbin - + @issue-10331 Scenario: copy file within a public link folder and delete file Given user "Alice" has uploaded file with content "some data" to "/PARENT/testfile.txt" And using SharingNG @@ -101,7 +101,7 @@ Feature: copying from public link share Then the HTTP status code should be "204" And as "Alice" file "/PARENT/copy1.txt" should not exist - @issue-1232 + @issue-1232 @issue-10331 Scenario: copy file within a public link folder to existing folder Given user "Alice" has uploaded file with content "some data" to "/PARENT/testfile.txt" And user "Alice" has created folder "/PARENT/new-folder" @@ -118,7 +118,7 @@ Feature: copying from public link share And as "Alice" folder "/PARENT/new-folder" should not exist And as "Alice" folder "new-folder" should exist in the trashbin - + @issue-10331 Scenario Outline: copy file with special characters in it's name within a public link folder Given user "Alice" has uploaded file with content "some data" to "/PARENT/" And using SharingNG @@ -139,7 +139,7 @@ Feature: copying from public link share | C++ file.cpp | | sample,1.txt | - + @issue-10331 Scenario Outline: copy file within a public link folder to a file with special characters in it's name Given user "Alice" has uploaded file with content "some data" to "/PARENT/testfile.txt" And using SharingNG @@ -160,7 +160,7 @@ Feature: copying from public link share | C++ file.cpp | | sample,1.txt | - + @issue-10331 Scenario Outline: copy file within a public link folder into a folder with special characters Given user "Alice" has uploaded file with content "some data" to "/PARENT/testfile.txt" And user "Alice" has created folder "/PARENT/" @@ -182,7 +182,7 @@ Feature: copying from public link share | C++ file.cpp | | sample,1.txt | - @issue-8711 + @issue-8711 @issue-10331 Scenario: copy file within a public link folder to a same file Given user "Alice" has uploaded file with content "some data" to "/PARENT/testfile.txt" And using SharingNG @@ -194,7 +194,7 @@ Feature: copying from public link share Then the HTTP status code should be "204" And the content of file "/PARENT/testfile.txt" for user "Alice" should be "some data" - @issue-8711 + @issue-8711 @issue-10331 Scenario: copy folder within a public link folder to a same folder Given user "Alice" has created folder "/PARENT/testFolder" And user "Alice" has uploaded file with content "some data" to "/PARENT/testFolder/testfile.txt" @@ -208,7 +208,7 @@ Feature: copying from public link share And as "Alice" folder "/PARENT/testFolder" should exist And the content of file "/PARENT/testFolder/testfile.txt" for user "Alice" should be "some data" - @issue-1230 + @issue-1230 @issue-10331 Scenario: copy file within a public link folder to a share item root Given user "Alice" has uploaded file with content "some data" to "/PARENT/testfile.txt" And using SharingNG @@ -221,7 +221,7 @@ Feature: copying from public link share And as "Alice" file "/PARENT/testfile.txt" should exist And the content of file "/PARENT/testfile.txt" for user "Alice" should be "some data" - @issue-1230 + @issue-1230 @issue-10331 Scenario: copy folder within a public link folder to a share item root Given user "Alice" has created folder "/PARENT/testFolder" And user "Alice" has uploaded file with content "some data" to "/PARENT/testFolder/testfile.txt" diff --git a/tests/acceptance/features/coreApiSharePublicLink2/updatePublicLinkShare.feature b/tests/acceptance/features/coreApiSharePublicLink2/updatePublicLinkShare.feature index 36054daf53..d7bb1c3bd5 100644 --- a/tests/acceptance/features/coreApiSharePublicLink2/updatePublicLinkShare.feature +++ b/tests/acceptance/features/coreApiSharePublicLink2/updatePublicLinkShare.feature @@ -91,7 +91,7 @@ Feature: update a public link share | 1 | 100 | | 2 | 200 | - + @issue-9724 @issue-10331 Scenario Outline: creating a new public link share with password and adding an expiration date using public API Given using OCS API version "" And user "Alice" has uploaded file with content "Random data" to "/randomfile.txt" @@ -225,7 +225,7 @@ Feature: update a public link share | 1 | 100 | | 2 | 200 | - @issue-1269 + @issue-1269 @issue-9724 @issue-10331 Scenario Outline: updating share permissions from change to read restricts public from deleting files using the public API Given using OCS API version "" And user "Alice" has created folder "PARENT" @@ -249,7 +249,7 @@ Feature: update a public link share | 1 | | 2 | - + @issue-9724 @issue-10331 Scenario Outline: updating share permissions from read to change allows public to delete files using the public API Given using OCS API version "" And user "Alice" has created folder "PARENT" diff --git a/tests/acceptance/features/coreApiSharePublicLink2/uploadToPublicLinkShare.feature b/tests/acceptance/features/coreApiSharePublicLink2/uploadToPublicLinkShare.feature index f7808c1788..494929dc44 100644 --- a/tests/acceptance/features/coreApiSharePublicLink2/uploadToPublicLinkShare.feature +++ b/tests/acceptance/features/coreApiSharePublicLink2/uploadToPublicLinkShare.feature @@ -9,7 +9,7 @@ Feature: upload to a public link share Given user "Alice" has been created with default attributes and without skeleton files And user "Alice" has created folder "FOLDER" - + @issue-10331 Scenario Outline: uploading file to a public upload-only share using public API that was deleted does not work Given using DAV path And using SharingNG @@ -29,7 +29,7 @@ Feature: upload to a public link share | new | | spaces | - @issue-1269 + @issue-1269 @issue-10331 Scenario: uploading file to a public read-only share folder with public API does not work Given using SharingNG And user "Alice" has created the following resource link share: @@ -40,7 +40,7 @@ Feature: upload to a public link share When the public uploads file "test.txt" with password "%public%" and content "test-file" using the new public WebDAV API And the HTTP status code should be "403" - + @issue-10331 Scenario: uploading to a public upload-only share with public API Given using SharingNG And user "Alice" has created the following resource link share: @@ -54,7 +54,7 @@ Feature: upload to a public link share And the following headers should match these regular expressions | ETag | /^"[a-f0-9:\.]{1,32}"$/ | - + @issue-10331 Scenario: uploading to a public upload-only share with password with public API Given using SharingNG And user "Alice" has created the following resource link share: @@ -66,7 +66,7 @@ Feature: upload to a public link share Then the HTTP status code should be "201" And the content of file "/FOLDER/test.txt" for user "Alice" should be "test-file" - + @issue-10331 Scenario: uploading to a public read/write share with password with public API Given using SharingNG And user "Alice" has created the following resource link share: @@ -78,7 +78,7 @@ Feature: upload to a public link share Then the HTTP status code should be "201" And the content of file "/FOLDER/test.txt" for user "Alice" should be "test-file" - @skipOnReva + @skipOnReva @issue-10331 Scenario: uploading file to a public shared folder with read/write permission when the sharer has insufficient quota does not work with public API Given using SharingNG And user "Alice" has created the following resource link share: @@ -90,7 +90,7 @@ Feature: upload to a public link share When the public uploads file "test.txt" with password "%public%" and content "test2" using the new public WebDAV API Then the HTTP status code should be "507" - @skipOnReva + @skipOnReva @issue-10331 Scenario: uploading file to a public shared folder with upload-only permission when the sharer has insufficient quota does not work with public API Given using SharingNG And user "Alice" has created the following resource link share: @@ -102,7 +102,7 @@ Feature: upload to a public link share When the public uploads file "test.txt" with password "%public%" and content "test2" using the new public WebDAV API Then the HTTP status code should be "507" - @smokeTest + @smokeTest @issue-10331 Scenario: uploading to a public upload-write and no edit and no overwrite share with public API Given using SharingNG And user "Alice" has created the following resource link share: @@ -114,7 +114,7 @@ Feature: upload to a public link share Then the HTTP status code should be "201" And the content of file "/FOLDER/test.txt" for user "Alice" should be "test2" - @smokeTest @issue-1267 + @smokeTest @issue-1267 @issue-10331 Scenario: uploading same file to a public upload-write and no edit and no overwrite share multiple times with new public API Given using SharingNG And user "Alice" has created the following resource link share: diff --git a/tests/acceptance/features/coreApiTrashbin/trashbinSharingToShares.feature b/tests/acceptance/features/coreApiTrashbin/trashbinSharingToShares.feature index a8c9b5d1f9..fe176555de 100644 --- a/tests/acceptance/features/coreApiTrashbin/trashbinSharingToShares.feature +++ b/tests/acceptance/features/coreApiTrashbin/trashbinSharingToShares.feature @@ -197,10 +197,11 @@ Feature: using trashbin together with sharing | spaces | - Scenario Outline: restoring a file to a read-only folder + Scenario Outline: restoring personal file to a read-only folder Given using DAV path And user "Brian" has been created with default attributes and without skeleton files And user "Brian" has created folder "shareFolderParent" + And user "Brian" has uploaded file with content "file to delete" to "shareFolderParent/textfile0.txt" And user "Brian" has sent the following resource share invitation: | resource | shareFolderParent | | space | Personal | @@ -208,20 +209,20 @@ Feature: using trashbin together with sharing | shareType | user | | permissionsRole | Viewer | And user "Alice" has a share "shareFolderParent" synced - And as "Alice" folder "/Shares/shareFolderParent" should exist And user "Alice" has deleted file "/textfile0.txt" When user "Alice" restores the file with original path "/textfile0.txt" to "/Shares/shareFolderParent/textfile0.txt" using the trashbin API - Then the HTTP status code should be "403" + Then the HTTP status code should be "" And as "Alice" the file with original path "/textfile0.txt" should exist in the trashbin - And as "Alice" file "/Shares/shareFolderParent/textfile0.txt" should not exist - And as "Brian" file "/shareFolderParent/textfile0.txt" should not exist + And as "Brian" the file with original path "/textfile0.txt" should not exist in the trashbin + And as "Alice" file "/Shares/shareFolderParent/textfile0.txt" should exist + And as "Brian" file "/shareFolderParent/textfile0.txt" should exist Examples: - | dav-path-version | - | new | - | spaces | + | dav-path-version | http-status-code | + | new | 403 | + | spaces | 400 | - Scenario Outline: restoring a file to a read-only sub-folder + Scenario Outline: restoring personal file to a read-only sub-folder Given using DAV path And user "Brian" has been created with default attributes and without skeleton files And user "Brian" has created folder "shareFolderParent" @@ -236,11 +237,36 @@ Feature: using trashbin together with sharing And as "Alice" folder "/Shares/shareFolderParent/shareFolderChild" should exist And user "Alice" has deleted file "/textfile0.txt" When user "Alice" restores the file with original path "/textfile0.txt" to "/Shares/shareFolderParent/shareFolderChild/textfile0.txt" using the trashbin API - Then the HTTP status code should be "403" + Then the HTTP status code should be "" And as "Alice" the file with original path "/textfile0.txt" should exist in the trashbin And as "Alice" file "/Shares/shareFolderParent/shareFolderChild/textfile0.txt" should not exist And as "Brian" file "/shareFolderParent/shareFolderChild/textfile0.txt" should not exist Examples: - | dav-path-version | - | new | - | spaces | + | dav-path-version | http-status-code | + | new | 403 | + | spaces | 400 | + + + Scenario Outline: try to restore personal file to a shared folder as an editor + Given using DAV path + And user "Brian" has been created with default attributes and without skeleton files + And user "Brian" has created folder "shareFolderParent" + And user "Brian" has uploaded file with content "file to delete" to "shareFolderParent/textfile0.txt" + And user "Brian" has sent the following resource share invitation: + | resource | shareFolderParent | + | space | Personal | + | sharee | Alice | + | shareType | user | + | permissionsRole | Editor | + And user "Alice" has a share "shareFolderParent" synced + And user "Alice" has deleted file "/textfile0.txt" + When user "Alice" restores the file with original path "/textfile0.txt" to "/Shares/shareFolderParent/textfile0.txt" using the trashbin API + Then the HTTP status code should be "" + And as "Alice" the file with original path "/textfile0.txt" should exist in the trashbin + And as "Brian" the file with original path "/shareFolderParent/textfile0.txt" should not exist in the trashbin + And as "Brian" file "/shareFolderParent/textfile0.txt" should exist + And as "Alice" file "/Shares/shareFolderParent/textfile0.txt" should exist + Examples: + | dav-path-version | http-status-code | + | new | 403 | + | spaces | 400 | diff --git a/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature b/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature index e2fd73663a..bb361a0f62 100644 --- a/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature +++ b/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature @@ -31,8 +31,8 @@ Feature: restore deleted files/folders | /textfile1.txt | Examples: | dav-path-version | - | old | | new | + | spaces | Scenario Outline: file deleted from a folder can be restored to the original folder @@ -47,8 +47,8 @@ Feature: restore deleted files/folders And the content of file "/new-folder/new-file.txt" for user "Alice" should be "file to delete" Examples: | dav-path-version | - | old | | new | + | spaces | Scenario Outline: file deleted from a folder is restored to the original folder if the original folder was deleted and restored @@ -65,8 +65,8 @@ Feature: restore deleted files/folders And the content of file "/new-folder/new-file.txt" for user "Alice" should be "file to delete" Examples: | dav-path-version | - | old | | new | + | spaces | Scenario Outline: file is deleted and restored to a new destination @@ -85,11 +85,11 @@ Feature: restore deleted files/folders And the content of file "" for user "Alice" should be "to delete" Examples: | dav-path-version | delete-path | restore-path | - | old | /PARENT/parent.txt | parent.txt | + | spaces | /PARENT/parent.txt | parent.txt | | new | /PARENT/parent.txt | parent.txt | - | old | /PARENT/CHILD/child.txt | child.txt | + | spaces | /PARENT/CHILD/child.txt | child.txt | | new | /PARENT/CHILD/child.txt | child.txt | - | old | /textfile0.txt | PARENT/textfile0.txt | + | spaces | /textfile0.txt | PARENT/textfile0.txt | | new | /textfile0.txt | PARENT/textfile0.txt | @@ -105,9 +105,9 @@ Feature: restore deleted files/folders And the content of file for user "Alice" should be "file to delete" Examples: | dav-path-version | upload-path | delete-path | - | old | "/PARENT/textfile0.txt" | "/textfile0.txt" | + | spaces | "/PARENT/textfile0.txt" | "/textfile0.txt" | | new | "/PARENT/textfile0.txt" | "/textfile0.txt" | - | old | "/PARENT/.hiddenfile0.txt" | ".hiddenfile0.txt" | + | spaces | "/PARENT/.hiddenfile0.txt" | ".hiddenfile0.txt" | | new | "/PARENT/.hiddenfile0.txt" | ".hiddenfile0.txt" | @@ -127,8 +127,8 @@ Feature: restore deleted files/folders And the content of file "/new-folder/new-file.txt" for user "Alice" should be "file to delete" Examples: | dav-path-version | - | old | | new | + | spaces | @smokeTest Scenario Outline: deleted file cannot be restored by a different user @@ -136,14 +136,14 @@ Feature: restore deleted files/folders And user "Brian" has been created with default attributes and without skeleton files And user "Alice" has deleted file "/textfile0.txt" When user "Brian" tries to restore the file with original path "/textfile0.txt" from the trashbin of user "Alice" using the trashbin API - Then the HTTP status code should be "404" + Then the HTTP status code should be "" And as "Alice" the folder with original path "/textfile0.txt" should exist in the trashbin And user "Alice" should not see the following elements | /textfile0.txt | Examples: - | dav-path-version | - | old | - | new | + | dav-path-version | http-status-code | + | new | 404 | + | spaces | 400 | @smokeTest Scenario Outline: deleted file cannot be restored with invalid password @@ -157,8 +157,8 @@ Feature: restore deleted files/folders | /textfile0.txt | Examples: | dav-path-version | - | old | | new | + | spaces | @smokeTest Scenario Outline: deleted file cannot be restored without using a password @@ -172,7 +172,7 @@ Feature: restore deleted files/folders | /textfile0.txt | Examples: | dav-path-version | - | old | + | spaces | | new | @@ -187,11 +187,11 @@ Feature: restore deleted files/folders And the content of file "" for user "Alice" should be "file original content" Examples: | dav-path-version | file-name | - | old | 😛 😜 🐱 🐭 ⌚️ ♀️ 🚴‍♂️ | + | spaces | 😛 😜 🐱 🐭 ⌚️ ♀️ 🚴‍♂️ | | new | 😛 😜 🐱 🐭 ⌚️ ♀️ 🚴‍♂️ | - | old | strängé नेपाली file | + | spaces | strängé नेपाली file | | new | strängé नेपाली file | - | old | sample,1.txt | + | spaces | sample,1.txt | | new | sample,1.txt | @@ -209,7 +209,7 @@ Feature: restore deleted files/folders And the content of file "/new-folder/folder1/folder2/new-file.txt" for user "Alice" should be "file to delete" Examples: | dav-path-version | - | old | + | spaces | | new | @@ -227,7 +227,7 @@ Feature: restore deleted files/folders And the content of file "/new-folder/folder1/folder2/new-file.txt" for user "Alice" should be "file to delete" Examples: | dav-path-version | - | old | + | spaces | | new | @@ -247,7 +247,7 @@ Feature: restore deleted files/folders But as "Alice" the folder with original path "/new-folder" should exist in the trashbin Examples: | dav-path-version | - | old | + | spaces | | new | @@ -267,7 +267,7 @@ Feature: restore deleted files/folders But as "Alice" the file with original path "/new-folder/folder1/folder2/not-restored.txt" should exist in the trashbin Examples: | dav-path-version | - | old | + | spaces | | new | @@ -301,7 +301,7 @@ Feature: restore deleted files/folders | /FOLDER/.hidden_file | Examples: | dav-path-version | - | old | + | spaces | | new | @@ -340,7 +340,7 @@ Feature: restore deleted files/folders | # %ab ab?=ed.txt | Examples: | dav-path-version | - | old | + | spaces | | new | @@ -384,7 +384,7 @@ Feature: restore deleted files/folders | Folder,Comma | Examples: | dav-path-version | - | old | + | spaces | | new | @@ -402,7 +402,7 @@ Feature: restore deleted files/folders And the content of file "parent.txt" for user "Alice" should be "parent text" Examples: | dav-path-version | - | old | + | spaces | | new | @@ -421,7 +421,7 @@ Feature: restore deleted files/folders | /parent_folder/sub/parent.txt | Examples: | dav-path-version | - | old | + | spaces | | new | @@ -445,7 +445,7 @@ Feature: restore deleted files/folders | /parent_folder/sub/parent.txt | Examples: | dav-path-version | - | old | + | spaces | | new | @@ -464,7 +464,7 @@ Feature: restore deleted files/folders | /parent_folder/sub/parent.txt | Examples: | dav-path-version | - | old | + | spaces | | new | @@ -479,7 +479,7 @@ Feature: restore deleted files/folders | /parent.txt | Examples: | dav-path-version | - | old | + | spaces | | new | @@ -533,7 +533,7 @@ Feature: restore deleted files/folders | /fo.exe | Examples: | dav-path-version | - | old | + | spaces | | new | @@ -549,7 +549,7 @@ Feature: restore deleted files/folders And as "Alice" the folder with original path "same-name.txt" should exist in the trashbin Examples: | dav-path-version | - | old | + | spaces | | new | @@ -565,5 +565,5 @@ Feature: restore deleted files/folders And as "Alice" the file with original path "same-name.txt" should exist in the trashbin Examples: | dav-path-version | - | old | + | spaces | | new | diff --git a/tests/acceptance/features/coreApiVersions/fileVersions.feature b/tests/acceptance/features/coreApiVersions/fileVersions.feature index 43b8fba99e..740dfbd528 100644 --- a/tests/acceptance/features/coreApiVersions/fileVersions.feature +++ b/tests/acceptance/features/coreApiVersions/fileVersions.feature @@ -95,19 +95,19 @@ Feature: dav-versions Given user "Brian" has been created with default attributes and without skeleton files And user "Alice" has uploaded file with content "123" to "/davtest.txt" And we save it into "FILEID" - When user "Brian" sends HTTP method "PROPFIND" to URL "/remote.php/dav/meta/<>" + When user "Brian" sends HTTP method "PROPFIND" to URL "/dav/meta/<>" Then the HTTP status code should be "400" or "404" Scenario: user cannot access meta folder of a file which does not exist Given user "Brian" has been created with default attributes and without skeleton files - When user "Brian" sends HTTP method "PROPFIND" to URL "/remote.php/dav/meta/MTI4NGQyMzgtYWE5Mi00MmNlLWJkYzQtMGIwMDAwMDA5MTU2OjhjY2QyNzUxLTkwYTQtNDBmMi1iOWYzLTYxZWRmODQ0MjFmNA==" + When user "Brian" sends HTTP method "PROPFIND" to URL "/dav/meta/MTI4NGQyMzgtYWE5Mi00MmNlLWJkYzQtMGIwMDAwMDA5MTU2OjhjY2QyNzUxLTkwYTQtNDBmMi1iOWYzLTYxZWRmODQ0MjFmNA==" Then the HTTP status code should be "400" or "404" Scenario Outline: user cannot access meta folder of a file with invalid fileid Given user "Brian" has been created with default attributes and without skeleton files - When user "Brian" sends HTTP method "PROPFIND" to URL "/remote.php/dav/meta//v" + When user "Brian" sends HTTP method "PROPFIND" to URL "/dav/meta//v" Then the HTTP status code should be "400" or "404" Examples: | file-id | decoded-value | comment | diff --git a/tests/acceptance/features/coreApiWebdavDelete/deleteFile.feature b/tests/acceptance/features/coreApiWebdavDelete/deleteFile.feature index b98723068b..6324ea038d 100644 --- a/tests/acceptance/features/coreApiWebdavDelete/deleteFile.feature +++ b/tests/acceptance/features/coreApiWebdavDelete/deleteFile.feature @@ -139,14 +139,10 @@ Feature: delete file And as "Alice" file "/zerobyte.txt" should not exist @issue-9619 - Scenario Outline: delete a file using file-id + Scenario: delete a file using file-id Given using spaces DAV path And user "Alice" has uploaded file with content "special file" to "/textfile.txt" And we save it into "FILEID" - When user "Alice" deletes file "/textfile.txt" from space "Personal" using file-id path "" + When user "Alice" deletes file "/textfile.txt" from space "Personal" using file-id "<>" Then the HTTP status code should be "204" And as "Alice" file "/textfile.txt" should not exist - Examples: - | dav-path | - | /remote.php/dav/spaces/<> | - | /dav/spaces/<> | diff --git a/tests/acceptance/features/coreApiWebdavEtagPropagation1/deleteFileFolder.feature b/tests/acceptance/features/coreApiWebdavEtagPropagation1/deleteFileFolder.feature index 2811a47eea..136b4402db 100644 --- a/tests/acceptance/features/coreApiWebdavEtagPropagation1/deleteFileFolder.feature +++ b/tests/acceptance/features/coreApiWebdavEtagPropagation1/deleteFileFolder.feature @@ -215,7 +215,7 @@ Feature: propagation of etags when deleting a file or folder | old | | new | - @issue-4251 @skipOnReva + @issue-4251 @skipOnReva @issue-10331 Scenario Outline: deleting a file in a publicly shared folder changes its etag for the sharer Given using DAV path And user "Alice" has uploaded file with content "uploaded content" to "/upload/file.txt" @@ -239,7 +239,7 @@ Feature: propagation of etags when deleting a file or folder | new | | spaces | - @issue-4251 @skipOnReva + @issue-4251 @skipOnReva @issue-10331 Scenario Outline: deleting a folder in a publicly shared folder changes its etag for the sharer Given using DAV path And user "Alice" has created folder "/upload/sub" diff --git a/tests/acceptance/features/coreApiWebdavEtagPropagation1/moveFileFolder.feature b/tests/acceptance/features/coreApiWebdavEtagPropagation1/moveFileFolder.feature index 031f23bb0e..009f286f24 100644 --- a/tests/acceptance/features/coreApiWebdavEtagPropagation1/moveFileFolder.feature +++ b/tests/acceptance/features/coreApiWebdavEtagPropagation1/moveFileFolder.feature @@ -284,7 +284,7 @@ Feature: propagation of etags when moving files or folders | old | | new | - @skipOnReva + @skipOnReva @issue-10331 Scenario Outline: renaming a file in a publicly shared folder changes its etag for the sharer Given using DAV path And user "Alice" has created folder "/upload" @@ -309,7 +309,7 @@ Feature: propagation of etags when moving files or folders | new | | spaces | - @skipOnReva + @skipOnReva @issue-10331 Scenario Outline: renaming a folder in a publicly shared folder changes its etag for the sharer Given using DAV path And user "Alice" has created folder "/upload" diff --git a/tests/acceptance/features/coreApiWebdavEtagPropagation2/copyFileFolder.feature b/tests/acceptance/features/coreApiWebdavEtagPropagation2/copyFileFolder.feature index 69a5ce69ab..bc615479ff 100644 --- a/tests/acceptance/features/coreApiWebdavEtagPropagation2/copyFileFolder.feature +++ b/tests/acceptance/features/coreApiWebdavEtagPropagation2/copyFileFolder.feature @@ -104,7 +104,7 @@ Feature: propagation of etags when copying files or folders | new | | spaces | - @env-config @issue-4251 + @env-config @issue-4251 @issue-10331 Scenario Outline: copying a file inside a publicly shared folder by public changes etag for the sharer Given the config "OCIS_SHARING_PUBLIC_SHARE_MUST_HAVE_PASSWORD" has been set to "false" And using DAV path diff --git a/tests/acceptance/features/coreApiWebdavEtagPropagation2/createFolder.feature b/tests/acceptance/features/coreApiWebdavEtagPropagation2/createFolder.feature index d828f743da..455e02de40 100644 --- a/tests/acceptance/features/coreApiWebdavEtagPropagation2/createFolder.feature +++ b/tests/acceptance/features/coreApiWebdavEtagPropagation2/createFolder.feature @@ -107,7 +107,7 @@ Feature: propagation of etags when creating folders | old | | new | - @env-config @issue-4251 + @env-config @issue-4251 @issue-10331 Scenario Outline: creating a folder in a publicly shared folder changes its etag for the sharer Given the config "OCIS_SHARING_PUBLIC_SHARE_MUST_HAVE_PASSWORD" has been set to "false" And using DAV path @@ -127,6 +127,5 @@ Feature: propagation of etags when creating folders | Alice | /folder | Examples: | dav-path-version | - | old | | new | | spaces | diff --git a/tests/acceptance/features/coreApiWebdavEtagPropagation2/restoreFromTrash.feature b/tests/acceptance/features/coreApiWebdavEtagPropagation2/restoreFromTrash.feature index 0b078703a5..d6b0bc3612 100644 --- a/tests/acceptance/features/coreApiWebdavEtagPropagation2/restoreFromTrash.feature +++ b/tests/acceptance/features/coreApiWebdavEtagPropagation2/restoreFromTrash.feature @@ -25,8 +25,8 @@ Feature: propagation of etags when restoring a file or folder from trash | Alice | /upload/sub | Examples: | dav-path-version | - | old | | new | + | spaces | Scenario Outline: restoring a file to an other location changes the etags of all parents @@ -48,8 +48,8 @@ Feature: propagation of etags when restoring a file or folder from trash | Alice | /restore/sub | Examples: | dav-path-version | - | old | | new | + | spaces | Scenario Outline: restoring a folder to its original location changes the etags of all parents @@ -69,8 +69,8 @@ Feature: propagation of etags when restoring a file or folder from trash | Alice | /upload/sub | Examples: | dav-path-version | - | old | | new | + | spaces | Scenario Outline: restoring a folder to an other location changes the etags of all parents @@ -92,5 +92,5 @@ Feature: propagation of etags when restoring a file or folder from trash | Alice | /restore/sub | Examples: | dav-path-version | - | old | | new | + | spaces | diff --git a/tests/acceptance/features/coreApiWebdavEtagPropagation2/upload.feature b/tests/acceptance/features/coreApiWebdavEtagPropagation2/upload.feature index c1879ef5b3..3f9f958929 100644 --- a/tests/acceptance/features/coreApiWebdavEtagPropagation2/upload.feature +++ b/tests/acceptance/features/coreApiWebdavEtagPropagation2/upload.feature @@ -166,7 +166,7 @@ Feature: propagation of etags when uploading data | old | | new | - @issue-4251 @skipOnReva + @issue-4251 @skipOnReva @issue-10331 Scenario Outline: uploading a file into a publicly shared folder changes its etag for the sharer Given using DAV path And using SharingNG diff --git a/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature b/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature index b9dfe9025e..1bc8cd02a3 100644 --- a/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature +++ b/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature @@ -108,7 +108,7 @@ Feature: list files | new | | spaces | - @env-config + @env-config @issue-10071 @issue-10331 Scenario: get the list of resources in a folder shared through public link with depth 0 Given using new DAV path And the config "OCIS_SHARING_PUBLIC_SHARE_MUST_HAVE_PASSWORD" has been set to "false" @@ -136,7 +136,7 @@ Feature: list files | /simple-folder1/simple-folder2/simple-folder3 | | /simple-folder1/simple-folder2/simple-folder3/simple-folder4 | - @env-config + @env-config @issue-10071 @issue-10331 Scenario: get the list of resources in a folder shared through public link with depth 1 Given using new DAV path And the config "OCIS_SHARING_PUBLIC_SHARE_MUST_HAVE_PASSWORD" has been set to "false" diff --git a/tests/acceptance/features/coreApiWebdavOperations/propfind.feature b/tests/acceptance/features/coreApiWebdavOperations/propfind.feature index a02343356c..5f9b7c84a7 100644 --- a/tests/acceptance/features/coreApiWebdavOperations/propfind.feature +++ b/tests/acceptance/features/coreApiWebdavOperations/propfind.feature @@ -4,39 +4,39 @@ Feature: PROPFIND So that I can get the information about a resource @issue-751 - Scenario Outline: send PROPFIND request to "/remote.php/dav/(files|spaces)" + Scenario Outline: send PROPFIND request to "/dav/(files|spaces)" Given user "Alice" has been created with default attributes and without skeleton files When user "Alice" requests "" with "PROPFIND" using basic auth Then the HTTP status code should be "405" Examples: - | dav-path | - | /remote.php/dav/files | - | /remote.php/dav/spaces | + | dav-path | + | /dav/files | + | /dav/spaces | - - Scenario Outline: send PROPFIND request to "/remote.php/dav/(files|spaces)" with depth header + @issue-10334 + Scenario Outline: send PROPFIND request to "/dav/(files|spaces)" with depth header Given user "Alice" has been created with default attributes and without skeleton files When user "Alice" requests "" with "PROPFIND" using basic auth and with headers | header | value | | depth | | Then the HTTP status code should be "" Examples: - | dav-path | depth | http-status-code | - | /remote.php/webdav | 0 | 207 | - | /remote.php/webdav | 1 | 207 | - | /remote.php/dav/files/alice | 0 | 207 | - | /remote.php/dav/files/alice | 1 | 207 | - | /remote.php/dav/spaces/%spaceid% | 0 | 207 | - | /remote.php/dav/spaces/%spaceid% | 1 | 207 | - | /remote.php/dav/spaces/%spaceid% | infinity | 400 | + | dav-path | depth | http-status-code | + | /webdav | 0 | 207 | + | /webdav | 1 | 207 | + | /dav/files/alice | 0 | 207 | + | /dav/files/alice | 1 | 207 | + | /dav/spaces/%spaceid% | 0 | 207 | + | /dav/spaces/%spaceid% | 1 | 207 | + | /dav/spaces/%spaceid% | infinity | 400 | @skipOnReva Examples: - | dav-path | depth | http-status-code | - | /remote.php/webdav | infinity | 400 | - | /remote.php/dav/files/alice | infinity | 400 | + | dav-path | depth | http-status-code | + | /webdav | infinity | 400 | + | /dav/files/alice | infinity | 400 | - @skipOnReva + @skipOnReva @issue-10071 @issue-10331 Scenario: send PROPFIND request to a public link shared with password Given user "Alice" has been created with default attributes and without skeleton files And user "Alice" has created folder "/PARENT" @@ -48,10 +48,10 @@ Feature: PROPFIND | password | %public% | When the public sends "PROPFIND" request to the last public link share using the new public WebDAV API with password "%public%" Then the HTTP status code should be "207" - And the value of the item "//d:href" in the response should match "/%base_path%\/remote.php\/dav\/public-files\/%public_token%\/$/" + And the value of the item "//d:href" in the response should match "/\/dav\/public-files\/%public_token%\/$/" And the value of the item "//oc:public-link-share-owner" in the response should be "Alice" - @skipOnReva + @skipOnReva @issue-10071 @issue-10331 Scenario: send PROPFIND request to a public link shared with password (request without password) Given user "Alice" has been created with default attributes and without skeleton files And user "Alice" has created folder "/PARENT" @@ -65,7 +65,7 @@ Feature: PROPFIND Then the HTTP status code should be "401" And the value of the item "/d:error/s:exception" in the response should be "Sabre\DAV\Exception\NotAuthenticated" - @skipOnReva + @skipOnReva @issue-10071 @issue-10331 Scenario: send PROPFIND request to a public link shared with password (request with incorrect password) Given user "Alice" has been created with default attributes and without skeleton files And user "Alice" has created folder "/PARENT" diff --git a/tests/acceptance/features/coreApiWebdavOperations/search.feature b/tests/acceptance/features/coreApiWebdavOperations/search.feature index dbfad65a4e..8e6f886be9 100644 --- a/tests/acceptance/features/coreApiWebdavOperations/search.feature +++ b/tests/acceptance/features/coreApiWebdavOperations/search.feature @@ -21,7 +21,7 @@ Feature: Search 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 + @smokeTest @issue-10329 Scenario Outline: search for entry by pattern Given using DAV path When user "Alice" searches for "*upload*" using the WebDAV API @@ -43,7 +43,7 @@ Feature: Search | new | | spaces | - + @issue-10329 Scenario Outline: search for entries by only some letters from the middle of the entry name Given using DAV path And user "Alice" has created folder "FOLDER" @@ -61,7 +61,7 @@ Feature: Search | new | | spaces | - + @issue-10329 Scenario Outline: search for files by extension Given using DAV path When user "Alice" searches for "*png*" using the WebDAV API @@ -91,7 +91,7 @@ Feature: Search | new | | spaces | - + @issue-10329 Scenario Outline: limit returned search entries Given using DAV path When user "Alice" searches for "*upload*" and limits the results to "3" items using the WebDAV API @@ -111,7 +111,7 @@ Feature: Search | new | | spaces | - + @issue-10329 Scenario Outline: limit returned search entries to only 1 entry Given using DAV path When user "Alice" searches for "*upload*" and limits the results to "1" items using the WebDAV API @@ -131,7 +131,7 @@ Feature: Search | new | | spaces | - + @issue-10329 Scenario Outline: limit returned search entries to more entries than there are Given using DAV path When user "Alice" searches for "*upload*" and limits the results to "100" items using the WebDAV API @@ -152,7 +152,7 @@ Feature: Search | new | | spaces | - @issue-4712 @issue-9780 @issue-9781 @issue-9783 + @issue-4712 @issue-9780 @issue-9781 @issue-9783 @issue-10329 Scenario Outline: report extra properties in search entries for a file Given using DAV path When user "Alice" searches for "*upload*" using the WebDAV API requesting these properties: @@ -181,7 +181,7 @@ Feature: Search | new | | spaces | - @issue-4712 @issue-9780 @issue-9781 @issue-9783 + @issue-4712 @issue-9780 @issue-9781 @issue-9783 @issue-10329 Scenario Outline: report extra properties in search entries for a folder Given using DAV path When user "Alice" searches for "*upload*" using the WebDAV API requesting these properties: @@ -209,7 +209,7 @@ Feature: Search | new | | spaces | - + @issue-10329 Scenario Outline: search for entry with emoji by pattern Given using DAV path When user "Alice" searches for '"*😀 😁*"' using the WebDAV API diff --git a/tests/acceptance/features/coreApiWebdavProperties/createFileFolder.feature b/tests/acceptance/features/coreApiWebdavProperties/createFileFolder.feature index 68d6c3ab24..22120ad3b3 100644 --- a/tests/acceptance/features/coreApiWebdavProperties/createFileFolder.feature +++ b/tests/acceptance/features/coreApiWebdavProperties/createFileFolder.feature @@ -165,7 +165,7 @@ Feature: create files and folder | spaces | "'single'.txt" | | spaces | '"double".txt' | - + @issue-10339 Scenario Outline: try to create file with '.', '..' and 'empty' Given using DAV path When user "Alice" uploads file with content "some text" to "" using the WebDAV API @@ -185,7 +185,7 @@ Feature: create files and folder | spaces | /../lorem | 400 | | spaces | | 400 | - + @issue-10339 Scenario Outline: try to create folder with '.', '..' and 'empty' Given using DAV path When user "Alice" creates folder "" using the WebDAV API diff --git a/tests/acceptance/features/coreApiWebdavProperties/getFileProperties.feature b/tests/acceptance/features/coreApiWebdavProperties/getFileProperties.feature index 24680b033b..6a8aeccfe0 100644 --- a/tests/acceptance/features/coreApiWebdavProperties/getFileProperties.feature +++ b/tests/acceptance/features/coreApiWebdavProperties/getFileProperties.feature @@ -38,19 +38,19 @@ Feature: get file properties And the properties response should contain an etag And there should be an entry with href containing "" in the response to user "Alice" Examples: - | dav-path-version | file-name | expected-href | - | old | /C++ file.cpp | remote.php/webdav/C++ file.cpp | - | old | /file #2.txt | remote.php/webdav/file #2.txt | - | old | /file ?2.txt | remote.php/webdav/file ?2.txt | - | old | /file &2.txt | remote.php/webdav/file &2.txt | - | new | /C++ file.cpp | remote.php/dav/files/%username%/C++ file.cpp | - | new | /file #2.txt | remote.php/dav/files/%username%/file #2.txt | - | new | /file ?2.txt | remote.php/dav/files/%username%/file ?2.txt | - | new | /file &2.txt | remote.php/dav/files/%username%/file &2.txt | - | spaces | /C++ file.cpp | dav/spaces/%spaceid%/C++ file.cpp | - | spaces | /file #2.txt | dav/spaces/%spaceid%/file #2.txt | - | spaces | /file ?2.txt | dav/spaces/%spaceid%/file ?2.txt | - | spaces | /file &2.txt | dav/spaces/%spaceid%/file &2.txt | + | dav-path-version | file-name | expected-href | + | old | /C++ file.cpp | webdav/C++ file.cpp | + | old | /file #2.txt | webdav/file #2.txt | + | old | /file ?2.txt | webdav/file ?2.txt | + | old | /file &2.txt | webdav/file &2.txt | + | new | /C++ file.cpp | dav/files/%username%/C++ file.cpp | + | new | /file #2.txt | dav/files/%username%/file #2.txt | + | new | /file ?2.txt | dav/files/%username%/file ?2.txt | + | new | /file &2.txt | dav/files/%username%/file &2.txt | + | spaces | /C++ file.cpp | dav/spaces/%spaceid%/C++ file.cpp | + | spaces | /file #2.txt | dav/spaces/%spaceid%/file #2.txt | + | spaces | /file ?2.txt | dav/spaces/%spaceid%/file ?2.txt | + | spaces | /file &2.txt | dav/spaces/%spaceid%/file &2.txt | @issue-1296 Scenario Outline: user sends a PROPFIND request on various folder names @@ -64,28 +64,28 @@ Feature: get file properties And there should be an entry with href containing "/file1.txt" in the response to user "Alice" And there should be an entry with href containing "/file2.txt" in the response to user "Alice" Examples: - | dav-path-version | folder-name | expected-href | - | old | /upload | remote.php/webdav/upload | - | old | /strängé folder | remote.php/webdav/strängé folder | - | old | /C++ folder | remote.php/webdav/C++ folder | - | old | /नेपाली | remote.php/webdav/नेपाली | - | old | /folder #2.txt | remote.php/webdav/folder #2.txt | - | old | /folder ?2.txt | remote.php/webdav/folder ?2.txt | - | old | /folder &2.txt | remote.php/webdav/folder &2.txt | - | new | /upload | remote.php/dav/files/%username%/upload | - | new | /strängé folder | remote.php/dav/files/%username%/strängé folder | - | new | /C++ folder | remote.php/dav/files/%username%/C++ folder | - | new | /नेपाली | remote.php/dav/files/%username%/नेपाली | - | new | /folder #2.txt | remote.php/dav/files/%username%/folder #2.txt | - | new | /folder ?2.txt | remote.php/dav/files/%username%/folder ?2.txt | - | new | /folder &2.txt | remote.php/dav/files/%username%/folder &2.txt | - | spaces | /upload | dav/spaces/%spaceid%/upload | - | spaces | /strängé folder | dav/spaces/%spaceid%/strängé folder | - | spaces | /C++ folder | dav/spaces/%spaceid%/C++ folder | - | spaces | /नेपाली | dav/spaces/%spaceid%/नेपाली | - | spaces | /folder #2.txt | dav/spaces/%spaceid%/folder #2.txt | - | spaces | /folder ?2.txt | dav/spaces/%spaceid%/folder ?2.txt | - | spaces | /folder &2.txt | dav/spaces/%spaceid%/folder &2.txt | + | dav-path-version | folder-name | expected-href | + | old | /upload | webdav/upload | + | old | /strängé folder | webdav/strängé folder | + | old | /C++ folder | webdav/C++ folder | + | old | /नेपाली | webdav/नेपाली | + | old | /folder #2.txt | webdav/folder #2.txt | + | old | /folder ?2.txt | webdav/folder ?2.txt | + | old | /folder &2.txt | webdav/folder &2.txt | + | new | /upload | dav/files/%username%/upload | + | new | /strängé folder | dav/files/%username%/strängé folder | + | new | /C++ folder | dav/files/%username%/C++ folder | + | new | /नेपाली | dav/files/%username%/नेपाली | + | new | /folder #2.txt | dav/files/%username%/folder #2.txt | + | new | /folder ?2.txt | dav/files/%username%/folder ?2.txt | + | new | /folder &2.txt | dav/files/%username%/folder &2.txt | + | spaces | /upload | dav/spaces/%spaceid%/upload | + | spaces | /strängé folder | dav/spaces/%spaceid%/strängé folder | + | spaces | /C++ folder | dav/spaces/%spaceid%/C++ folder | + | spaces | /नेपाली | dav/spaces/%spaceid%/नेपाली | + | spaces | /folder #2.txt | dav/spaces/%spaceid%/folder #2.txt | + | spaces | /folder ?2.txt | dav/spaces/%spaceid%/folder ?2.txt | + | spaces | /folder &2.txt | dav/spaces/%spaceid%/folder &2.txt | Scenario Outline: user sends a PROPFIND request on various files inside various folders @@ -286,11 +286,11 @@ Feature: get file properties And the value of the item "/d:error/s:exception" in the response about user "Alice" should be "Sabre\DAV\Exception\NotFound" Examples: - | url | message1 | message2 | - | /remote.php/dav/files/does-not-exist | Resource not found | Resource not found | - | /remote.php/dav/does-not-exist | File not found in root | | - | /remote.php/dav/spaces/%spaceid%/does-not-exist | Resource not found | | - | /remote.php/dav/spaces/%spaceid%/file1.txt | Resource not found | | + | url | message1 | message2 | + | /dav/files/does-not-exist | Resource not found | Resource not found | + | /dav/does-not-exist | File not found in root | | + | /dav/spaces/%spaceid%/does-not-exist | Resource not found | | + | /dav/spaces/%spaceid%/file1.txt | Resource not found | | @issue-1297 Scenario Outline: add, receive multiple custom meta properties to a file diff --git a/tests/acceptance/features/coreApiWebdavUpload/uploadFile.feature b/tests/acceptance/features/coreApiWebdavUpload/uploadFile.feature index 82636c4260..695b0ccc67 100644 --- a/tests/acceptance/features/coreApiWebdavUpload/uploadFile.feature +++ b/tests/acceptance/features/coreApiWebdavUpload/uploadFile.feature @@ -372,7 +372,7 @@ Feature: upload file And for user "Brian" the content of the file "/textfile.txt" of the space "new-space" should be "" And for user "Alice" the content of the file "/textfile.txt" of the space "new-space" should be "" - @issue-8699 + @issue-8699 @issue-10331 Scenario: user updates a file inside a link shared space with empty content Given using SharingNG And user "Brian" has been created with default attributes and without skeleton files diff --git a/tests/acceptance/features/coreApiWebdavUploadTUS/creationWithUploadExtension.feature b/tests/acceptance/features/coreApiWebdavUploadTUS/creationWithUploadExtension.feature index 5ac271efdc..0afb47a6aa 100644 --- a/tests/acceptance/features/coreApiWebdavUploadTUS/creationWithUploadExtension.feature +++ b/tests/acceptance/features/coreApiWebdavUploadTUS/creationWithUploadExtension.feature @@ -28,7 +28,7 @@ Feature: tests of the creation extension see https://tus.io/protocols/resumable- | new | | spaces | - + @issue-10346 Scenario Outline: creating a new resource and upload data in multiple bytes using creation with upload extension Given using DAV path When user "Alice" creates file "textFile.txt" and uploads content "12345" in the same request using the TUS protocol on the WebDAV API diff --git a/tests/acceptance/features/coreApiWebdavUploadTUS/optionsRequest.feature b/tests/acceptance/features/coreApiWebdavUploadTUS/optionsRequest.feature index 6b0069433e..54e848204d 100644 --- a/tests/acceptance/features/coreApiWebdavUploadTUS/optionsRequest.feature +++ b/tests/acceptance/features/coreApiWebdavUploadTUS/optionsRequest.feature @@ -9,10 +9,10 @@ Feature: OPTIONS request Scenario: send OPTIONS request to webDav endpoints using the TUS protocol with valid password and username When user "Alice" requests these endpoints with "OPTIONS" including body "doesnotmatter" using the password of user "Alice" - | endpoint | - | /remote.php/webdav/ | - | /remote.php/dav/files/%username%/ | - | /remote.php/dav/spaces/%spaceid%/ | + | endpoint | + | /webdav/ | + | /dav/files/%username%/ | + | /dav/spaces/%spaceid%/ | Then the HTTP status code should be "204" And the following headers should be set | header | value | @@ -24,10 +24,10 @@ Feature: OPTIONS request Scenario: send OPTIONS request to webDav endpoints using the TUS protocol without any authentication When a user requests these endpoints with "OPTIONS" with body "doesnotmatter" and no authentication about user "Alice" - | endpoint | - | /remote.php/webdav/ | - | /remote.php/dav/files/%username%/ | - | /remote.php/dav/spaces/%spaceid%/ | + | endpoint | + | /webdav/ | + | /dav/files/%username%/ | + | /dav/spaces/%spaceid%/ | Then the HTTP status code should be "204" And the following headers should be set | header | value | @@ -39,10 +39,10 @@ Feature: OPTIONS request @issue-1012 Scenario: send OPTIONS request to webDav endpoints using the TUS protocol with valid username and wrong password When user "Alice" requests these endpoints with "OPTIONS" including body "doesnotmatter" using password "invalid" about user "Alice" - | endpoint | - | /remote.php/webdav/ | - | /remote.php/dav/files/%username%/ | - | /remote.php/dav/spaces/%spaceid%/ | + | endpoint | + | /webdav/ | + | /dav/files/%username%/ | + | /dav/spaces/%spaceid%/ | Then the HTTP status code should be "204" And the following headers should be set | header | value | @@ -55,10 +55,10 @@ Feature: OPTIONS request Scenario: send OPTIONS requests to webDav endpoints using valid password and username of different user Given user "Brian" has been created with default attributes and without skeleton files When user "Brian" requests these endpoints with "OPTIONS" including body "doesnotmatter" using the password of user "Alice" - | endpoint | - | /remote.php/webdav/ | - | /remote.php/dav/files/%username%/ | - | /remote.php/dav/spaces/%spaceid%/ | + | endpoint | + | /webdav/ | + | /dav/files/%username%/ | + | /dav/spaces/%spaceid%/ | Then the HTTP status code should be "204" And the following headers should be set | header | value | diff --git a/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature b/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature index 785e45a026..40a0d21fc4 100644 --- a/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature +++ b/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature @@ -6,7 +6,7 @@ Feature: upload file Background: Given user "Alice" has been created with default attributes and without skeleton files - + @issue-10346 Scenario Outline: upload a file and check download content Given using DAV path When user "Alice" uploads file with content "uploaded content" to "" using the TUS protocol on the WebDAV API @@ -35,7 +35,7 @@ Feature: upload file | spaces | /?fi=le&%#2 . txt | | spaces | /# %ab ab?=ed | - + @issue-10346 Scenario Outline: upload a file into a folder and check download content Given using DAV path And user "Alice" has created folder "" @@ -65,7 +65,7 @@ Feature: upload file | spaces | /folder ?2.txt | file ?2.txt | | spaces | /?fi=le&%#2 . txt | # %ab ab?=ed | - + @issue-10346 Scenario Outline: upload chunked file with TUS Given using DAV path When user "Alice" uploads file with content "uploaded content" in 3 chunks to "/myChunkedFile.txt" using the TUS protocol on the WebDAV API @@ -76,7 +76,7 @@ Feature: upload file | new | | spaces | - + @issue-10346 Scenario Outline: upload 1 byte chunks with TUS Given using DAV path When user "Alice" uploads file with content "0123456789" in 10 chunks to "/myChunkedFile.txt" using the TUS protocol on the WebDAV API @@ -87,7 +87,7 @@ Feature: upload file | new | | spaces | - + @issue-10346 Scenario Outline: upload to overwriting a file Given using DAV path And user "Alice" has uploaded file with content "original content" to "textfile.txt" @@ -99,7 +99,7 @@ Feature: upload file | new | | spaces | - + @issue-10346 Scenario Outline: upload a file and no version is available Given using DAV path When user "Alice" uploads file with content "uploaded content" to "/upload.txt" using the TUS protocol on the WebDAV API @@ -110,7 +110,7 @@ Feature: upload file | new | | spaces | - + @issue-10346 Scenario Outline: upload a file twice and versions are available Given using DAV path When user "Alice" uploads file with content "uploaded content" to "/upload.txt" using the TUS protocol on the WebDAV API @@ -123,7 +123,7 @@ Feature: upload file | new | | spaces | - + @issue-10346 Scenario Outline: upload a file in chunks with TUS and no version is available Given using DAV path When user "Alice" uploads file with content "0123456789" in 10 chunks to "/myChunkedFile.txt" using the TUS protocol on the WebDAV API @@ -133,7 +133,7 @@ Feature: upload file | old | | new | - + @issue-10346 Scenario Outline: upload a twice file in chunks with TUS and versions are available Given using DAV path When user "Alice" uploads file with content "0123456789" in 10 chunks to "/myChunkedFile.txt" using the TUS protocol on the WebDAV API @@ -146,7 +146,7 @@ Feature: upload file | new | | spaces | - + @issue-10334 Scenario Outline: upload a file with invalid-name Given using DAV path When user "Alice" creates a new TUS resource on the WebDAV API with these headers: @@ -176,7 +176,7 @@ Feature: upload file | spaces | "my\\file" | bXkMaWxl | | spaces | ".." | Li4= | - + @issue-10346 Scenario Outline: upload a zero-byte file Given using DAV path When user "Alice" uploads file "filesForUpload/zerobyte.txt" to "textfile.txt" using the TUS protocol on the WebDAV API @@ -187,7 +187,7 @@ Feature: upload file | new | | spaces | - @issue-8003 + @issue-8003 @issue-10346 Scenario Outline: replace a file with zero-byte file Given using DAV path And user "Alice" has uploaded file with content "This is TUS upload" to "textfile.txt" @@ -199,7 +199,7 @@ Feature: upload file | new | | spaces | - @issue-8003 + @issue-8003 @issue-10346 Scenario Outline: replace a file inside a folder with zero-byte file Given using DAV path And user "Alice" has created folder "testFolder" diff --git a/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtime.feature b/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtime.feature index b46159f98a..4b777dfef4 100644 --- a/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtime.feature +++ b/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtime.feature @@ -6,7 +6,7 @@ Feature: upload file Background: Given user "Alice" has been created with default attributes and without skeleton files - + @issue-10346 Scenario Outline: upload file with mtime Given using DAV path When user "Alice" uploads file "filesForUpload/textfile.txt" to "file.txt" with mtime "Thu, 08 Aug 2019 04:18:13 GMT" using the TUS protocol on the WebDAV API @@ -17,7 +17,7 @@ Feature: upload file | new | | spaces | - + @issue-10346 Scenario Outline: upload file with future mtime Given using DAV path When user "Alice" uploads file "filesForUpload/textfile.txt" to "file.txt" with mtime "Thu, 08 Aug 2129 04:18:13 GMT" using the TUS protocol on the WebDAV API @@ -28,7 +28,7 @@ Feature: upload file | new | | spaces | - + @issue-10346 Scenario Outline: upload a file with mtime in a folder Given using DAV path And user "Alice" has created folder "testFolder" @@ -40,7 +40,7 @@ Feature: upload file | new | | spaces | - + @issue-10346 Scenario Outline: overwriting a file changes its mtime Given using DAV path And user "Alice" has uploaded file with content "first time upload content" to "file.txt" diff --git a/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtimeShares.feature b/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtimeShares.feature index 565882908c..32cb79a1a9 100644 --- a/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtimeShares.feature +++ b/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtimeShares.feature @@ -10,7 +10,7 @@ Feature: upload file | Alice | | Brian | - + @issue-10346 Scenario Outline: upload file with mtime to a received share Given using DAV path And user "Alice" has created folder "/toShare" @@ -29,7 +29,7 @@ Feature: upload file | old | | new | - + @issue-10346 Scenario Outline: upload file with mtime to a send share Given using DAV path And user "Alice" has created folder "/toShare" @@ -48,7 +48,7 @@ Feature: upload file | old | | new | - + @issue-10346 Scenario Outline: overwriting a file with mtime in a received share Given using DAV path And user "Alice" has created folder "/toShare" @@ -68,7 +68,7 @@ Feature: upload file | old | | new | - + @issue-10346 Scenario Outline: overwriting a file with mtime in a send share Given using DAV path And user "Alice" has created folder "/toShare" diff --git a/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToMoveFolder.feature b/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToMoveFolder.feature index ec2b39ba34..163f7706e3 100644 --- a/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToMoveFolder.feature +++ b/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToMoveFolder.feature @@ -6,7 +6,7 @@ Feature: move folders Background: Given user "Alice" has been created with default attributes and without skeleton files - + @issue-10346 Scenario Outline: uploading file into a moved folder Given using DAV path And user "Alice" has created folder "/test" diff --git a/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature b/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature index d31a5d5335..8b30e5d2ff 100644 --- a/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature +++ b/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature @@ -10,7 +10,7 @@ Feature: upload file to shared folder | Alice | | Brian | - + @issue-10346 Scenario Outline: uploading file to a received share folder Given using DAV path And user "Alice" has created folder "/FOLDER" @@ -29,7 +29,7 @@ Feature: upload file to shared folder | old | | new | - + @issue-10346 Scenario Outline: uploading file to a user read/write share folder works Given using DAV path And user "Alice" has created folder "/FOLDER" @@ -48,7 +48,7 @@ Feature: upload file to shared folder | old | | new | - + @issue-10346 Scenario Outline: uploading a file into a group share as share receiver Given using DAV path And group "grp1" has been created @@ -69,7 +69,7 @@ Feature: upload file to shared folder | old | | new | - + @issue-10346 Scenario Outline: overwrite file to a received share folder Given using DAV path And user "Alice" has created folder "/FOLDER" @@ -89,7 +89,7 @@ Feature: upload file to shared folder | old | | new | - + @issue-10346 Scenario Outline: attempt to upload a file into a folder within correctly received read only share Given using DAV path And user "Alice" has created folder "/FOLDER"