From 773e9d05546bff687c227167381ab09f40383193 Mon Sep 17 00:00:00 2001 From: Morris Jobke Date: Fri, 24 Apr 2020 18:00:49 +0200 Subject: [PATCH] Add tests for update notification controller for non-default updater server URL Signed-off-by: Morris Jobke --- .../updatenotification/lib/Settings/Admin.php | 2 +- .../tests/Settings/AdminTest.php | 170 ++++++++++++++++++ 2 files changed, 171 insertions(+), 1 deletion(-) diff --git a/apps/updatenotification/lib/Settings/Admin.php b/apps/updatenotification/lib/Settings/Admin.php index f623e69e02e..43ec4dcb99e 100644 --- a/apps/updatenotification/lib/Settings/Admin.php +++ b/apps/updatenotification/lib/Settings/Admin.php @@ -95,7 +95,7 @@ class Admin implements ISettings { $defaultCustomerUpdateServerURLPrefix = 'https://updates.nextcloud.com/customers/'; $isDefaultUpdateServerURL = $updateServerURL === $defaultUpdateServerURL - || $updateServerURL === substr($updateServerURL, 0, strlen($defaultCustomerUpdateServerURLPrefix)); + || strpos($updateServerURL, $defaultCustomerUpdateServerURLPrefix) === 0; $hasValidSubscription = $this->subscriptionRegistry->delegateHasValidSubscription(); diff --git a/apps/updatenotification/tests/Settings/AdminTest.php b/apps/updatenotification/tests/Settings/AdminTest.php index 7ac404be57f..faed2c23a8e 100644 --- a/apps/updatenotification/tests/Settings/AdminTest.php +++ b/apps/updatenotification/tests/Settings/AdminTest.php @@ -158,6 +158,176 @@ class AdminTest extends TestCase { $this->assertEquals($expected, $this->admin->getForm()); } + public function testGetFormWithUpdateAndChangedUpdateServer() { + $channels = [ + 'daily', + 'beta', + 'stable', + 'production', + ]; + $currentChannel = Util::getChannel(); + if ($currentChannel === 'git') { + $channels[] = 'git'; + } + + $this->config + ->expects($this->exactly(2)) + ->method('getAppValue') + ->willReturnMap([ + ['core', 'lastupdatedat', '', '12345'], + ['updatenotification', 'notify_groups', '["admin"]', '["admin"]'], + ]); + $this->config + ->expects($this->once()) + ->method('getSystemValue') + ->with('updater.server.url', 'https://updates.nextcloud.com/updater_server/') + ->willReturn('https://updates.nextcloud.com/updater_server_changed/'); + $this->dateTimeFormatter + ->expects($this->once()) + ->method('formatDateTime') + ->with('12345') + ->willReturn('LastCheckedReturnValue'); + $this->updateChecker + ->expects($this->once()) + ->method('getUpdateState') + ->willReturn([ + 'updateAvailable' => true, + 'updateVersion' => '8.1.2', + 'updateVersionString' => 'Nextcloud 8.1.2', + 'downloadLink' => 'https://downloads.nextcloud.org/server', + 'changes' => [], + 'updaterEnabled' => true, + 'versionIsEol' => false, + ]); + + $group = $this->createMock(IGroup::class); + $group->expects($this->any()) + ->method('getDisplayName') + ->willReturn('Administrators'); + $group->expects($this->any()) + ->method('getGID') + ->willReturn('admin'); + $this->groupManager->expects($this->once()) + ->method('get') + ->with('admin') + ->willReturn($group); + + $this->subscriptionRegistry + ->expects($this->once()) + ->method('delegateHasValidSubscription') + ->willReturn(true); + + $params = [ + 'json' => json_encode([ + 'isNewVersionAvailable' => true, + 'isUpdateChecked' => true, + 'lastChecked' => 'LastCheckedReturnValue', + 'currentChannel' => Util::getChannel(), + 'channels' => $channels, + 'newVersion' => '8.1.2', + 'newVersionString' => 'Nextcloud 8.1.2', + 'downloadLink' => 'https://downloads.nextcloud.org/server', + 'changes' => [], + 'updaterEnabled' => true, + 'versionIsEol' => false, + 'isDefaultUpdateServerURL' => false, + 'updateServerURL' => 'https://updates.nextcloud.com/updater_server_changed/', + 'notifyGroups' => [ + ['value' => 'admin', 'label' => 'Administrators'], + ], + 'hasValidSubscription' => true, + ]), + ]; + + $expected = new TemplateResponse('updatenotification', 'admin', $params, ''); + $this->assertEquals($expected, $this->admin->getForm()); + } + + public function testGetFormWithUpdateAndCustomersUpdateServer() { + $channels = [ + 'daily', + 'beta', + 'stable', + 'production', + ]; + $currentChannel = Util::getChannel(); + if ($currentChannel === 'git') { + $channels[] = 'git'; + } + + $this->config + ->expects($this->exactly(2)) + ->method('getAppValue') + ->willReturnMap([ + ['core', 'lastupdatedat', '', '12345'], + ['updatenotification', 'notify_groups', '["admin"]', '["admin"]'], + ]); + $this->config + ->expects($this->once()) + ->method('getSystemValue') + ->with('updater.server.url', 'https://updates.nextcloud.com/updater_server/') + ->willReturn('https://updates.nextcloud.com/customers/ABC-DEF/'); + $this->dateTimeFormatter + ->expects($this->once()) + ->method('formatDateTime') + ->with('12345') + ->willReturn('LastCheckedReturnValue'); + $this->updateChecker + ->expects($this->once()) + ->method('getUpdateState') + ->willReturn([ + 'updateAvailable' => true, + 'updateVersion' => '8.1.2', + 'updateVersionString' => 'Nextcloud 8.1.2', + 'downloadLink' => 'https://downloads.nextcloud.org/server', + 'changes' => [], + 'updaterEnabled' => true, + 'versionIsEol' => false, + ]); + + $group = $this->createMock(IGroup::class); + $group->expects($this->any()) + ->method('getDisplayName') + ->willReturn('Administrators'); + $group->expects($this->any()) + ->method('getGID') + ->willReturn('admin'); + $this->groupManager->expects($this->once()) + ->method('get') + ->with('admin') + ->willReturn($group); + + $this->subscriptionRegistry + ->expects($this->once()) + ->method('delegateHasValidSubscription') + ->willReturn(true); + + $params = [ + 'json' => json_encode([ + 'isNewVersionAvailable' => true, + 'isUpdateChecked' => true, + 'lastChecked' => 'LastCheckedReturnValue', + 'currentChannel' => Util::getChannel(), + 'channels' => $channels, + 'newVersion' => '8.1.2', + 'newVersionString' => 'Nextcloud 8.1.2', + 'downloadLink' => 'https://downloads.nextcloud.org/server', + 'changes' => [], + 'updaterEnabled' => true, + 'versionIsEol' => false, + 'isDefaultUpdateServerURL' => true, + 'updateServerURL' => 'https://updates.nextcloud.com/customers/ABC-DEF/', + 'notifyGroups' => [ + ['value' => 'admin', 'label' => 'Administrators'], + ], + 'hasValidSubscription' => true, + ]), + ]; + + $expected = new TemplateResponse('updatenotification', 'admin', $params, ''); + $this->assertEquals($expected, $this->admin->getForm()); + } + public function testGetSection() { $this->assertSame('overview', $this->admin->getSection()); -- 2.39.5