Skip to content

Commit 33e12fc

Browse files
committed
test: harden Commands random-order fixtures
Signed-off-by: memleakd <121398829+memleakd@users.noreply.github.com>
1 parent 93264b4 commit 33e12fc

4 files changed

Lines changed: 52 additions & 35 deletions

File tree

tests/system/Commands/Database/MigrateStatusTest.php

Lines changed: 13 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ final class MigrateStatusTest extends CIUnitTestCase
2929
use StreamFilterTrait;
3030
use DatabaseTestTrait;
3131

32-
private string $migrationFileFrom = SUPPORTPATH . 'MigrationTestMigrations/Database/Migrations/2018-01-24-102301_Some_migration.php';
33-
private string $migrationFileTo = APPPATH . 'Database/Migrations/2018-01-24-102301_Some_migration.php';
32+
private string $migrationNamespace = 'Tests\\Support\\MigrationTestMigrations';
33+
private string $migrationNamespacePath = SUPPORTPATH . 'MigrationTestMigrations/';
3434

3535
protected function setUp(): void
3636
{
@@ -41,25 +41,7 @@ protected function setUp(): void
4141
Database::connect()->table('migrations')->emptyTable();
4242
Database::forge()->dropTable('foo', true);
4343

44-
if (! is_file($this->migrationFileFrom)) {
45-
$this->fail(clean_path($this->migrationFileFrom) . ' is not found.');
46-
}
47-
48-
if (is_file($this->migrationFileTo)) {
49-
@unlink($this->migrationFileTo);
50-
}
51-
52-
copy($this->migrationFileFrom, $this->migrationFileTo);
53-
54-
$contents = file_get_contents($this->migrationFileTo);
55-
$contents = str_replace(
56-
'namespace Tests\Support\MigrationTestMigrations\Database\Migrations;',
57-
'namespace App\Database\Migrations;',
58-
$contents,
59-
);
60-
file_put_contents($this->migrationFileTo, $contents);
61-
62-
$this->resetServices();
44+
service('autoloader')->addNamespace($this->migrationNamespace, $this->migrationNamespacePath);
6345

6446
putenv('NO_COLOR=1');
6547
CLI::init();
@@ -70,10 +52,7 @@ protected function tearDown(): void
7052
parent::tearDown();
7153

7254
Database::connect()->table('migrations')->emptyTable();
73-
74-
if (is_file($this->migrationFileTo)) {
75-
@unlink($this->migrationFileTo);
76-
}
55+
Database::forge()->dropTable('foo', true);
7756

7857
putenv('NO_COLOR');
7958
CLI::init();
@@ -88,26 +67,29 @@ public function testMigrateAllWithWithTwoNamespaces(): void
8867

8968
command('migrate:status');
9069

91-
$this->assertMigrationStatusHasAppAndSupportMigrations();
70+
$this->assertMigrationStatusHasBothNamespaceMigrations();
9271
}
9372

9473
public function testMigrateWithWithTwoNamespaces(): void
9574
{
96-
command('migrate -n App');
75+
command('migrate -n Tests\\\\Support\\\\MigrationTestMigrations');
9776
command('migrate -n Tests\\\\Support');
9877
$this->resetStreamFilterBuffer();
9978

10079
command('migrate:status');
10180

102-
$this->assertMigrationStatusHasAppAndSupportMigrations();
81+
$this->assertMigrationStatusHasBothNamespaceMigrations();
10382
}
10483

105-
private function assertMigrationStatusHasAppAndSupportMigrations(): void
84+
private function assertMigrationStatusHasBothNamespaceMigrations(): void
10685
{
10786
$result = str_replace(PHP_EOL, "\n", $this->getStreamFilterBuffer());
10887

109-
$this->assertStringContainsString('| App | 2018-01-24-102301 | Some_migration', $result);
110-
$this->assertStringContainsString('| Tests\Support | 20160428212500', $result);
88+
$this->assertStringContainsString($this->migrationNamespace, $result);
89+
$this->assertStringContainsString('2018-01-24-102301', $result);
90+
$this->assertStringContainsString('Some_migration', $result);
91+
$this->assertStringContainsString('Tests\Support', $result);
92+
$this->assertStringContainsString('20160428212500', $result);
11193
$this->assertStringContainsString('Create_test_tables', $result);
11294
}
11395
}

