Skip to content

Commit

Permalink
confirm content on dav-v2 test
Browse files Browse the repository at this point in the history
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
  • Loading branch information
ArtificialOwl committed Nov 24, 2023
1 parent 94d1a00 commit d821f74
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 18 deletions.
68 changes: 54 additions & 14 deletions build/integration/features/bootstrap/WebDav.php
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand All @@ -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;

Expand All @@ -43,17 +45,13 @@
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;

Expand Down Expand Up @@ -237,7 +235,7 @@ public function search(): void {
public function searchFavorite(): void {
$this->searchFile(
$this->currentUser,
null,
'<oc:favorite/>',
null,
'<d:eq>
<d:prop>
Expand Down Expand Up @@ -333,19 +331,32 @@ public function asTheFileOrFolderExists($user, $entry, $path) {
$this->response = $this->listFolder($user, $path, 0);
}

/**
* @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)) {
Expand Down Expand Up @@ -533,6 +544,7 @@ public function searchFile(string $user, ?string $properties = null, ?string $sc
$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
Expand Down Expand Up @@ -1112,4 +1124,32 @@ public function theUploadShouldFailOnObjectStorage() {
$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;
}
}
19 changes: 15 additions & 4 deletions build/integration/features/dav-v2.feature
Original file line number Diff line number Diff line change
Expand Up @@ -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"

0 comments on commit d821f74

Please sign in to comment.