Skip to content

Commit 9c92041

Browse files
committed
fix: Update tests to be readable
1 parent 5b90b6f commit 9c92041

File tree

1 file changed

+112
-73
lines changed

1 file changed

+112
-73
lines changed

tests/system/Commands/Translation/LocalizationSyncTest.php

Lines changed: 112 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
namespace CodeIgniter\Commands\Translation;
1515

16+
use CodeIgniter\Exceptions\LogicException;
1617
use CodeIgniter\Test\CIUnitTestCase;
1718
use CodeIgniter\Test\StreamFilterTrait;
1819
use Config\App;
@@ -34,15 +35,17 @@ final class LocalizationSyncTest extends CIUnitTestCase
3435
* @var array<string, array<string,mixed>|string|null>
3536
*/
3637
private array $expectedKeys = [
37-
'a' => 'Sync.a',
38-
'b' => 'Sync.b',
39-
'c' => 'Sync.c',
40-
'd' => [],
41-
'e' => 'Sync.e',
42-
'f' => [
43-
'g' => 'Sync.f.g',
44-
'h' => [
45-
'i' => 'Sync.f.h.i',
38+
'title' => 'Sync.title',
39+
'status' => [
40+
'error' => 'Sync.status.error',
41+
'done' => 'Sync.status.done',
42+
'critical' => 'Sync.status.critical',
43+
],
44+
'description' => 'Sync.description',
45+
'empty_array' => [],
46+
'more' => [
47+
'nested' => [
48+
'key' => 'Sync.more.nested.key',
4649
],
4750
],
4851
];
@@ -51,10 +54,10 @@ protected function setUp(): void
5154
{
5255
parent::setUp();
5356

54-
config(App::class)->supportedLocales = ['en', 'ru', 'test'];
57+
config(App::class)->supportedLocales = ['en', 'ru', 'de'];
5558

5659
self::$locale = Locale::getDefault();
57-
self::$languageTestPath = SUPPORTPATH . 'Language' . DIRECTORY_SEPARATOR;
60+
self::$languageTestPath = SUPPORTPATH . 'Language/';
5861
$this->makeLanguageFiles();
5962
}
6063

@@ -67,9 +70,9 @@ protected function tearDown(): void
6770

6871
public function testSyncDefaultLocale(): void
6972
{
70-
command('lang:sync --target test');
73+
command('lang:sync --target de');
7174

72-
$langFile = self::$languageTestPath . 'test/Sync.php';
75+
$langFile = self::$languageTestPath . 'de/Sync.php';
7376

7477
$this->assertFileExists($langFile);
7578

@@ -81,9 +84,9 @@ public function testSyncDefaultLocale(): void
8184

8285
public function testSyncWithLocaleOption(): void
8386
{
84-
command('lang:sync --locale ru --target test');
87+
command('lang:sync --locale ru --target de');
8588

86-
$langFile = self::$languageTestPath . 'test/Sync.php';
89+
$langFile = self::$languageTestPath . 'de/Sync.php';
8790

8891
$this->assertFileExists($langFile);
8992

@@ -95,29 +98,21 @@ public function testSyncWithLocaleOption(): void
9598

9699
public function testSyncWithExistTranslation(): void
97100
{
98-
// First run, add new keys
99-
command('lang:sync --target test');
100-
101-
$langFile = self::$languageTestPath . 'test/Sync.php';
102-
103-
$this->assertFileExists($langFile);
104-
105-
$langKeys = include $langFile;
106-
107-
$this->assertIsArray($langKeys);
108-
$this->assertSame($this->expectedKeys, $langKeys);
109-
110-
// Second run, save old keys
111-
$oldLangKeys = [
112-
'a' => 'old value 1',
113-
'b' => 2000,
114-
'c' => null,
115-
'd' => [],
116-
'e' => '',
117-
'f' => [
118-
'g' => 'old value 2',
119-
'h' => [
120-
'i' => 'old value 3',
101+
// Save old values and add new keys from "en/Sync.php"
102+
// Add value from the old file "de/Sync.php" to new
103+
// Right sort as in "en/Sync.php"
104+
$expectedLangKeys = [
105+
'title' => 'Default title (old)',
106+
'status' => [
107+
'error' => 'Error! (old)',
108+
'done' => 'Sync.status.done',
109+
'critical' => 'Critical! (old)',
110+
],
111+
'description' => 'Sync.description',
112+
'empty_array' => [],
113+
'more' => [
114+
'nested' => [
115+
'key' => 'More nested key... (old)',
121116
],
122117
],
123118
];
@@ -126,40 +121,83 @@ public function testSyncWithExistTranslation(): void
126121
<?php
127122
128123
return [
129-
'a' => 'old value 1',
130-
'b' => 2000,
131-
'c' => null,
132-
'd' => [],
133-
'e' => '',
134-
'f' => [
135-
'g' => 'old value 2',
136-
'h' => [
137-
'i' => 'old value 3',
124+
'status' => [
125+
'critical' => 'Critical! (old)',
126+
'error' => 'Error! (old)',
127+
],
128+
'skip' => 'skip this value',
129+
'title' => 'Default title (old)',
130+
'more' => [
131+
'nested' => [
132+
'key' => 'More nested key... (old)',
138133
],
139134
],
135+
'empty_array' => [],
140136
];
141137
TEXT_WRAP;
142138

143-
file_put_contents(self::$languageTestPath . 'test/Sync.php', $lang);
139+
$langFile = self::$languageTestPath . 'de/Sync.php';
144140

145-
command('lang:sync --target test');
141+
mkdir(self::$languageTestPath . 'de', 0755);
142+
file_put_contents($langFile, $lang);
146143

147-
$langFile = self::$languageTestPath . 'test/Sync.php';
144+
command('lang:sync --target de');
148145

149146
$this->assertFileExists($langFile);
150147

151148
$langKeys = include $langFile;
149+
152150
$this->assertIsArray($langKeys);
153-
$this->assertSame($oldLangKeys, $langKeys);
151+
$this->assertSame($expectedLangKeys, $langKeys);
154152
}
155153

156154
public function testSyncWithIncorrectLocaleOption(): void
157155
{
158-
command('lang:sync --locale test_locale_incorrect --target test');
156+
command('lang:sync --locale test_locale_incorrect --target de');
159157

160158
$this->assertStringContainsString('is not supported', $this->getStreamFilterBuffer());
161159
}
162160

161+
public function testSyncWithNullableOriginalLangValue(): void
162+
{
163+
$langWithNullValue = <<<'TEXT_WRAP'
164+
<?php
165+
166+
return [
167+
'nullable' => null,
168+
];
169+
TEXT_WRAP;
170+
171+
file_put_contents(self::$languageTestPath . self::$locale . '/SyncInvalid.php', $langWithNullValue);
172+
ob_get_flush();
173+
174+
$this->expectException(LogicException::class);
175+
$this->expectExceptionMessageMatches('/Only "array" or "string" is allowed/');
176+
177+
command('lang:sync --target de');
178+
}
179+
180+
public function testSyncWithIntegerOriginalLangValue(): void
181+
{
182+
$this->resetStreamFilterBuffer();
183+
184+
$langWithIntegerValue = <<<'TEXT_WRAP'
185+
<?php
186+
187+
return [
188+
'integer' => 1000,
189+
];
190+
TEXT_WRAP;
191+
192+
file_put_contents(self::$languageTestPath . self::$locale . '/SyncInvalid.php', $langWithIntegerValue);
193+
ob_get_flush();
194+
195+
$this->expectException(LogicException::class);
196+
$this->expectExceptionMessageMatches('/Only "array" or "string" is allowed/');
197+
198+
command('lang:sync --target de');
199+
}
200+
163201
public function testSyncWithIncorrectTargetOption(): void
164202
{
165203
command('lang:sync --locale en --target test_locale_incorrect');
@@ -173,15 +211,17 @@ private function makeLanguageFiles(): void
173211
<?php
174212
175213
return [
176-
'a' => 'value 1',
177-
'b' => 2,
178-
'c' => null,
179-
'd' => [],
180-
'e' => '',
181-
'f' => [
182-
'g' => 'value 2',
183-
'h' => [
184-
'i' => 'value 3',
214+
'title' => 'Default title',
215+
'status' => [
216+
'error' => 'Error!',
217+
'done' => 'Done!',
218+
'critical' => 'Critical!',
219+
],
220+
'description' => '',
221+
'empty_array' => [],
222+
'more' => [
223+
'nested' => [
224+
'key' => 'More nested key...',
185225
],
186226
],
187227
];
@@ -193,22 +233,21 @@ private function makeLanguageFiles(): void
193233

194234
private function clearGeneratedFiles(): void
195235
{
196-
if (is_file(self::$languageTestPath . self::$locale . '/Sync.php')) {
197-
unlink(self::$languageTestPath . self::$locale . '/Sync.php');
198-
}
199-
200-
if (is_file(self::$languageTestPath . 'ru/Sync.php')) {
201-
unlink(self::$languageTestPath . 'ru/Sync.php');
202-
}
203-
204-
if (is_dir(self::$languageTestPath . 'test')) {
205-
$files = glob(self::$languageTestPath . 'test/*', GLOB_MARK);
236+
$files = [
237+
self::$languageTestPath . self::$locale . '/Sync.php',
238+
self::$languageTestPath . self::$locale . '/SyncInvalid.php',
239+
self::$languageTestPath . 'ru/Sync.php',
240+
];
206241

207-
foreach ($files as $file) {
242+
foreach ($files as $file) {
243+
if (is_file($file)) {
208244
unlink($file);
209245
}
246+
}
210247

211-
rmdir(self::$languageTestPath . 'test');
248+
if (is_dir(self::$languageTestPath . 'de')) {
249+
delete_files(self::$languageTestPath . 'de');
250+
rmdir(self::$languageTestPath . 'de');
212251
}
213252
}
214253
}

0 commit comments

Comments
 (0)