mirror of
https://github.com/nextcloud/server.git
synced 2025-02-11 11:39:27 +00:00
181 lines
5.8 KiB
PHP
181 lines
5.8 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
*/
|
|
|
|
namespace OCA\Theming\Tests\Migration;
|
|
|
|
use NCU\Config\IUserConfig;
|
|
use OCA\Theming\Migration\Version2006Date20240905111627;
|
|
use OCP\BackgroundJob\IJobList;
|
|
use OCP\IAppConfig;
|
|
use OCP\IDBConnection;
|
|
use OCP\IUserManager;
|
|
use OCP\Migration\IOutput;
|
|
use PHPUnit\Framework\MockObject\MockObject;
|
|
use Test\TestCase;
|
|
|
|
/**
|
|
* @group DB
|
|
*/
|
|
class Version2006Date20240905111627Test extends TestCase {
|
|
|
|
private IAppConfig&MockObject $appConfig;
|
|
private IDBConnection&MockObject $connection;
|
|
private IJobList&MockObject $jobList;
|
|
private Version2006Date20240905111627 $migration;
|
|
|
|
protected function setUp(): void {
|
|
parent::setUp();
|
|
|
|
$this->appConfig = $this->createMock(IAppConfig::class);
|
|
$this->connection = $this->createMock(IDBConnection::class);
|
|
$this->jobList = $this->createMock(IJobList::class);
|
|
$this->migration = new Version2006Date20240905111627(
|
|
$this->jobList,
|
|
$this->appConfig,
|
|
$this->connection,
|
|
);
|
|
}
|
|
|
|
public function testRestoreSystemColors(): void {
|
|
$this->appConfig->expects(self::once())
|
|
->method('getValueString')
|
|
->with('theming', 'color', '')
|
|
->willReturn('ffab00');
|
|
$this->appConfig->expects(self::once())
|
|
->method('getValueBool')
|
|
->with('theming', 'disable-user-theming')
|
|
->willReturn(true);
|
|
|
|
// expect the color value to be deleted
|
|
$this->appConfig->expects(self::once())
|
|
->method('deleteKey')
|
|
->with('theming', 'color');
|
|
// expect the correct calls to setValueString (setting the new values)
|
|
$setValueCalls = [];
|
|
$this->appConfig->expects(self::exactly(2))
|
|
->method('setValueString')
|
|
->willReturnCallback(function () use (&$setValueCalls) {
|
|
$setValueCalls[] = func_get_args();
|
|
return true;
|
|
});
|
|
|
|
$output = $this->createMock(IOutput::class);
|
|
$this->migration->changeSchema($output, fn () => null, []);
|
|
|
|
$this->assertEquals([
|
|
['theming', 'background_color', 'ffab00', false, false],
|
|
['theming', 'primary_color', 'ffab00', false, false],
|
|
], $setValueCalls);
|
|
}
|
|
|
|
/**
|
|
* @group DB
|
|
*/
|
|
public function testRestoreUserColors(): void {
|
|
$this->appConfig->expects(self::once())
|
|
->method('getValueString')
|
|
->with('theming', 'color', '')
|
|
->willReturn('');
|
|
$this->appConfig->expects(self::once())
|
|
->method('getValueBool')
|
|
->with('theming', 'disable-user-theming')
|
|
->willReturn(false);
|
|
|
|
// Create a user
|
|
$manager = \OCP\Server::get(IUserManager::class);
|
|
$user = $manager->createUser('theming_legacy', 'theming_legacy');
|
|
self::assertNotFalse($user);
|
|
// Set the users theming value to legacy key
|
|
$config = \OCP\Server::get(IUserConfig::class);
|
|
$config->setValueString('theming_legacy', 'theming', 'background_color', 'ffab00');
|
|
|
|
// expect some output
|
|
$output = $this->createMock(IOutput::class);
|
|
$output->expects(self::exactly(3))
|
|
->method('info')
|
|
->willReturnCallback(fn ($txt) => match($txt) {
|
|
'No custom system color configured - skipping' => true,
|
|
'Restoring user primary color' => true,
|
|
'Primary color of users restored' => true,
|
|
default => self::fail('output.info called with unexpected argument: ' . $txt)
|
|
});
|
|
// Create the migration class
|
|
$migration = new Version2006Date20240905111627(
|
|
$this->jobList,
|
|
$this->appConfig,
|
|
\OCP\Server::get(IDBConnection::class),
|
|
);
|
|
// Run the migration
|
|
$migration->changeSchema($output, fn () => null, []);
|
|
|
|
// See new value
|
|
$config->clearCache('theming_legacy');
|
|
$newValue = $config->getValueString('theming_legacy', 'theming', 'primary_color');
|
|
self::assertEquals('ffab00', $newValue);
|
|
|
|
// cleanup
|
|
$user->delete();
|
|
}
|
|
|
|
/**
|
|
* Ensure only users with background color but no primary color are migrated
|
|
* @group DB
|
|
*/
|
|
public function testRestoreUserColorsWithConflicts(): void {
|
|
$this->appConfig->expects(self::once())
|
|
->method('getValueString')
|
|
->with('theming', 'color', '')
|
|
->willReturn('');
|
|
$this->appConfig->expects(self::once())
|
|
->method('getValueBool')
|
|
->with('theming', 'disable-user-theming')
|
|
->willReturn(false);
|
|
|
|
// Create a user
|
|
$manager = \OCP\Server::get(IUserManager::class);
|
|
$legacyUser = $manager->createUser('theming_legacy', 'theming_legacy');
|
|
self::assertNotFalse($legacyUser);
|
|
$user = $manager->createUser('theming_no_legacy', 'theming_no_legacy');
|
|
self::assertNotFalse($user);
|
|
// Set the users theming value to legacy key
|
|
$config = \OCP\Server::get(IUserConfig::class);
|
|
$config->setValueString($user->getUID(), 'theming', 'primary_color', '999999');
|
|
$config->setValueString($user->getUID(), 'theming', 'background_color', '111111');
|
|
$config->setValueString($legacyUser->getUID(), 'theming', 'background_color', 'ffab00');
|
|
|
|
// expect some output
|
|
$output = $this->createMock(IOutput::class);
|
|
$output->expects(self::exactly(3))
|
|
->method('info')
|
|
->willReturnCallback(fn ($txt) => match($txt) {
|
|
'No custom system color configured - skipping' => true,
|
|
'Restoring user primary color' => true,
|
|
'Primary color of users restored' => true,
|
|
default => self::fail('output.info called with unexpected argument: ' . $txt)
|
|
});
|
|
// Create the migration class
|
|
$migration = new Version2006Date20240905111627(
|
|
$this->jobList,
|
|
$this->appConfig,
|
|
\OCP\Server::get(IDBConnection::class),
|
|
);
|
|
// Run the migration
|
|
$migration->changeSchema($output, fn () => null, []);
|
|
|
|
// See new value of only the legacy user
|
|
$config->clearCacheAll();
|
|
self::assertEquals('111111', $config->getValueString($user->getUID(), 'theming', 'background_color'));
|
|
self::assertEquals('999999', $config->getValueString($user->getUID(), 'theming', 'primary_color'));
|
|
self::assertEquals('ffab00', $config->getValueString($legacyUser->getUID(), 'theming', 'primary_color'));
|
|
|
|
// cleanup
|
|
$legacyUser->delete();
|
|
$user->delete();
|
|
}
|
|
}
|