serverVersion = $this->createMock(ServerVersion::class);
$this->config = $this->createMock(IConfig::class);
$this->appConfig = $this->createMock(IAppConfig::class);
$clientService = $this->createMock(IClientService::class);
$this->serverVersion->method('getChannel')->willReturn('git');
$this->registry = $this->createMock(IRegistry::class);
$this->registry
->method('delegateHasValidSubscription')
->willReturn(false);
$this->logger = $this->createMock(LoggerInterface::class);
$this->updater = $this->getMockBuilder(VersionCheck::class)
->setMethods(['getUrlContent'])
->setConstructorArgs([
$this->serverVersion,
$clientService,
$this->config,
$this->appConfig,
$this->createMock(IUserManager::class),
$this->registry,
$this->logger,
])
->getMock();
}
/**
* @param string $baseUrl
* @return string
*/
private function buildUpdateUrl($baseUrl) {
$serverVersion = \OCP\Server::get(ServerVersion::class);
return $baseUrl . '?version=' . implode('x', $serverVersion->getVersion()) . 'xinstalledatx' . time() . 'x' . $serverVersion->getChannel() . 'xxx' . PHP_MAJOR_VERSION . 'x' . PHP_MINOR_VERSION . 'x' . PHP_RELEASE_VERSION . 'x0x0';
}
public function testCheckInCache(): void {
$expectedResult = [
'version' => '8.0.4.2',
'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
->expects($this->once())
->method('getSystemValueBool')
->with('has_internet_connection', true)
->willReturn(true);
$this->appConfig
->expects($this->once())
->method('getValueInt')
->with('core', 'lastupdatedat')
->willReturn(time());
$this->config
->expects($this->once())
->method('getAppValue')
->with('core', 'lastupdateResult')
->willReturn(json_encode($expectedResult));
$this->assertSame($expectedResult, $this->updater->check());
}
public function testCheckWithoutUpdateUrl(): void {
$expectedResult = [
'version' => '8.0.4.2',
'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' => '',
'autoupdater' => '0',
'eol' => '1',
];
$this->config
->expects($this->once())
->method('getSystemValueBool')
->with('has_internet_connection', true)
->willReturn(true);
$this->appConfig
->expects($this->exactly(2))
->method('getValueInt')
->with('core', 'lastupdatedat')
->willReturnOnConsecutiveCalls(
0,
time(),
);
$this->config
->expects($this->exactly(2))
->method('getAppValue')
->with('core', 'installedat')
->willReturn('installedat');
$this->config
->expects($this->once())
->method('getSystemValueString')
->with('updater.server.url', 'https://updates.nextcloud.com/updater_server/')
->willReturnArgument(1);
$this->appConfig
->expects($this->once())
->method('setValueInt')
->with('core', 'lastupdatedat', time());
$this->config
->expects($this->once())
->method('setAppValue')
->with('core', 'lastupdateResult', json_encode($expectedResult));
$updateXml = '
8.0.4.2
ownCloud 8.0.4
https://download.example.org/community/owncloud-8.0.4.zip
http://doc.example.org/server/8.0/admin_manual/maintenance/upgrade.html
0
1
';
$this->updater
->expects($this->once())
->method('getUrlContent')
->with($this->buildUpdateUrl('https://updates.nextcloud.com/updater_server/'))
->willReturn($updateXml);
$this->assertSame($expectedResult, $this->updater->check());
}
public function testCheckWithInvalidXml(): void {
$this->config
->expects($this->once())
->method('getSystemValueBool')
->with('has_internet_connection', true)
->willReturn(true);
$this->appConfig
->expects($this->exactly(2))
->method('getValueInt')
->with('core', 'lastupdatedat')
->willReturnOnConsecutiveCalls(
0,
time(),
);
$this->config
->expects($this->exactly(2))
->method('getAppValue')
->with('core', 'installedat')
->willReturn('installedat');
$this->config
->expects($this->once())
->method('getSystemValueString')
->with('updater.server.url', 'https://updates.nextcloud.com/updater_server/')
->willReturnArgument(1);
$this->appConfig
->expects($this->once())
->method('setValueInt')
->with('core', 'lastupdatedat', time());
$this->config
->expects($this->once())
->method('setAppValue')
->with('core', 'lastupdateResult', $this->isType('string'));
$updateXml = 'Invalid XML Response!';
$this->updater
->expects($this->once())
->method('getUrlContent')
->with($this->buildUpdateUrl('https://updates.nextcloud.com/updater_server/'))
->willReturn($updateXml);
$this->assertSame([], $this->updater->check());
}
public function testCheckWithEmptyValidXmlResponse(): void {
$expectedResult = [
'version' => '',
'versionstring' => '',
'url' => '',
'web' => '',
'changes' => '',
'autoupdater' => '',
'eol' => '0',
];
$this->config
->expects($this->once())
->method('getSystemValueBool')
->with('has_internet_connection', true)
->willReturn(true);
$this->appConfig
->expects($this->exactly(2))
->method('getValueInt')
->with('core', 'lastupdatedat')
->willReturnOnConsecutiveCalls(
0,
time(),
);
$this->config
->expects($this->exactly(2))
->method('getAppValue')
->with('core', 'installedat')
->willReturn('installedat');
$this->config
->expects($this->once())
->method('getSystemValueString')
->with('updater.server.url', 'https://updates.nextcloud.com/updater_server/')
->willReturnArgument(1);
$this->appConfig
->expects($this->once())
->method('setValueInt')
->with('core', 'lastupdatedat', time());
$this->config
->expects($this->once())
->method('setAppValue')
->with('core', 'lastupdateResult', $this->isType('string'));
$updateXml = '
';
$this->updater
->expects($this->once())
->method('getUrlContent')
->with($this->buildUpdateUrl('https://updates.nextcloud.com/updater_server/'))
->willReturn($updateXml);
$this->assertSame($expectedResult, $this->updater->check());
}
public function testCheckWithEmptyInvalidXmlResponse(): void {
$expectedResult = [];
$this->config
->expects($this->once())
->method('getSystemValueBool')
->with('has_internet_connection', true)
->willReturn(true);
$this->appConfig
->expects($this->exactly(2))
->method('getValueInt')
->with('core', 'lastupdatedat')
->willReturnOnConsecutiveCalls(
0,
time(),
);
$this->config
->expects($this->exactly(2))
->method('getAppValue')
->with('core', 'installedat')
->willReturn('installedat');
$this->config
->expects($this->once())
->method('getSystemValueString')
->with('updater.server.url', 'https://updates.nextcloud.com/updater_server/')
->willReturnArgument(1);
$this->appConfig
->expects($this->once())
->method('setValueInt')
->with('core', 'lastupdatedat', time());
$this->config
->expects($this->once())
->method('setAppValue')
->with('core', 'lastupdateResult', $this->isType('string'));
$updateXml = '';
$this->updater
->expects($this->once())
->method('getUrlContent')
->with($this->buildUpdateUrl('https://updates.nextcloud.com/updater_server/'))
->willReturn($updateXml);
$this->assertSame($expectedResult, $this->updater->check());
}
public function testCheckWithMissingAttributeXmlResponse(): void {
$expectedResult = [
'version' => '',
'versionstring' => '',
'url' => '',
'web' => '',
'changes' => '',
'autoupdater' => '',
'eol' => '0',
];
$this->config
->expects($this->once())
->method('getSystemValueBool')
->with('has_internet_connection', true)
->willReturn(true);
$this->appConfig
->expects($this->exactly(2))
->method('getValueInt')
->with('core', 'lastupdatedat')
->willReturnOnConsecutiveCalls(
0,
time(),
);
$this->config
->expects($this->exactly(2))
->method('getAppValue')
->with('core', 'installedat')
->willReturn('installedat');
$this->config
->expects($this->once())
->method('getSystemValueString')
->with('updater.server.url', 'https://updates.nextcloud.com/updater_server/')
->willReturnArgument(1);
$this->appConfig
->expects($this->once())
->method('setValueInt')
->with('core', 'lastupdatedat', time());
$this->config
->expects($this->once())
->method('setAppValue')
->with('core', 'lastupdateResult', $this->isType('string'));
// missing autoupdater element should still not fail
$updateXml = '
';
$this->updater
->expects($this->once())
->method('getUrlContent')
->with($this->buildUpdateUrl('https://updates.nextcloud.com/updater_server/'))
->willReturn($updateXml);
$this->assertSame($expectedResult, $this->updater->check());
}
public function testNoInternet(): void {
$this->config
->expects($this->once())
->method('getSystemValueBool')
->with('has_internet_connection', true)
->willReturn(false);
$this->assertFalse($this->updater->check());
}
}