Skip to content

Commit

Permalink
Merge pull request #45875 from nextcloud/fix/guest-enforce-theme
Browse files Browse the repository at this point in the history
fix(theming): also apply enforced theme for guests
  • Loading branch information
susnux committed Jun 17, 2024
2 parents f15adce + 88e83d9 commit b34e2a1
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 8 deletions.
30 changes: 22 additions & 8 deletions apps/theming/lib/Service/ThemesService.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,24 +16,22 @@
use OCP\IConfig;
use OCP\IUser;
use OCP\IUserSession;
use Psr\Log\LoggerInterface;

class ThemesService {
private IUserSession $userSession;
private IConfig $config;

/** @var ITheme[] */
private array $themesProviders;

public function __construct(IUserSession $userSession,
IConfig $config,
DefaultTheme $defaultTheme,
public function __construct(
private IUserSession $userSession,
private IConfig $config,
private LoggerInterface $logger,
private DefaultTheme $defaultTheme,
LightTheme $lightTheme,
DarkTheme $darkTheme,
HighContrastTheme $highContrastTheme,
DarkHighContrastTheme $darkHighContrastTheme,
DyslexiaFont $dyslexiaFont) {
$this->userSession = $userSession;
$this->config = $config;

// Register themes
$this->themesProviders = [
Expand All @@ -52,6 +50,22 @@ public function __construct(IUserSession $userSession,
* @return ITheme[]
*/
public function getThemes(): array {
// Enforced theme if configured
$enforcedTheme = $this->config->getSystemValueString('enforce_theme', '');
if ($enforcedTheme !== '') {
if (!isset($this->themesProviders[$enforcedTheme])) {
$this->logger->error('Enforced theme not found', ['theme' => $enforcedTheme]);
return $this->themesProviders;
}

$defaultTheme = $this->themesProviders[$this->defaultTheme->getId()];
$theme = $this->themesProviders[$enforcedTheme];
return [
$defaultTheme->getId() => $defaultTheme,
$theme->getId() => $theme,
];
}

return $this->themesProviders;
}

Expand Down
42 changes: 42 additions & 0 deletions apps/theming/tests/Service/ThemesServiceTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
use OCP\IUser;
use OCP\IUserSession;
use PHPUnit\Framework\MockObject\MockObject;
use Psr\Log\LoggerInterface;
use Test\TestCase;

class ThemesServiceTest extends TestCase {
Expand All @@ -34,6 +35,9 @@ class ThemesServiceTest extends TestCase {
private $userSession;
/** @var IConfig|MockObject */
private $config;
/** @var LoggerInterface|MockObject */
private $logger;

/** @var ThemingDefaults|MockObject */
private $themingDefaults;

Expand All @@ -43,6 +47,7 @@ class ThemesServiceTest extends TestCase {
protected function setUp(): void {
$this->userSession = $this->createMock(IUserSession::class);
$this->config = $this->createMock(IConfig::class);
$this->logger = $this->createMock(LoggerInterface::class);
$this->themingDefaults = $this->createMock(ThemingDefaults::class);

$this->themingDefaults->expects($this->any())
Expand All @@ -58,6 +63,7 @@ protected function setUp(): void {
$this->themesService = new ThemesService(
$this->userSession,
$this->config,
$this->logger,
...array_values($this->themes)
);

Expand All @@ -76,6 +82,42 @@ public function testGetThemes() {
$this->assertEquals($expected, array_keys($this->themesService->getThemes()));
}

public function testGetThemesEnforced() {
$this->config->expects($this->once())
->method('getSystemValueString')
->with('enforce_theme', '')
->willReturn('dark');
$this->logger->expects($this->never())
->method('error');

$expected = [
'default',
'dark',
];

$this->assertEquals($expected, array_keys($this->themesService->getThemes()));
}

public function testGetThemesEnforcedInvalid() {
$this->config->expects($this->once())
->method('getSystemValueString')
->with('enforce_theme', '')
->willReturn('invalid');
$this->logger->expects($this->once())
->method('error')
->with('Enforced theme not found', ['theme' => 'invalid']);

$expected = [
'default',
'light',
'dark',
'light-highcontrast',
'dark-highcontrast',
'opendyslexic',
];

$this->assertEquals($expected, array_keys($this->themesService->getThemes()));
}

public function dataTestEnableTheme() {
return [
Expand Down

0 comments on commit b34e2a1

Please sign in to comment.