From 0b12eb06403687d700fdcfc130f3dcc7164518ea Mon Sep 17 00:00:00 2001 From: Morris Jobke Date: Thu, 2 Mar 2017 12:12:19 -0600 Subject: [PATCH] Execute UpdateLanguageCode only once Signed-off-by: Morris Jobke --- .../Repair/NC12/UpdateLanguageCodes.php | 15 ++++++++++- .../Repair/NC12/UpdateLanguageCodesTest.php | 26 ++++++++++++++++++- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/lib/private/Repair/NC12/UpdateLanguageCodes.php b/lib/private/Repair/NC12/UpdateLanguageCodes.php index ed65a5cbbe..69f06df83e 100644 --- a/lib/private/Repair/NC12/UpdateLanguageCodes.php +++ b/lib/private/Repair/NC12/UpdateLanguageCodes.php @@ -23,6 +23,7 @@ namespace OC\Repair\NC12; +use OCP\IConfig; use OCP\IDBConnection; use OCP\Migration\IOutput; use OCP\Migration\IRepairStep; @@ -31,11 +32,16 @@ class UpdateLanguageCodes implements IRepairStep { /** @var IDBConnection */ private $connection; + /** @var IConfig */ + private $config; + /** * @param IDBConnection $db */ - public function __construct(IDBConnection $connection) { + public function __construct(IDBConnection $connection, + IConfig $config) { $this->connection = $connection; + $this->config = $config; } /** @@ -49,6 +55,13 @@ class UpdateLanguageCodes implements IRepairStep { * {@inheritdoc} */ public function run(IOutput $output) { + + $versionFromBeforeUpdate = $this->config->getSystemValue('version', '0.0.0'); + + if (version_compare($versionFromBeforeUpdate, '12.0.0.13', '>')) { + return; + } + $languages = [ 'bg_BG' => 'bg', 'cs_CZ' => 'cs', diff --git a/tests/lib/Repair/NC12/UpdateLanguageCodesTest.php b/tests/lib/Repair/NC12/UpdateLanguageCodesTest.php index 95ccd0935a..dfb5ea099f 100644 --- a/tests/lib/Repair/NC12/UpdateLanguageCodesTest.php +++ b/tests/lib/Repair/NC12/UpdateLanguageCodesTest.php @@ -24,6 +24,7 @@ namespace Test\Repair\NC12; use OC\Repair\NC12\UpdateLanguageCodes; +use OCP\IConfig; use OCP\Migration\IOutput; use Test\TestCase; @@ -38,10 +39,14 @@ class UpdateLanguageCodesTest extends TestCase { /** @var \OCP\IDBConnection */ protected $connection; + /** @var IConfig | \PHPUnit_Framework_MockObject_MockObject */ + private $config; + protected function setUp() { parent::setUp(); $this->connection = \OC::$server->getDatabaseConnection(); + $this->config = $this->createMock(IConfig::class); } public function testRun() { @@ -112,8 +117,13 @@ class UpdateLanguageCodesTest extends TestCase { ->method('info') ->with('Changed 2 setting(s) from "th_TH" to "th" in preferences table.'); + $this->config->expects($this->once()) + ->method('getSystemValue') + ->with('version', '0.0.0') + ->willReturn('12.0.0.13'); + // run repair step - $repair = new UpdateLanguageCodes($this->connection); + $repair = new UpdateLanguageCodes($this->connection, $this->config); $repair->run($outputMock); // check if test data is correctly modified in DB @@ -147,4 +157,18 @@ class UpdateLanguageCodesTest extends TestCase { } } + public function testSecondRun() { + /** @var IOutput|\PHPUnit_Framework_MockObject_MockObject $outputMock */ + $outputMock = $this->createMock(IOutput::class); + + $this->config->expects($this->once()) + ->method('getSystemValue') + ->with('version', '0.0.0') + ->willReturn('12.0.0.14'); + + // run repair step + $repair = new UpdateLanguageCodes($this->connection, $this->config); + $repair->run($outputMock); + } + }