Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur Schiwon <blizzz@arthur-schiwon.de>2018-06-26 18:25:37 +0300
committerMorris Jobke <hey@morrisjobke.de>2018-06-29 10:11:04 +0300
commit25d9c3e52921b107383e5d05f3649178bd7cd1cf (patch)
tree837fb580784174aa14a1d412056b1e9bf4f61772 /tests/lib/Updater
parent4ed8ee1c1e8ada0e5d26f6e014896accc89d4d6a (diff)
adjust backend and gui to update and changelog server
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
Diffstat (limited to 'tests/lib/Updater')
-rw-r--r--tests/lib/Updater/ChangesCheckTest.php344
-rw-r--r--tests/lib/Updater/VersionCheckTest.php10
2 files changed, 348 insertions, 6 deletions
diff --git a/tests/lib/Updater/ChangesCheckTest.php b/tests/lib/Updater/ChangesCheckTest.php
new file mode 100644
index 00000000000..5f7e8ad4f0a
--- /dev/null
+++ b/tests/lib/Updater/ChangesCheckTest.php
@@ -0,0 +1,344 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2018 Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Test\Updater;
+
+use OC\Updater\ChangesCheck;
+use OC\Updater\ChangesMapper;
+use OC\Updater\ChangesResult;
+use OCP\Http\Client\IClient;
+use OCP\Http\Client\IClientService;
+use OCP\Http\Client\IResponse;
+use OCP\ILogger;
+use const Solarium\QueryType\Select\Query\Component\Facet\INCLUDE_LOWER;
+use Test\TestCase;
+
+class ChangesCheckTest extends TestCase {
+ /** @var IClientService|\PHPUnit_Framework_MockObject_MockObject */
+ protected $clientService;
+
+ /** @var ChangesCheck */
+ protected $checker;
+
+ /** @var ChangesMapper|\PHPUnit_Framework_MockObject_MockObject */
+ protected $mapper;
+
+ /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */
+ protected $logger;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->clientService = $this->createMock(IClientService::class);
+ $this->mapper = $this->createMock(ChangesMapper::class);
+ $this->logger = $this->createMock(ILogger::class);
+
+ $this->checker = new ChangesCheck($this->clientService, $this->mapper, $this->logger);
+ }
+
+ public function statusCodeProvider():array {
+ return [
+ [200, ChangesCheck::RESPONSE_HAS_CONTENT],
+ [304, ChangesCheck::RESPONSE_USE_CACHE],
+ [404, ChangesCheck::RESPONSE_NO_CONTENT],
+ [418, ChangesCheck::RESPONSE_NO_CONTENT],
+ ];
+ }
+
+ /**
+ * @dataProvider statusCodeProvider
+ */
+ public function testEvaluateResponse(int $statusCode, int $expected) {
+ $response = $this->createMock(IResponse::class);
+ $response->expects($this->atLeastOnce())
+ ->method('getStatusCode')
+ ->willReturn($statusCode);
+
+ if(!in_array($statusCode, [200, 304, 404])) {
+ $this->logger->expects($this->once())
+ ->method('debug');
+ }
+
+ $evaluation = $this->invokePrivate($this->checker, 'evaluateResponse', [$response]);
+ $this->assertSame($expected, $evaluation);
+ }
+
+ public function testCacheResultInsert() {
+ $version = '13.0.4';
+ $entry = $this->createMock(ChangesResult::class);
+ $entry->expects($this->exactly(2))
+ ->method('__call')
+ ->withConsecutive(['getVersion'], ['setVersion', [$version]])
+ ->willReturnOnConsecutiveCalls('', null);
+
+ $this->mapper->expects($this->once())
+ ->method('insert');
+ $this->mapper->expects($this->never())
+ ->method('update');
+
+ $this->invokePrivate($this->checker, 'cacheResult', [$entry, $version]);
+ }
+
+ public function testCacheResultUpdate() {
+ $version = '13.0.4';
+ $entry = $this->createMock(ChangesResult::class);
+ $entry->expects($this->once())
+ ->method('__call')
+ ->willReturn($version);
+
+ $this->mapper->expects($this->never())
+ ->method('insert');
+ $this->mapper->expects($this->once())
+ ->method('update');
+
+ $this->invokePrivate($this->checker, 'cacheResult', [$entry, $version]);
+ }
+
+ public function changesXMLProvider(): array {
+ return [
+ [ # 0 - full example
+ '<?xml version="1.0" encoding="utf-8" ?>
+<release xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://updates.nextcloud.com/changelog_server/schema.xsd"
+ version="13.0.0">
+ <changelog href="https://nextcloud.com/changelog/#13-0-0"/>
+ <whatsNew lang="en">
+ <regular>
+ <item>Refined user interface</item>
+ <item>End-to-end Encryption</item>
+ <item>Video and Text Chat</item>
+ </regular>
+ <admin>
+ <item>Changes to the Nginx configuration</item>
+ <item>Theming: CSS files were consolidated</item>
+ </admin>
+ </whatsNew>
+ <whatsNew lang="de">
+ <regular>
+ <item>Überarbeitete Benutzerschnittstelle</item>
+ <item>Ende-zu-Ende Verschlüsselung</item>
+ <item>Video- und Text-Chat</item>
+ </regular>
+ <admin>
+ <item>Änderungen an der Nginx Konfiguration</item>
+ <item>Theming: CSS Dateien wurden konsolidiert</item>
+ </admin>
+ </whatsNew>
+</release>',
+ [
+ 'changelogURL' => 'https://nextcloud.com/changelog/#13-0-0',
+ 'whatsNew' => [
+ 'en' => [
+ 'regular' => [
+ 'Refined user interface',
+ 'End-to-end Encryption',
+ 'Video and Text Chat'
+ ],
+ 'admin' => [
+ 'Changes to the Nginx configuration',
+ 'Theming: CSS files were consolidated'
+ ],
+ ],
+ 'de' => [
+ 'regular' => [
+ 'Überarbeitete Benutzerschnittstelle',
+ 'Ende-zu-Ende Verschlüsselung',
+ 'Video- und Text-Chat'
+ ],
+ 'admin' => [
+ 'Änderungen an der Nginx Konfiguration',
+ 'Theming: CSS Dateien wurden konsolidiert'
+ ],
+ ],
+ ],
+ ]
+ ],
+ [ # 1- admin part not translated
+ '<?xml version="1.0" encoding="utf-8" ?>
+<release xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://updates.nextcloud.com/changelog_server/schema.xsd"
+ version="13.0.0">
+ <changelog href="https://nextcloud.com/changelog/#13-0-0"/>
+ <whatsNew lang="en">
+ <regular>
+ <item>Refined user interface</item>
+ <item>End-to-end Encryption</item>
+ <item>Video and Text Chat</item>
+ </regular>
+ <admin>
+ <item>Changes to the Nginx configuration</item>
+ <item>Theming: CSS files were consolidated</item>
+ </admin>
+ </whatsNew>
+ <whatsNew lang="de">
+ <regular>
+ <item>Überarbeitete Benutzerschnittstelle</item>
+ <item>Ende-zu-Ende Verschlüsselung</item>
+ <item>Video- und Text-Chat</item>
+ </regular>
+ </whatsNew>
+</release>',
+ [
+ 'changelogURL' => 'https://nextcloud.com/changelog/#13-0-0',
+ 'whatsNew' => [
+ 'en' => [
+ 'regular' => [
+ 'Refined user interface',
+ 'End-to-end Encryption',
+ 'Video and Text Chat'
+ ],
+ 'admin' => [
+ 'Changes to the Nginx configuration',
+ 'Theming: CSS files were consolidated'
+ ],
+ ],
+ 'de' => [
+ 'regular' => [
+ 'Überarbeitete Benutzerschnittstelle',
+ 'Ende-zu-Ende Verschlüsselung',
+ 'Video- und Text-Chat'
+ ],
+ 'admin' => [
+ ],
+ ],
+ ],
+ ]
+ ],
+ [ # 2 - minimal set
+ '<?xml version="1.0" encoding="utf-8" ?>
+<release xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://updates.nextcloud.com/changelog_server/schema.xsd"
+ version="13.0.0">
+ <changelog href="https://nextcloud.com/changelog/#13-0-0"/>
+ <whatsNew lang="en">
+ <regular>
+ <item>Refined user interface</item>
+ <item>End-to-end Encryption</item>
+ <item>Video and Text Chat</item>
+ </regular>
+ </whatsNew>
+</release>',
+ [
+ 'changelogURL' => 'https://nextcloud.com/changelog/#13-0-0',
+ 'whatsNew' => [
+ 'en' => [
+ 'regular' => [
+ 'Refined user interface',
+ 'End-to-end Encryption',
+ 'Video and Text Chat'
+ ],
+ 'admin' => [],
+ ],
+ ],
+ ]
+ ],
+ [ # 3 - minimal set (procrastinator edition)
+ '<?xml version="1.0" encoding="utf-8" ?>
+<release xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://updates.nextcloud.com/changelog_server/schema.xsd"
+ version="13.0.0">
+ <changelog href="https://nextcloud.com/changelog/#13-0-0"/>
+ <whatsNew lang="en">
+ <regular>
+ <item>Write this tomorrow</item>
+ </regular>
+ </whatsNew>
+</release>',
+ [
+ 'changelogURL' => 'https://nextcloud.com/changelog/#13-0-0',
+ 'whatsNew' => [
+ 'en' => [
+ 'regular' => [
+ 'Write this tomorrow',
+ ],
+ 'admin' => [],
+ ],
+ ],
+ ]
+ ],
+ ];
+ }
+
+ /**
+ * @dataProvider changesXMLProvider
+ */
+ public function testExtractData(string $body, array $expected) {
+ $actual = $this->invokePrivate($this->checker, 'extractData', [$body]);
+ $this->assertSame($expected, $actual);
+ }
+
+ public function etagProvider() {
+ return [
+ [''],
+ ['a27aab83d8205d73978435076e53d143']
+ ];
+ }
+
+ /**
+ * @dataProvider etagProvider
+ */
+ public function testQueryChangesServer(string $etag) {
+ $uri = 'https://changes.nextcloud.server/?13.0.5';
+ $entry = $this->createMock(ChangesResult::class);
+ $entry->expects($this->any())
+ ->method('__call')
+ ->willReturn($etag);
+
+ $expectedHeaders = $etag === '' ? [] : ['If-None-Match: ' . $etag];
+
+ $client = $this->createMock(IClient::class);
+ $client->expects($this->once())
+ ->method('get')
+ ->with($uri, ['headers' => $expectedHeaders])
+ ->willReturn($this->createMock(IResponse::class));
+
+ $this->clientService->expects($this->once())
+ ->method('newClient')
+ ->willReturn($client);
+
+ $response = $this->invokePrivate($this->checker, 'queryChangesServer', [$uri, $entry]);
+ $this->assertInstanceOf(IResponse::class, $response);
+ }
+
+ public function versionProvider(): array {
+ return [
+ ['13.0.7', '13.0.7'],
+ ['13.0.7.3', '13.0.7'],
+ ['13.0.7.3.42', '13.0.7'],
+ ['13.0', '13.0.0'],
+ ['13', '13.0.0'],
+ ['', '0.0.0'],
+ ];
+ }
+
+ /**
+ * @dataProvider versionProvider
+ */
+ public function testNormalizeVersion(string $input, string $expected) {
+ $normalized = $this->invokePrivate($this->checker, 'normalizeVersion', [$input]);
+ $this->assertSame($expected, $normalized);
+ }
+}
diff --git a/tests/lib/Updater/VersionCheckTest.php b/tests/lib/Updater/VersionCheckTest.php
index c7165b34efe..6da4fd2c3b2 100644
--- a/tests/lib/Updater/VersionCheckTest.php
+++ b/tests/lib/Updater/VersionCheckTest.php
@@ -62,6 +62,7 @@ class VersionCheckTest extends \Test\TestCase {
'versionstring' => 'ownCloud 8.0.4',
'url' => 'https://download.example.org/community/owncloud-8.0.4.zip',
'web' => 'http://doc.example.org/server/8.0/admin_manual/maintenance/upgrade.html',
+ 'changes' => '',
];
$this->config
@@ -84,8 +85,7 @@ class VersionCheckTest extends \Test\TestCase {
'versionstring' => 'ownCloud 8.0.4',
'url' => 'https://download.example.org/community/owncloud-8.0.4.zip',
'web' => 'http://doc.example.org/server/8.0/admin_manual/maintenance/upgrade.html',
- 'changelog' => '',
- 'whatsNew' => '',
+ 'changes' => '',
'autoupdater' => '0',
'eol' => '1',
];
@@ -183,8 +183,7 @@ class VersionCheckTest extends \Test\TestCase {
'versionstring' => '',
'url' => '',
'web' => '',
- 'changelog' => '',
- 'whatsNew' => '',
+ 'changes' => '',
'autoupdater' => '',
'eol' => '0',
];
@@ -279,8 +278,7 @@ class VersionCheckTest extends \Test\TestCase {
'versionstring' => '',
'url' => '',
'web' => '',
- 'changelog' => '',
- 'whatsNew' => '',
+ 'changes' => '',
'autoupdater' => '',
'eol' => '0',
];