Browse Source

Fixed tests

Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
John Molakvoæ (skjnldsv) 1 year ago
parent
commit
14bc9ffda4

+ 1 - 1
apps/dav/lib/CalDAV/Activity/Filter/Calendar.php

@@ -72,7 +72,7 @@ class Calendar implements IFilter {
 	 * @since 11.0.0
 	 */
 	public function getIcon() {
-		return $this->url->getAbsoluteURL($this->url->imagePath('core', 'places/calendar-dark.svg'));
+		return $this->url->getAbsoluteURL($this->url->imagePath('core', 'places/calendar.svg'));
 	}
 
 	/**

+ 1 - 1
apps/dav/tests/unit/CalDAV/Activity/Filter/CalendarTest.php

@@ -55,7 +55,7 @@ class CalendarTest extends TestCase {
 	public function testGetIcon() {
 		$this->url->expects($this->once())
 			->method('imagePath')
-			->with('core', 'places/calendar-dark.svg')
+			->with('core', 'places/calendar.svg')
 			->willReturn('path-to-icon');
 
 		$this->url->expects($this->once())

+ 1 - 1
autotest-js.sh

@@ -28,7 +28,7 @@ for SCSSFILE in core/css/*.scss
 do
     FILE=$(basename $SCSSFILE)
     FILENAME="${FILE%.*}"
-    printf "@import 'variables.scss'; @import '${FILE}';" | ./build/bin/node-sass --include-path core/css/ > tests/css/${FILE}.css
+    printf "\$webroot:''; @import 'functions.scss'; @import 'variables.scss'; @import '${FILE}';" | ./build/bin/node-sass --include-path core/css/ > tests/css/${FILE}.css
 done
 
 KARMA="$PREFIX/node_modules/karma/bin/karma"

+ 3 - 2
core/css/functions.scss

@@ -32,9 +32,10 @@
  */
 @mixin icon-color($icon, $dir, $color, $core: false) {
 	// remove # from color
-	$index: str-index($color, '#');
+	// inspect cast int to string
+	$index: str-index(inspect($color), '#');
 	@if $index {
-		$color: str-slice($color, 2);
+		$color: str-slice(inspect($color), 2);
 	}
 	$varName: "--icon-#{$icon}-#{$color}";
 	@if $core {

+ 3 - 1
lib/private/Server.php

@@ -116,6 +116,7 @@ use OC\Share20\ProviderFactory;
 use OC\Share20\ShareHelper;
 use OC\SystemTag\ManagerFactory as SystemTagManagerFactory;
 use OC\Tagging\TagMapper;
+use OC\Template\IconsCacher;
 use OC\Template\JSCombiner;
 use OC\Template\SCSSCacher;
 use OCA\Theming\ImageManager;
@@ -963,7 +964,8 @@ class Server extends ServerContainer implements IServerContainer {
 				$c->getConfig(),
 				$c->getThemingDefaults(),
 				\OC::$SERVERROOT,
-				$this->getMemCacheFactory()
+				$this->getMemCacheFactory(),
+				$c->query(IconsCacher::class)
 			);
 		});
 		$this->registerService(JSCombiner::class, function (Server $c) {

+ 8 - 8
lib/private/Template/IconsCacher.php

@@ -26,6 +26,7 @@ namespace OC\Template;
 use OCP\Files\IAppData;
 use OCP\Files\NotFoundException;
 use OCP\Files\SimpleFS\ISimpleFolder;
+use OCP\Files\SimpleFS\ISimpleFile;
 use OCP\ILogger;
 use OCP\IURLGenerator;
 use OC\Files\AppData\Factory;
@@ -85,10 +86,11 @@ class IconsCacher {
 	 */
 	public function setIconsCss(string $css) {
 
-		try {
-			$currentData = $this->folder->getFile($this->fileName)->getContent();
-		} catch (NotFoundException $e) {
+		$cachedFile = $this->getCachedCSS();
+		if (!$cachedFile) {
 			$currentData = '';
+		} else {
+			$currentData = $cachedFile->getContent();
 		}
 
 		// remove :root
@@ -102,16 +104,14 @@ class IconsCacher {
 		}
 
 		if (strlen($data) > 0) {
-			try {
-				$cachedfile = $this->folder->getFile($this->fileName);
-			} catch (NotFoundException $e) {
-				$cachedfile = $this->folder->newFile($this->fileName);
+			if (!$cachedFile) {
+				$cachedFile = $this->folder->newFile($this->fileName);
 			}
 
 			$data = ":root {
 				$data
 			}";
-			$cachedfile->putContent($data);
+			$cachedFile->putContent($data);
 		}
 
 		return preg_replace($this->iconVarRE, '', $css);

+ 4 - 7
lib/private/Template/SCSSCacher.php

@@ -85,6 +85,7 @@ class SCSSCacher {
 	 * @param \OC_Defaults $defaults
 	 * @param string $serverRoot
 	 * @param ICacheFactory $cacheFactory
+	 * @param IconsCacher $iconsCacher
 	 */
 	public function __construct(ILogger $logger,
 								Factory $appDataFactory,
@@ -92,7 +93,8 @@ class SCSSCacher {
 								IConfig $config,
 								\OC_Defaults $defaults,
 								$serverRoot,
-								ICacheFactory $cacheFactory) {
+								ICacheFactory $cacheFactory,
+								IconsCacher $iconsCacher) {
 		$this->logger       = $logger;
 		$this->appData      = $appDataFactory->get('css');
 		$this->urlGenerator = $urlGenerator;
@@ -101,12 +103,7 @@ class SCSSCacher {
 		$this->serverRoot   = $serverRoot;
 		$this->cacheFactory = $cacheFactory;
 		$this->depsCache    = $cacheFactory->createDistributed('SCSS-' . md5($this->urlGenerator->getBaseUrl()));
-
-		$this->iconsCacher = new IconsCacher(
-			$this->logger,
-			$appDataFactory,
-			$this->urlGenerator
-		);
+		$this->iconsCacher = $iconsCacher;
 	}
 
 	/**

+ 2 - 2
tests/lib/Settings/ManagerTest.php

@@ -122,7 +122,7 @@ class ManagerTest extends TestCase {
 				['core', 'actions/settings-dark.svg', '1'],
 				['core', 'actions/share.svg', '2'],
 				['core', 'actions/password.svg', '3'],
-				['core', 'places/contacts-dark.svg', '5'],
+				['core', 'places/contacts.svg', '5'],
 				['settings', 'help.svg', '4'],
 			]);
 
@@ -175,7 +175,7 @@ class ManagerTest extends TestCase {
 				['core', 'actions/settings-dark.svg', '1'],
 				['core', 'actions/share.svg', '2'],
 				['core', 'actions/password.svg', '3'],
-				['core', 'places/contacts-dark.svg', '5'],
+				['core', 'places/contacts.svg', '5'],
 				['settings', 'help.svg', '4'],
 			]);
 

+ 6 - 1
tests/lib/Template/CSSResourceLocatorTest.php

@@ -31,6 +31,7 @@ use OCP\ILogger;
 use OCP\IURLGenerator;
 use OCP\IConfig;
 use OCA\Theming\ThemingDefaults;
+use OC\Template\IconsCacher;
 use OC\Template\SCSSCacher;
 use OC\Template\CSSResourceLocator;
 
@@ -47,6 +48,8 @@ class CSSResourceLocatorTest extends \Test\TestCase {
 	protected $cacheFactory;
 	/** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */
 	protected $logger;
+	/** @var IconsCacher|\PHPUnit_Framework_MockObject_MockObject */
+	protected $iconsCacher;
 
 	protected function setUp() {
 		parent::setUp();
@@ -57,6 +60,7 @@ class CSSResourceLocatorTest extends \Test\TestCase {
 		$this->config = $this->createMock(IConfig::class);
 		$this->cacheFactory = $this->createMock(ICacheFactory::class);
 		$this->themingDefaults = $this->createMock(ThemingDefaults::class);
+		$this->iconsCacher = $this->createMock(IconsCacher::class);
 	}
 
 	private function cssResourceLocator() {
@@ -70,7 +74,8 @@ class CSSResourceLocatorTest extends \Test\TestCase {
 			$this->config,
 			$this->themingDefaults,
 			\OC::$SERVERROOT,
-			$this->cacheFactory
+			$this->cacheFactory,
+			$this->iconsCacher
 		);
 		return new CSSResourceLocator(
 			$this->logger,

+ 126 - 0
tests/lib/Template/IconsCacherTest.php

@@ -0,0 +1,126 @@
+<?php
+/**
+ * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com)
+ *
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Test\Template;
+
+use OC\Files\AppData\AppData;
+use OC\Files\AppData\Factory;
+use OC\Template\IconsCacher;
+use OCA\Theming\ThemingDefaults;
+use OCP\Files\IAppData;
+use OCP\Files\NotFoundException;
+use OCP\Files\SimpleFS\ISimpleFile;
+use OCP\Files\SimpleFS\ISimpleFolder;
+use OCP\ICache;
+use OCP\ICacheFactory;
+use OCP\IConfig;
+use OCP\ILogger;
+use OCP\IURLGenerator;
+use OC_App;
+
+class IconsCacherTest extends \Test\TestCase {
+	/** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */
+	protected $logger;
+	/** @var IAppData|\PHPUnit_Framework_MockObject_MockObject */
+	protected $appData;
+	/** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */
+	protected $urlGenerator;
+
+	protected function setUp() {
+		$this->logger = $this->createMock(ILogger::class);
+		$this->appData = $this->createMock(AppData::class);
+
+		/** @var Factory|\PHPUnit_Framework_MockObject_MockObject $factory */
+		$factory = $this->createMock(Factory::class);
+		$factory->method('get')->with('css')->willReturn($this->appData);
+
+		$this->folder = $this->createMock(ISimpleFolder::class);
+		$this->appData->method('getFolder')->willReturn($this->folder);
+
+		$this->urlGenerator = $this->createMock(IURLGenerator::class);
+
+		$this->iconsCacher = new IconsCacher(
+			$this->logger,
+			$factory,
+			$this->urlGenerator
+		);
+	}
+
+	public function testGetIconsFromEmptyCss() {
+		$css = "
+			icon.test {
+				color: #aaa;
+			}
+		";
+		$icons = self::invokePrivate($this->iconsCacher, 'getIconsFromCss', [$css]);
+		$this->assertTrue(empty($icons));
+	}
+
+	public function testGetIconsFromValidCss() {
+		$css = "
+			icon.test {
+				--icon-test: url('/svg/core/actions/add/000');
+				background-image: var(--icon-test);
+			}
+		";
+		$actual = self::invokePrivate($this->iconsCacher, 'getIconsFromCss', [$css]);
+		$expected = array(
+			'icon-test' => '/svg/core/actions/add/000'
+		);
+		$this->assertEquals($expected, $actual);
+	}
+
+	public function testSetIconsFromEmptyCss() {
+		$expected = "
+			icon.test {
+				color: #aaa;
+			}
+		";
+		$actual = $this->iconsCacher->setIconsCss($expected);
+		$this->assertEquals($expected, $actual);
+	}
+
+	public function testSetIconsFromValidCss() {
+		$css = "
+			icon.test {
+				--icon-test: url('/svg/core/actions/add/000');
+				background-image: var(--icon-test);
+			}
+		";
+		$expected = "
+			icon.test {
+				
+				background-image: var(--icon-test);
+			}
+		";
+
+		$iconsFile = $this->createMock(ISimpleFile::class);
+		$this->folder->expects($this->once())
+			->method('getFile')
+			->willReturn($iconsFile);
+		
+		$actual = $this->iconsCacher->setIconsCss($css);
+		$this->assertEquals($expected, $actual);
+	}
+
+}

+ 39 - 1
tests/lib/Template/SCSSCacherTest.php

@@ -26,6 +26,7 @@ namespace Test\Template;
 use OC\Files\AppData\AppData;
 use OC\Files\AppData\Factory;
 use OC\Template\SCSSCacher;
+use OC\Template\IconsCacher;
 use OCA\Theming\ThemingDefaults;
 use OCP\Files\IAppData;
 use OCP\Files\NotFoundException;
@@ -55,11 +56,14 @@ class SCSSCacherTest extends \Test\TestCase {
 	protected $depsCache;
 	/** @var ICacheFactory|\PHPUnit_Framework_MockObject_MockObject */
 	protected $cacheFactory;
+	/** @var IconsCacher|\PHPUnit_Framework_MockObject_MockObject */
+	protected $iconsCacher;
 
 	protected function setUp() {
 		parent::setUp();
 		$this->logger = $this->createMock(ILogger::class);
 		$this->appData = $this->createMock(AppData::class);
+		$this->iconsCacher = $this->createMock(IconsCacher::class);
 
 		/** @var Factory|\PHPUnit_Framework_MockObject_MockObject $factory */
 		$factory = $this->createMock(Factory::class);
@@ -80,6 +84,11 @@ class SCSSCacherTest extends \Test\TestCase {
 		$this->themingDefaults = $this->createMock(ThemingDefaults::class);
 		$this->themingDefaults->expects($this->any())->method('getScssVariables')->willReturn([]);
 
+		$iconsFile = $this->createMock(ISimpleFile::class);
+		$this->iconsCacher->expects($this->any())
+			->method('getCachedCSS')
+			->willReturn($iconsFile);
+
 		$this->scssCacher = new SCSSCacher(
 			$this->logger,
 			$factory,
@@ -87,7 +96,8 @@ class SCSSCacherTest extends \Test\TestCase {
 			$this->config,
 			$this->themingDefaults,
 			\OC::$SERVERROOT,
-			$this->cacheFactory
+			$this->cacheFactory,
+			$this->iconsCacher
 		);
 	}
 
@@ -126,6 +136,10 @@ class SCSSCacherTest extends \Test\TestCase {
 			->method('getBaseUrl')
 			->willReturn('http://localhost/nextcloud');
 
+		$this->iconsCacher->expects($this->any())
+			->method('setIconsCss')
+			->willReturn('scss {}');
+
 		$actual = $this->scssCacher->process(\OC::$SERVERROOT, '/core/css/styles.scss', 'core');
 		$this->assertTrue($actual);
 	}
@@ -158,6 +172,10 @@ class SCSSCacherTest extends \Test\TestCase {
 			->with($filePrefix.'styles.css.deps')
 			->willReturn($fileDeps);
 
+		$this->iconsCacher->expects($this->any())
+			->method('setIconsCss')
+			->willReturn('scss {}');
+
 		$actual = $this->scssCacher->process(\OC::$SERVERROOT, '/core/css/styles.scss', 'core');
 		$this->assertTrue($actual);
 	}
@@ -185,6 +203,10 @@ class SCSSCacherTest extends \Test\TestCase {
 				$this->fail();
 			}));
 
+		$this->iconsCacher->expects($this->any())
+			->method('setIconsCss')
+			->willReturn('scss {}');
+
 		$actual = $this->scssCacher->process(\OC::$SERVERROOT, '/core/css/styles.scss', 'core');
 		$this->assertTrue($actual);
 	}
@@ -220,6 +242,10 @@ class SCSSCacherTest extends \Test\TestCase {
 				$this->fail();
 			}));
 
+		$this->iconsCacher->expects($this->any())
+			->method('setIconsCss')
+			->willReturn('scss {}');
+
 		$actual = $this->scssCacher->process(\OC::$SERVERROOT, '/core/css/styles.scss', 'core');
 		$this->assertTrue($actual);
 	}
@@ -276,6 +302,10 @@ class SCSSCacherTest extends \Test\TestCase {
 			throw new \Exception();
 		}));
 
+		$this->iconsCacher->expects($this->any())
+			->method('setIconsCss')
+			->willReturn('scss {}');
+
 		$file->expects($this->once())->method('putContent');
 		$depsFile->expects($this->once())->method('putContent');
 		$gzipFile->expects($this->once())->method('putContent');
@@ -310,6 +340,10 @@ class SCSSCacherTest extends \Test\TestCase {
 		$depsFile->expects($this->once())->method('putContent');
 		$gzipFile->expects($this->once())->method('putContent');
 
+		$this->iconsCacher->expects($this->any())
+			->method('setIconsCss')
+			->willReturn('scss {}');
+
 		$actual = self::invokePrivate($this->scssCacher, 'cache', [$path, $fileNameCSS, $fileNameSCSS, $folder, $webDir]);
 		$this->assertTrue($actual);
 	}
@@ -336,6 +370,10 @@ class SCSSCacherTest extends \Test\TestCase {
 			throw new \Exception();
 		}));
 
+		$this->iconsCacher->expects($this->at(0))
+			->method('setIconsCss')
+			->willReturn('body{background-color:#0082c9}');
+
 		$file->expects($this->at(0))->method('putContent')->with($this->callback(
 			function ($content){
 				return 'body{background-color:#0082c9}' === $content;