diff options
author | Maxence Lange <maxence@artificial-owl.com> | 2023-11-24 08:35:01 -0100 |
---|---|---|
committer | Maxence Lange <maxence@artificial-owl.com> | 2023-11-24 11:11:48 -0100 |
commit | d821f7487a6b106313824d1b57bb881142110b14 (patch) | |
tree | 5206c0989e91475df5c36b7361610732e17bd866 /build/integration | |
parent | 94d1a00672dda7f0aac4adc52db0c6157d0c6ec3 (diff) | |
download | nextcloud-server-d821f7487a6b106313824d1b57bb881142110b14.tar.gz nextcloud-server-d821f7487a6b106313824d1b57bb881142110b14.zip |
confirm content on dav-v2 test
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
Diffstat (limited to 'build/integration')
-rw-r--r-- | build/integration/features/bootstrap/WebDav.php | 68 | ||||
-rw-r--r-- | build/integration/features/dav-v2.feature | 19 |
2 files changed, 69 insertions, 18 deletions
diff --git a/build/integration/features/bootstrap/WebDav.php b/build/integration/features/bootstrap/WebDav.php index 4212f56ce2b..c239461b788 100644 --- a/build/integration/features/bootstrap/WebDav.php +++ b/build/integration/features/bootstrap/WebDav.php @@ -7,6 +7,7 @@ * @author Joas Schilling <coding@schilljs.com> * @author John Molakvoæ <skjnldsv@protonmail.com> * @author Lukas Reschke <lukas@statuscode.ch> + * @author Maxence Lange <maxence@artificial-owl.com> * @author Morris Jobke <hey@morrisjobke.de> * @author Robin Appelman <robin@icewind.nl> * @author Roeland Jago Douma <roeland@famdouma.nl> @@ -31,9 +32,10 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ + use GuzzleHttp\Client as GClient; -use GuzzleHttp\Message\ResponseInterface; use PHPUnit\Framework\Assert; +use Psr\Http\Message\ResponseInterface; use Sabre\DAV\Client as SClient; use Sabre\DAV\Xml\Property\ResourceType; @@ -43,17 +45,13 @@ require __DIR__ . '/../../vendor/autoload.php'; trait WebDav { use Sharing; - /** @var string */ - private $davPath = "remote.php/webdav"; - /** @var boolean */ - private $usingOldDavPath = true; + private string $davPath = "remote.php/webdav"; + private bool $usingOldDavPath = true; + private ?array $storedETAG = null; // map with user as key and another map as value, which has path as key and etag as value + private ?int $storedFileID = null; /** @var ResponseInterface */ private $response; - /** @var array map with user as key and another map as value, which has path as key and etag as value */ - private $storedETAG = null; - /** @var int */ - private $storedFileID = null; - + private array $parsedResponse = []; private string $s3MultipartDestination; private string $uploadId; @@ -237,7 +235,7 @@ trait WebDav { public function searchFavorite(): void { $this->searchFile( $this->currentUser, - null, + '<oc:favorite/>', null, '<d:eq> <d:prop> @@ -334,18 +332,31 @@ trait WebDav { } /** + * @Then the response should be empty + * @throws \Exception + */ + public function theResponseShouldBeEmpty(): void { + $response = ($this->response instanceof ResponseInterface) ? $this->convertResponseToDavEntries() : $this->response; + if ($response === []) { + return; + } + + throw new \Exception('response is not empty'); + } + + /** * @Then the single response should contain a property :key with value :value * @param string $key * @param string $expectedValue * @throws \Exception */ public function theSingleResponseShouldContainAPropertyWithValue($key, $expectedValue) { - $keys = $this->response; - if (!array_key_exists($key, $keys)) { + $response = ($this->response instanceof ResponseInterface) ? $this->convertResponseToDavSingleEntry() : $this->response; + if (!array_key_exists($key, $response)) { throw new \Exception("Cannot find property \"$key\" with \"$expectedValue\""); } - $value = $keys[$key]; + $value = $response[$key]; if ($value instanceof ResourceType) { $value = $value->getValue(); if (empty($value)) { @@ -533,6 +544,7 @@ trait WebDav { $this->response = $this->makeDavRequest($user, "SEARCH", '', [ 'Content-Type' => 'text/xml' ], $body, ''); + var_dump((string)$this->response->getBody()); } catch (\GuzzleHttp\Exception\ServerException $e) { // 5xx responses cause a server exception @@ -1112,4 +1124,32 @@ trait WebDav { $this->theHTTPStatusCodeShouldBe(500); } } + + /** + * @return array + * @throws Exception + */ + private function convertResponseToDavSingleEntry(): array { + $results = $this->convertResponseToDavEntries(); + if (count($results) > 1) { + throw new \Exception('result is empty or contain more than one (1) entry'); + } + + return array_shift($results); + } + + /** + * @return array + */ + private function convertResponseToDavEntries(): array { + $client = $this->getSabreClient($this->currentUser); + $parsedResponse = $client->parseMultiStatus((string)$this->response->getBody()); + + $results = []; + foreach ($parsedResponse as $href => $statusList) { + $results[$href] = $statusList[200] ?? []; + } + + return $results; + } } diff --git a/build/integration/features/dav-v2.feature b/build/integration/features/dav-v2.feature index 235ae533913..a3ac59578e9 100644 --- a/build/integration/features/dav-v2.feature +++ b/build/integration/features/dav-v2.feature @@ -81,16 +81,27 @@ Feature: dav-v2 When User "user0" uploads file "data/textfile.txt" to "/testquota/asdf.txt" Then the HTTP status code should be "201" - Scenario: Create a search query + Scenario: Create a search query on image Given using new dav path And As an "admin" - When User "user0" uploads file "data/green-square-256.png" to "/image.png" - When Image search should work + And user "user0" exists + And As an "user0" + When User "user0" uploads file "data/textfile.txt" to "/testquota/asdf.txt" + Then Image search should work + And the response should be empty + When User "user0" uploads file "data/green-square-256.png" to "/image.png" + Then Image search should work + And the single response should contain a property "{DAV:}getcontenttype" with value "image/png" Scenario: Create a search query on favorite Given using new dav path And As an "admin" And user "user0" exists + And As an "user0" When User "user0" uploads file "data/green-square-256.png" to "/fav_image.png" + Then Favorite search should work + And the response should be empty When user "user0" favorites element "/fav_image.png" - When Favorite search should work + Then Favorite search should work + And the single response should contain a property "{http://owncloud.org/ns}favorite" with value "1" + |