diff options
author | Morris Jobke <hey@morrisjobke.de> | 2016-09-12 18:15:22 +0200 |
---|---|---|
committer | Morris Jobke <hey@morrisjobke.de> | 2017-03-01 22:35:28 -0600 |
commit | 1bcd3966798e77b859a263112f35262bd36ead13 (patch) | |
tree | c6f5d7883e308e08d80c75d5e5e25f382b33c4c2 /tests | |
parent | 4a4067a378efe00ab06c5be1d73e8f7930251e81 (diff) | |
download | nextcloud-server-1bcd3966798e77b859a263112f35262bd36ead13.tar.gz nextcloud-server-1bcd3966798e77b859a263112f35262bd36ead13.zip |
Change language code for languages with only one translation
* then the language is not that specific and get also matched for fi
* fallback from fi_FI to fi is supported - the other way around not
* contains repair script
* contains tests for repair script
* fixes #869
Order results to make postgres happy
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/lib/Repair/NC12/UpdateLanguageCodesTest.php | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/tests/lib/Repair/NC12/UpdateLanguageCodesTest.php b/tests/lib/Repair/NC12/UpdateLanguageCodesTest.php new file mode 100644 index 00000000000..61f2fd504f6 --- /dev/null +++ b/tests/lib/Repair/NC12/UpdateLanguageCodesTest.php @@ -0,0 +1,147 @@ +<?php +/** + * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de> + * + * @author Morris Jobke <hey@morrisjobke.de> + * + * @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\Repair\NC12; + +use OC\Repair\NC12\UpdateLanguageCodes; +use OCP\Migration\IOutput; +use Test\TestCase; + +/** + * Class UpdateLanguageCodesTest + * + * @group DB + * + * @package Test\Repair + */ +class UpdateLanguageCodesTest extends TestCase { + /** @var \OCP\IDBConnection */ + protected $connection; + + protected function setUp() { + parent::setUp(); + + $this->connection = \OC::$server->getDatabaseConnection(); + } + + public function testRun() { + + $users = [ + ['userid' => 'user1', 'configvalue' => 'fi_FI'], + ['userid' => 'user2', 'configvalue' => 'de'], + ['userid' => 'user3', 'configvalue' => 'fi'], + ['userid' => 'user4', 'configvalue' => 'ja'], + ['userid' => 'user5', 'configvalue' => 'bg_BG'], + ['userid' => 'user6', 'configvalue' => 'ja'], + ['userid' => 'user7', 'configvalue' => 'th_TH'], + ]; + + // insert test data + $qb = $this->connection->getQueryBuilder(); + $sql = $qb->insert('preferences') + ->values([ + 'userid' => '?', + 'appid' => '?', + 'configkey' => '?', + 'configvalue' => '?', + ]) + ->getSQL(); + foreach ($users as $user) { + $this->connection->executeUpdate($sql, [$user['userid'], 'core', 'lang', $user['configvalue']]); + } + + // check if test data is written to DB + $qb = $this->connection->getQueryBuilder(); + $result = $qb->select(['userid', 'configvalue']) + ->from('preferences') + ->where($qb->expr()->eq('appid', $qb->createNamedParameter('core'))) + ->andWhere($qb->expr()->eq('configkey', $qb->createNamedParameter('lang'))) + ->execute(); + + $rows = $result->fetchAll(); + $result->closeCursor(); + + $this->assertSame($users, $rows, 'Asserts that the entries are the ones from the test data set'); + + /** @var IOutput | \PHPUnit_Framework_MockObject_MockObject $outputMock */ + $outputMock = $this->getMockBuilder('\OCP\Migration\IOutput') + ->disableOriginalConstructor() + ->getMock(); + + $outputMock->expects($this->at(0)) + ->method('info') + ->with('Changed 1 setting(s) from "bg_BG" to "bg" in properties table.'); + $outputMock->expects($this->at(1)) + ->method('info') + ->with('Changed 0 setting(s) from "cs_CZ" to "cs" in properties table.'); + $outputMock->expects($this->at(2)) + ->method('info') + ->with('Changed 1 setting(s) from "fi_FI" to "fi" in properties table.'); + $outputMock->expects($this->at(3)) + ->method('info') + ->with('Changed 0 setting(s) from "hu_HU" to "hu" in properties table.'); + $outputMock->expects($this->at(4)) + ->method('info') + ->with('Changed 0 setting(s) from "nb_NO" to "nb" in properties table.'); + $outputMock->expects($this->at(5)) + ->method('info') + ->with('Changed 0 setting(s) from "sk_SK" to "sk" in properties table.'); + $outputMock->expects($this->at(6)) + ->method('info') + ->with('Changed 1 setting(s) from "th_TH" to "th" in properties table.'); + + // run repair step + $repair = new UpdateLanguageCodes($this->connection); + $repair->run($outputMock); + + // check if test data is correctly modified in DB + $qb = $this->connection->getQueryBuilder(); + $result = $qb->select(['userid', 'configvalue']) + ->from('preferences') + ->where($qb->expr()->eq('appid', $qb->createNamedParameter('core'))) + ->andWhere($qb->expr()->eq('configkey', $qb->createNamedParameter('lang'))) + ->orderBy('userid') + ->execute(); + + $rows = $result->fetchAll(); + $result->closeCursor(); + + // value has changed for one user + $users[0]['configvalue'] = 'fi'; + $users[4]['configvalue'] = 'bg'; + $users[6]['configvalue'] = 'th'; + $this->assertSame($users, $rows, 'Asserts that the entries are updated correctly.'); + + // remove test data + foreach ($users as $user) { + $qb = $this->connection->getQueryBuilder(); + $qb->delete('preferences') + ->where($qb->expr()->eq('userid', $qb->createNamedParameter($user['userid']))) + ->andWhere($qb->expr()->eq('appid', $qb->createNamedParameter('core'))) + ->andWhere($qb->expr()->eq('configkey', $qb->createNamedParameter('lang'))) + ->andWhere($qb->expr()->eq('configvalue', $qb->createNamedParameter($user['configvalue']))) + ->execute(); + } + } + +} |