mirror of
https://github.com/nextcloud/server.git
synced 2026-06-08 08:16:43 -04:00
confirm content on dav-v2 test
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
This commit is contained in:
parent
700b6ea4a3
commit
ec74c00d4c
2 changed files with 69 additions and 18 deletions
|
|
@ -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>
|
||||
|
|
@ -333,6 +331,19 @@ trait WebDav {
|
|||
$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
|
||||
|
|
@ -340,12 +351,12 @@ trait WebDav {
|
|||
* @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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue