aboutsummaryrefslogtreecommitdiffstats
path: root/tests/lib/Template/ResourceLocatorTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/lib/Template/ResourceLocatorTest.php')
-rw-r--r--tests/lib/Template/ResourceLocatorTest.php89
1 files changed, 89 insertions, 0 deletions
diff --git a/tests/lib/Template/ResourceLocatorTest.php b/tests/lib/Template/ResourceLocatorTest.php
new file mode 100644
index 00000000000..599c8391ade
--- /dev/null
+++ b/tests/lib/Template/ResourceLocatorTest.php
@@ -0,0 +1,89 @@
+<?php
+
+/**
+ * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-FileCopyrightText: 2016 ownCloud, Inc.
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+namespace Test\Template;
+
+use OC\SystemConfig;
+use OC\Template\ResourceNotFoundException;
+use Psr\Log\LoggerInterface;
+
+class ResourceLocatorTest extends \Test\TestCase {
+ /** @var \PHPUnit\Framework\MockObject\MockObject */
+ protected $logger;
+
+ protected function setUp(): void {
+ parent::setUp();
+ $this->logger = $this->createMock(LoggerInterface::class);
+ }
+
+ /**
+ * @param string $theme
+ * @return \PHPUnit\Framework\MockObject\MockObject
+ */
+ public function getResourceLocator($theme) {
+ $systemConfig = $this->createMock(SystemConfig::class);
+ $systemConfig
+ ->expects($this->any())
+ ->method('getValue')
+ ->with('theme', '')
+ ->willReturn($theme);
+ $this->overwriteService(SystemConfig::class, $systemConfig);
+ return $this->getMockForAbstractClass('OC\Template\ResourceLocator',
+ [$this->logger],
+ '', true, true, true, []);
+ }
+
+ public function testFind(): void {
+ $locator = $this->getResourceLocator('theme');
+ $locator->expects($this->once())
+ ->method('doFind')
+ ->with('foo');
+ $locator->expects($this->once())
+ ->method('doFindTheme')
+ ->with('foo');
+ /** @var \OC\Template\ResourceLocator $locator */
+ $locator->find(['foo']);
+ }
+
+ public function testFindNotFound(): void {
+ $systemConfig = $this->createMock(SystemConfig::class);
+ $systemConfig->method('getValue')
+ ->with('theme', '')
+ ->willReturn('theme');
+ $this->overwriteService(SystemConfig::class, $systemConfig);
+ $locator = $this->getResourceLocator('theme',
+ ['core' => 'map'], ['3rd' => 'party'], ['foo' => 'bar']);
+ $locator->expects($this->once())
+ ->method('doFind')
+ ->with('foo')
+ ->willThrowException(new ResourceNotFoundException('foo', 'map'));
+ $locator->expects($this->once())
+ ->method('doFindTheme')
+ ->with('foo')
+ ->willThrowException(new ResourceNotFoundException('foo', 'map'));
+ $this->logger->expects($this->exactly(2))
+ ->method('debug')
+ ->with($this->stringContains('map/foo'));
+ /** @var \OC\Template\ResourceLocator $locator */
+ $locator->find(['foo']);
+ }
+
+ public function testAppendIfExist(): void {
+ $locator = $this->getResourceLocator('theme');
+ /** @var \OC\Template\ResourceLocator $locator */
+ $method = new \ReflectionMethod($locator, 'appendIfExist');
+ $method->setAccessible(true);
+
+ $method->invoke($locator, __DIR__, basename(__FILE__), 'webroot');
+ $resource1 = [__DIR__, 'webroot', basename(__FILE__)];
+ $this->assertEquals([$resource1], $locator->getResources());
+
+ $method->invoke($locator, __DIR__, 'does-not-exist');
+ $this->assertEquals([$resource1], $locator->getResources());
+ }
+}