2021-08-25 23:47:18 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Friendica\Addon\webdav_storage\tests;
|
|
|
|
|
2021-09-07 20:38:57 +02:00
|
|
|
use Friendica\Addon\webdav_storage\src\WebDav;
|
|
|
|
use Friendica\DI;
|
2021-10-05 10:05:17 +02:00
|
|
|
use Friendica\Factory\HTTPClientFactory;
|
2021-10-23 12:11:37 +02:00
|
|
|
use Friendica\Test\src\Core\Storage\StorageTest;
|
2021-10-23 12:22:26 +02:00
|
|
|
use Friendica\Core\Logger\Type\VoidLogger;
|
2021-10-05 10:05:17 +02:00
|
|
|
|
|
|
|
/// @todo remove when constant is moved to a class constant
|
|
|
|
/// Necessary for DB_UPDATE_VERSION constant in case of direct calls, where dbstructure isn't included during the calling process
|
|
|
|
require_once __DIR__ . '/../../../static/dbstructure.config.php';
|
2021-08-25 23:47:18 +02:00
|
|
|
|
2021-09-07 20:38:57 +02:00
|
|
|
class WebDavTest extends StorageTest
|
2021-08-25 23:47:18 +02:00
|
|
|
{
|
|
|
|
public function dataMultiStatus()
|
|
|
|
{
|
|
|
|
return [
|
|
|
|
'nextcloud' => [
|
|
|
|
'xml' => <<<EOF
|
|
|
|
<?xml version="1.0"?>
|
|
|
|
<d:multistatus xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns" xmlns:oc="http://owncloud.org/ns"
|
|
|
|
xmlns:nc="http://nextcloud.org/ns">
|
|
|
|
<d:response>
|
|
|
|
<d:href>/remote.php/dav/files/admin/Friendica_test/97/18/</d:href>
|
|
|
|
<d:propstat>
|
|
|
|
<d:prop>
|
|
|
|
<d:getlastmodified>Mon, 30 Aug 2021 12:58:54 GMT</d:getlastmodified>
|
|
|
|
<d:resourcetype>
|
|
|
|
<d:collection/>
|
|
|
|
</d:resourcetype>
|
|
|
|
<d:quota-used-bytes>45017</d:quota-used-bytes>
|
|
|
|
<d:quota-available-bytes>59180834349</d:quota-available-bytes>
|
|
|
|
<d:getetag>"612cd60ec9fd5"</d:getetag>
|
|
|
|
</d:prop>
|
|
|
|
<d:status>HTTP/1.1 200 OK</d:status>
|
|
|
|
</d:propstat>
|
|
|
|
</d:response>
|
|
|
|
<d:response>
|
|
|
|
<d:href>
|
|
|
|
/remote.php/dav/files/admin/Friendica_test/97/18/4d9d36f614dc005756bdfb9abbf1d8d24aa9ae842e5d6b5e7eb1dafbe767
|
|
|
|
</d:href>
|
|
|
|
<d:propstat>
|
|
|
|
<d:prop>
|
|
|
|
<d:getlastmodified>Mon, 30 Aug 2021 12:58:54 GMT</d:getlastmodified>
|
|
|
|
<d:getcontentlength>45017</d:getcontentlength>
|
|
|
|
<d:resourcetype/>
|
|
|
|
<d:getetag>"4f7a144092532141d0e6b925e50a896e"</d:getetag>
|
|
|
|
<d:getcontenttype>application/octet-stream
|
|
|
|
</d:getcontenttype>
|
|
|
|
</d:prop>
|
|
|
|
<d:status>HTTP/1.1 200 OK</d:status>
|
|
|
|
</d:propstat>
|
|
|
|
<d:propstat>
|
|
|
|
<d:prop>
|
|
|
|
<d:quota-used-bytes/>
|
|
|
|
<d:quota-available-bytes/>
|
|
|
|
</d:prop>
|
|
|
|
<d:status>HTTP/1.1 404 Not Found
|
|
|
|
</d:status>
|
|
|
|
</d:propstat>
|
|
|
|
</d:response>
|
|
|
|
</d:multistatus>
|
|
|
|
EOF,
|
|
|
|
'assertionCount' => 2,
|
|
|
|
],
|
|
|
|
'onlyDir' => [
|
|
|
|
'xml' => <<<EOF
|
|
|
|
<d:multistatus xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns" xmlns:oc="http://owncloud.org/ns" xmlns:nc="http://nextcloud.org/ns">
|
|
|
|
<d:response>
|
|
|
|
<d:href>/remote.php/dav/files/admin/Friendica_test/34/cf/</d:href>
|
|
|
|
<d:propstat>
|
|
|
|
<d:prop>
|
|
|
|
<d:getlastmodified>Sun, 05 Sep 2021 17:56:05 GMT</d:getlastmodified>
|
|
|
|
<d:resourcetype>
|
|
|
|
<d:collection/>
|
|
|
|
</d:resourcetype>
|
|
|
|
<d:quota-used-bytes>0</d:quota-used-bytes>
|
|
|
|
<d:quota-available-bytes>59182800697</d:quota-available-bytes>
|
|
|
|
<d:getetag>"613504b55db4f"</d:getetag>
|
|
|
|
</d:prop>
|
|
|
|
<d:status>HTTP/1.1 200 OK</d:status>
|
|
|
|
</d:propstat>
|
|
|
|
</d:response>
|
|
|
|
</d:multistatus>
|
|
|
|
EOF,
|
|
|
|
'assertionCount' => 1,
|
|
|
|
],
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dataProvider dataMultiStatus
|
|
|
|
*/
|
|
|
|
public function testMultistatus(string $xml, int $assertionCount)
|
|
|
|
{
|
|
|
|
$responseDoc = new \DOMDocument();
|
|
|
|
$responseDoc->loadXML($xml);
|
|
|
|
|
|
|
|
$xpath = new \DOMXPath($responseDoc);
|
|
|
|
$xpath->registerNamespace('d', 'DAV');
|
|
|
|
|
|
|
|
self::assertCount($assertionCount, $xpath->query('//d:multistatus/d:response'));
|
|
|
|
}
|
2021-09-07 20:38:57 +02:00
|
|
|
|
2021-10-05 10:05:17 +02:00
|
|
|
/**
|
|
|
|
* @inheritDoc
|
|
|
|
*/
|
2021-09-07 20:38:57 +02:00
|
|
|
protected function getInstance()
|
|
|
|
{
|
2021-10-05 10:05:17 +02:00
|
|
|
/** @var HTTPClientFactory $factory */
|
|
|
|
$factory = DI::getDice()->create(HTTPClientFactory::class);
|
2021-09-07 20:38:57 +02:00
|
|
|
|
2021-10-05 10:05:17 +02:00
|
|
|
return new WebDav(getenv('WEBDAV_URL'), [
|
|
|
|
getenv('WEBDAV_USERNAME'),
|
|
|
|
getenv('WEBDAV_PASSWORD'),
|
|
|
|
'basic',
|
|
|
|
], $factory->createClient(), new VoidLogger());
|
2021-09-07 20:38:57 +02:00
|
|
|
}
|
2021-08-25 23:47:18 +02:00
|
|
|
}
|