tests/system/Commands/Generators/ScaffoldGeneratorTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ protected function tearDown(): void
4444

4545
private function removeGeneratedFiles(): void
4646
{
47-
preg_match_all('/File (?:created|overwritten): (APPPATH[^\r\n]+)/', $this->getStreamFilterBuffer(), $matches);
47+
preg_match_all('/File (?:created|overwritten): (APPPATH[^\r\n\x1b]+)/', $this->getStreamFilterBuffer(), $matches);
4848

4949
foreach ($matches[1] as $file) {
5050
$path = str_replace('APPPATH' . DIRECTORY_SEPARATOR, APPPATH, $file);

tests/system/Commands/Translation/LocalizationFinderTest.php

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,36 @@ final class LocalizationFinderTest extends CIUnitTestCase
2929

3030
private static string $locale;
3131
private static string $languageTestPath;
32+
private string $originalLocale;
33+
34+
/**
35+
* @var list<string>
36+
*/
37+
private array $originalSupportedLocales;
3238

3339
protected function setUp(): void
3440
{
3541
parent::setUp();
36-
self::$locale = Locale::getDefault();
42+
43+
$this->originalLocale = Locale::getDefault();
44+
Locale::setDefault('en');
45+
46+
$appConfig = config(App::class);
47+
$this->originalSupportedLocales = $appConfig->supportedLocales;
48+
$appConfig->supportedLocales = ['en', 'ru', 'de'];
49+
50+
self::$locale = 'en';
3751
self::$languageTestPath = SUPPORTPATH . 'Language' . DIRECTORY_SEPARATOR;
52+
$this->clearGeneratedFiles();
3853
}
3954

4055
protected function tearDown(): void
4156
{
4257
parent::tearDown();
58+
4359
$this->clearGeneratedFiles();
60+
Locale::setDefault($this->originalLocale);
61+
config(App::class)->supportedLocales = $this->originalSupportedLocales;
4462
}
4563

4664
public function testUpdateDefaultLocale(): void

tests/system/Commands/Translation/LocalizationSyncTest.php

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@ final class LocalizationSyncTest extends CIUnitTestCase
3232

3333
private static string $locale;
3434
private static string $languageTestPath;
35+
private string $originalLocale;
36+
37+
/**
38+
* @var list<string>
39+
*/
40+
private array $originalSupportedLocales;
3541

3642
/**
3743
* @var array<string, array<string,mixed>|string|null>
@@ -56,10 +62,16 @@ protected function setUp(): void
5662
{
5763
parent::setUp();
5864

59-
config(App::class)->supportedLocales = ['en', 'ru', 'de'];
65+
$this->originalLocale = Locale::getDefault();
66+
Locale::setDefault('en');
6067

61-
self::$locale = Locale::getDefault();
68+
$appConfig = config(App::class);
69+
$this->originalSupportedLocales = $appConfig->supportedLocales;
70+
$appConfig->supportedLocales = ['en', 'ru', 'de'];
71+
72+
self::$locale = 'en';
6273
self::$languageTestPath = SUPPORTPATH . 'Language/';
74+
$this->clearGeneratedFiles();
6375
$this->makeLanguageFiles();
6476
}
6577

@@ -68,6 +80,8 @@ protected function tearDown(): void
6880
parent::tearDown();
6981

7082
$this->clearGeneratedFiles();
83+
Locale::setDefault($this->originalLocale);
84+
config(App::class)->supportedLocales = $this->originalSupportedLocales;
7185
}
7286

7387
public function testSyncDefaultLocale(): void
@@ -247,6 +261,9 @@ private function makeLanguageFiles(): void
247261
];
248262
TEXT_WRAP;
249263

264+
@mkdir(self::$languageTestPath . self::$locale, 0777, true);
265+
@mkdir(self::$languageTestPath . 'ru', 0777, true);
266+
250267
file_put_contents(self::$languageTestPath . self::$locale . '/Sync.php', $lang);
251268
file_put_contents(self::$languageTestPath . 'ru/Sync.php', $lang);
252269
}

0 commit comments

Comments
 (0)