]> source.dussan.org Git - nextcloud-server.git/commitdiff
Adds CssControllerTests
authorRoeland Jago Douma <roeland@famdouma.nl>
Mon, 2 Jan 2017 15:32:16 +0000 (16:32 +0100)
committerRoeland Jago Douma <roeland@famdouma.nl>
Fri, 6 Jan 2017 08:42:39 +0000 (09:42 +0100)
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
core/Controller/CssController.php
lib/private/Template/CSSResourceLocator.php [changed mode: 0755->0644]
lib/private/Template/SCSSCacher.php [changed mode: 0755->0644]
tests/Core/Controller/CssControllerTest.php [new file with mode: 0644]

index e547987902da76b27f6b27ee37bd7adb3b0a488c..1206c95a5b833a6317ecbf60de218e6d333f3284 100644 (file)
 
 namespace OC\Core\Controller;
 
-use OC\AppFramework\Utility\TimeFactory;
-use OC\CssManager;
 use OCP\AppFramework\Controller;
 use OCP\AppFramework\Http;
 use OCP\AppFramework\Http\NotFoundResponse;
 use OCP\AppFramework\Http\FileDisplayResponse;
+use OCP\AppFramework\Utility\ITimeFactory;
 use OCP\Files\IAppData;
 use OCP\Files\NotFoundException;
 use OCP\IRequest;
-use OCP\Notification\IApp;
 
 class CssController extends Controller {
 
        /** @var IAppData */
        protected $appData;
 
-       /** @var TimeFactory */
+       /** @var ITimeFactory */
        protected $timeFactory;
 
        /**
         * @param string $appName
         * @param IRequest $request
         * @param IAppData $appData
-        * @param TimeFactory $timeFactory
+        * @param ITimeFactory $timeFactory
         */
-       public function __construct($appName, IRequest $request, IAppData $appData, TimeFactory $timeFactory) {
+       public function __construct($appName, IRequest $request, IAppData $appData, ITimeFactory $timeFactory) {
                parent::__construct($appName, $request);
 
                $this->appData = $appData;
@@ -69,16 +67,13 @@ class CssController extends Controller {
                        return new NotFoundResponse();
                }
 
-               if ($cssFile !== false) {
-                       $response = new FileDisplayResponse($cssFile, Http::STATUS_OK, ['Content-Type' => 'text/css']);
-                       $response->cacheFor(86400);
-                       $expires = new \DateTime();
-                       $expires->setTimestamp($this->timeFactory->getTime());
-                       $expires->add(new \DateInterval('PT24H'));
-                       $response->addHeader('Expires', $expires->format(\DateTime::RFC2822));
-                       $response->addHeader('Pragma', 'cache');
-                       return $response;
-               }
-               return new NotFoundResponse();
+               $response = new FileDisplayResponse($cssFile, Http::STATUS_OK, ['Content-Type' => 'text/css']);
+               $response->cacheFor(86400);
+               $expires = new \DateTime();
+               $expires->setTimestamp($this->timeFactory->getTime());
+               $expires->add(new \DateInterval('PT24H'));
+               $response->addHeader('Expires', $expires->format(\DateTime::RFC1123));
+               $response->addHeader('Pragma', 'cache');
+               return $response;
        }
 }
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
diff --git a/tests/Core/Controller/CssControllerTest.php b/tests/Core/Controller/CssControllerTest.php
new file mode 100644 (file)
index 0000000..60fef9d
--- /dev/null
@@ -0,0 +1,111 @@
+<?php
+/**
+ * @copyright 2017, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @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 Tests\Core\Controller;
+
+use OC\Core\Controller\CssController;
+use OC\HintException;
+use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\FileDisplayResponse;
+use OCP\AppFramework\Http\NotFoundResponse;
+use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\Files\IAppData;
+use OCP\Files\NotFoundException;
+use OCP\Files\SimpleFS\ISimpleFile;
+use OCP\Files\SimpleFS\ISimpleFolder;
+use OCP\IRequest;
+use Test\TestCase;
+
+class CssControllerTest extends TestCase {
+
+       /** @var IAppData|\PHPUnit_Framework_MockObject_MockObject */
+       private $appData;
+
+       /** @var CssController */
+       private $controller;
+
+       public function setUp() {
+               parent::setUp();
+
+               $this->appData = $this->createMock(IAppData::class);
+
+               $timeFactory = $this->createMock(ITimeFactory::class);
+               $timeFactory->method('getTime')
+                       ->willReturn(1337);
+
+               $this->controller = new CssController(
+                       'core',
+                       $this->createMock(IRequest::class),
+                       $this->appData,
+                       $timeFactory
+               );
+       }
+
+       public function testNoCssFolderForApp() {
+               $this->appData->method('getFolder')
+                       ->with('myapp')
+                       ->willThrowException(new NotFoundException());
+
+               $result = $this->controller->getCss('file.css', 'myapp');
+
+               $this->assertInstanceOf(NotFoundResponse::class, $result);
+       }
+
+
+       public function testNoCssFile() {
+               $folder = $this->createMock(ISimpleFolder::class);
+               $this->appData->method('getFolder')
+                       ->with('myapp')
+                       ->willReturn($folder);
+
+               $folder->method('getFile')
+                       ->willThrowException(new NotFoundException());
+
+               $result = $this->controller->getCss('file.css', 'myapp');
+
+               $this->assertInstanceOf(NotFoundResponse::class, $result);
+       }
+
+       public function testGetFile() {
+               $folder = $this->createMock(ISimpleFolder::class);
+               $file = $this->createMock(ISimpleFile::class);
+               $this->appData->method('getFolder')
+                       ->with('myapp')
+                       ->willReturn($folder);
+
+               $folder->method('getFile')
+                       ->with('file.css')
+                       ->willReturn($file);
+
+               $expected = new FileDisplayResponse($file, Http::STATUS_OK, ['Content-Type' => 'text/css']);
+               $expected->cacheFor(86400);
+               $expires = new \DateTime();
+               $expires->setTimestamp(1337);
+               $expires->add(new \DateInterval('PT24H'));
+               $expected->addHeader('Expires', $expires->format(\DateTime::RFC1123));
+               $expected->addHeader('Pragma', 'cache');
+
+               $result = $this->controller->getCss('file.css', 'myapp');
+               $this->assertEquals($expected, $result);
+       }
+
+}