Inject server root - allows proper testing and separation of concerns

This commit is contained in:
Morris Jobke 2016-03-18 13:59:44 +01:00
parent 23c0f4ff5f
commit 76455204c0
5 changed files with 30 additions and 24 deletions

View File

@ -261,7 +261,8 @@ class Server extends ServerContainer implements IServerContainer {
return new \OC\L10N\Factory(
$c->getConfig(),
$c->getRequest(),
$c->getUserSession()
$c->getUserSession(),
\OC::$SERVERROOT
);
});
$this->registerService('URLGenerator', function (Server $c) {

View File

@ -64,17 +64,23 @@ class Factory implements IFactory {
/** @var IUserSession */
protected $userSession;
/** @var string */
protected $serverRoot;
/**
* @param IConfig $config
* @param IRequest $request
* @param IUserSession $userSession
* @param string $serverRoot
*/
public function __construct(IConfig $config,
IRequest $request,
IUserSession $userSession) {
IUserSession $userSession,
$serverRoot) {
$this->config = $config;
$this->request = $request;
$this->userSession = $userSession;
$this->serverRoot = $serverRoot;
}
/**
@ -189,7 +195,7 @@ class Factory implements IFactory {
// merge with translations from theme
$theme = $this->config->getSystemValue('theme');
if (!empty($theme)) {
$themeDir = \OC::$SERVERROOT . '/themes/' . $theme . substr($dir, strlen(\OC::$SERVERROOT));
$themeDir = $this->serverRoot . '/themes/' . $theme . substr($dir, strlen($this->serverRoot));
if (is_dir($themeDir)) {
$files = scandir($themeDir);
@ -280,9 +286,9 @@ class Factory implements IFactory {
$i18nDir = $this->findL10nDir($app);
$transFile = strip_tags($i18nDir) . strip_tags($lang) . '.json';
if ((\OC_Helper::isSubDirectory($transFile, \OC::$SERVERROOT . '/core/l10n/')
|| \OC_Helper::isSubDirectory($transFile, \OC::$SERVERROOT . '/lib/l10n/')
|| \OC_Helper::isSubDirectory($transFile, \OC::$SERVERROOT . '/settings/l10n/')
if ((\OC_Helper::isSubDirectory($transFile, $this->serverRoot . '/core/l10n/')
|| \OC_Helper::isSubDirectory($transFile, $this->serverRoot . '/lib/l10n/')
|| \OC_Helper::isSubDirectory($transFile, $this->serverRoot . '/settings/l10n/')
|| \OC_Helper::isSubDirectory($transFile, \OC_App::getAppPath($app) . '/l10n/')
)
&& file_exists($transFile)) {
@ -293,7 +299,7 @@ class Factory implements IFactory {
// merge with translations from theme
$theme = $this->config->getSystemValue('theme');
if (!empty($theme)) {
$transFile = \OC::$SERVERROOT . '/themes/' . $theme . substr($transFile, strlen(\OC::$SERVERROOT));
$transFile = $this->serverRoot . '/themes/' . $theme . substr($transFile, strlen($this->serverRoot));
if (file_exists($transFile)) {
$languageFiles[] = $transFile;
}
@ -310,14 +316,14 @@ class Factory implements IFactory {
*/
protected function findL10nDir($app = null) {
if (in_array($app, ['core', 'lib', 'settings'])) {
if (file_exists(\OC::$SERVERROOT . '/' . $app . '/l10n/')) {
return \OC::$SERVERROOT . '/' . $app . '/l10n/';
if (file_exists($this->serverRoot . '/' . $app . '/l10n/')) {
return $this->serverRoot . '/' . $app . '/l10n/';
}
} else if ($app && \OC_App::getAppPath($app) !== false) {
// Check if the app is in the app folder
return \OC_App::getAppPath($app) . '/l10n/';
}
return \OC::$SERVERROOT . '/core/l10n/';
return $this->serverRoot . '/core/l10n/';
}

View File

@ -28,6 +28,9 @@ class FactoryTest extends TestCase {
/** @var \OCP\IUserSession|\PHPUnit_Framework_MockObject_MockObject */
protected $userSession;
/** @var string */
protected $serverRoot;
public function setUp() {
parent::setUp();
@ -42,6 +45,8 @@ class FactoryTest extends TestCase {
->getMock();
$this->userSession = $this->getMock('\OCP\IUserSession');
$this->serverRoot = \OC::$SERVERROOT;
}
/**
@ -54,12 +59,13 @@ class FactoryTest extends TestCase {
->setConstructorArgs([
$this->config,
$this->request,
$this->userSession
$this->userSession,
$this->serverRoot,
])
->setMethods($methods)
->getMock();
} else {
return new Factory($this->config, $this->request, $this->userSession);
return new Factory($this->config, $this->request, $this->userSession, $this->serverRoot);
}
}
@ -288,28 +294,21 @@ class FactoryTest extends TestCase {
}
public function testFindAvailableLanguagesWithThemes() {
$serverRoot = \OC::$SERVERROOT;
\OC::$SERVERROOT = \OC::$SERVERROOT . '/tests/data';
$this->serverRoot .= '/tests/data';
$app = 'files';
$factory = $this->getFactory(['findL10nDir']);
$factory->expects($this->once())
->method('findL10nDir')
->with($app)
->willReturn(\OC::$SERVERROOT . '/apps/files/l10n/');
->willReturn($this->serverRoot . '/apps/files/l10n/');
$this->config
->expects($this->once())
->method('getSystemValue')
->with('theme')
->willReturn('abc');
try {
$this->assertEquals(['en', 'zz'], $factory->findAvailableLanguages($app), '', 0.0, 10, true);
} catch (\Exception $e) {
\OC::$SERVERROOT = $serverRoot;
throw $e;
}
\OC::$SERVERROOT = $serverRoot;
$this->assertEquals(['en', 'zz'], $factory->findAvailableLanguages($app), '', 0.0, 10, true);
}
/**

View File

@ -124,7 +124,7 @@ class L10nLegacyTest extends \Test\TestCase {
}
public function testFactoryGetLanguageCode() {
$factory = new \OC\L10N\Factory($this->getMock('OCP\IConfig'), $this->getMock('OCP\IRequest'), $this->getMock('OCP\IUserSession'));
$factory = new \OC\L10N\Factory($this->getMock('OCP\IConfig'), $this->getMock('OCP\IRequest'), $this->getMock('OCP\IUserSession'), \OC::$SERVERROOT);
$l = $factory->get('lib', 'de');
$this->assertEquals('de', $l->getLanguageCode());
}

View File

@ -31,7 +31,7 @@ class L10nTest extends TestCase {
$request = $this->getMock('OCP\IRequest');
/** @var IUserSession $userSession */
$userSession = $this->getMock('OCP\IUserSession');
return new Factory($config, $request, $userSession);
return new Factory($config, $request, $userSession, \OC::$SERVERROOT);
}
public function testGermanPluralTranslations() {