<?php namespace Friendica\Addon\webdav_storage\tests; use Friendica\Addon\webdav_storage\src\WebDav; use Friendica\DI; use Friendica\Network\HTTPClient\Factory\HTTPClientFactory; use Friendica\Test\src\Core\Storage\StorageTest; use Friendica\Core\Logger\Type\VoidLogger; /// @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'; class WebDavTest extends StorageTest { 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')); } /** * @inheritDoc */ protected function getInstance() { /** @var HTTPClientFactory $factory */ $factory = DI::getDice()->create(HTTPClientFactory::class); return new WebDav(getenv('WEBDAV_URL'), [ getenv('WEBDAV_USERNAME'), getenv('WEBDAV_PASSWORD'), 'basic', ], $factory->createClient(), new VoidLogger()); } }