Merge pull request #1280 from nextcloud/backport-1272-theming-info-capabilities

[stable10] Add theming information to capabilities for the client
This commit is contained in:
Roeland Jago Douma 2016-09-06 15:01:08 +02:00 committed by GitHub
commit e97bb2ccc5
4 changed files with 236 additions and 0 deletions

View File

@ -49,3 +49,6 @@ $linkToJs = \OC::$server->getURLGenerator()->linkToRoute(
'src' => $linkToJs,
], ''
);
$app = new \OCP\AppFramework\App('theming');
$app->getContainer()->registerCapability('OCA\Theming\Capabilities');

View File

@ -0,0 +1,61 @@
<?php
/**
* @copyright Copyright (c) 2016, Joas Schilling <coding@schilljs.com>
*
* @author Joas Schilling <coding@schilljs.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 OCA\Theming;
use OCP\Capabilities\ICapability;
use OCP\IURLGenerator;
/**
* Class Capabilities
*
* @package OCA\Theming
*/
class Capabilities implements ICapability {
/** @var ThemingDefaults */
protected $theming;
/**
* @param ThemingDefaults $theming
*/
public function __construct(ThemingDefaults $theming) {
$this->theming = $theming;
}
/**
* Return this classes capabilities
*
* @return array
*/
public function getCapabilities() {
return [
'theming' => [
'name' => $this->theming->getName(),
'url' => $this->theming->getBaseUrl(),
'slogan' => $this->theming->getSlogan(),
'color' => $this->theming->getMailHeaderColor(),
],
];
}
}

View File

@ -0,0 +1,93 @@
<?php
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.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 OCA\Theming\Tests;
use OCA\Theming\Capabilities;
use OCA\Theming\ThemingDefaults;
use OCP\IURLGenerator;
use Test\TestCase;
/**
* Class CapabilitiesTest
*
* @group DB
* @package OCA\Theming\Tests
*/
class CapabilitiesTest extends TestCase {
/** @var ThemingDefaults|\PHPUnit_Framework_MockObject_MockObject */
protected $theming;
/** @var Capabilities */
protected $capabilities;
protected function setUp() {
parent::setUp();
$this->theming = $this->getMockBuilder('OCA\Theming\ThemingDefaults')
->disableOriginalConstructor()
->getMock();
$this->capabilities = new Capabilities($this->theming);
}
public function dataGetCapabilities() {
return [
['name', 'url', 'slogan', 'color', [
'name' => 'name',
'url' => 'url',
'slogan' => 'slogan',
'color' => 'color',
]],
['name1', 'url2', 'slogan3', 'color4', [
'name' => 'name1',
'url' => 'url2',
'slogan' => 'slogan3',
'color' => 'color4',
]],
];
}
/**
* @dataProvider dataGetCapabilities
* @param string $name
* @param string $url
* @param string $slogan
* @param string $color
* @param string[] $expected
*/
public function testGetCapabilities($name, $url, $slogan, $color, array $expected) {
$this->theming->expects($this->once())
->method('getName')
->willReturn($name);
$this->theming->expects($this->once())
->method('getBaseUrl')
->willReturn($url);
$this->theming->expects($this->once())
->method('getSlogan')
->willReturn($slogan);
$this->theming->expects($this->once())
->method('getMailHeaderColor')
->willReturn($color);
$this->assertEquals(['theming' => $expected], $this->capabilities->getCapabilities());
}
}

View File

@ -0,0 +1,79 @@
<?php
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.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 OCA\Theming\Tests;
use OCP\AppFramework\App;
use Test\TestCase;
/**
* Class ServicesTest
*
* @group DB
* @package OCA\Theming\Tests
*/
class ServicesTest extends TestCase {
/** @var \OCA\Activity\AppInfo\Application */
protected $app;
/** @var \OCP\AppFramework\IAppContainer */
protected $container;
protected function setUp() {
parent::setUp();
$this->app = new App('theming');
$this->container = $this->app->getContainer();
}
public function queryData() {
return [
['OCP\IL10N'],
// lib/
['OCA\Theming\Capabilities'],
['OCA\Theming\Capabilities', 'OCP\Capabilities\ICapability'],
['OCA\Theming\ThemingDefaults'],
['OCA\Theming\ThemingDefaults', 'OC_Defaults'],
['OCA\Theming\Util'],
// Controller
['OCA\Theming\Controller\ThemingController'],
// Settings
['OCA\Theming\Settings\Admin'],
['OCA\Theming\Settings\Admin', 'OCP\Settings\ISettings'],
['OCA\Theming\Settings\Section'],
['OCA\Theming\Settings\Section', 'OCP\Settings\ISection'],
];
}
/**
* @dataProvider queryData
* @param string $service
* @param string $expected
*/
public function testContainerQuery($service, $expected = null) {
if ($expected === null) {
$expected = $service;
}
$this->assertTrue($this->container->query($service) instanceof $expected);
}
}