From 58dcb82ad37a96298711edd2b30cd4ffdbd04299 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Heimb=C3=B6ck?= Date: Thu, 4 Dec 2025 09:07:24 +0100 Subject: [PATCH 1/3] add pre-migration hook when setting up databases in parallel tests --- .../Support/Facades/ParallelTesting.php | 2 ++ .../Testing/Concerns/TestDatabases.php | 4 +++ src/Illuminate/Testing/ParallelTesting.php | 36 +++++++++++++++++++ tests/Testing/ParallelTestingTest.php | 1 + 4 files changed, 43 insertions(+) diff --git a/src/Illuminate/Support/Facades/ParallelTesting.php b/src/Illuminate/Support/Facades/ParallelTesting.php index d91558c1cb80..058ad52b4ac0 100644 --- a/src/Illuminate/Support/Facades/ParallelTesting.php +++ b/src/Illuminate/Support/Facades/ParallelTesting.php @@ -7,11 +7,13 @@ * @method static void resolveTokenUsing(\Closure|null $resolver) * @method static void setUpProcess(callable $callback) * @method static void setUpTestCase(callable $callback) + * @method static void setUpTestDatabasePreMigration(callable $callback) * @method static void setUpTestDatabase(callable $callback) * @method static void tearDownProcess(callable $callback) * @method static void tearDownTestCase(callable $callback) * @method static void callSetUpProcessCallbacks() * @method static void callSetUpTestCaseCallbacks(\Illuminate\Foundation\Testing\TestCase $testCase) + * @method static void callSetUpTestDatabasePreMigrationCallbacks(string $database) * @method static void callSetUpTestDatabaseCallbacks(string $database) * @method static void callTearDownProcessCallbacks() * @method static void callTearDownTestCaseCallbacks(\Illuminate\Foundation\Testing\TestCase $testCase) diff --git a/src/Illuminate/Testing/Concerns/TestDatabases.php b/src/Illuminate/Testing/Concerns/TestDatabases.php index bf1b910e3b7d..f71b9292ebdd 100644 --- a/src/Illuminate/Testing/Concerns/TestDatabases.php +++ b/src/Illuminate/Testing/Concerns/TestDatabases.php @@ -59,6 +59,10 @@ protected function bootTestDatabase() $this->switchToDatabase($testDatabase); + if ($created) { + ParallelTesting::callSetUpTestDatabasePreMigrationCallbacks($testDatabase); + } + if (isset($uses[Testing\DatabaseTransactions::class])) { $this->ensureSchemaIsUpToDate(); } diff --git a/src/Illuminate/Testing/ParallelTesting.php b/src/Illuminate/Testing/ParallelTesting.php index 736aea91a880..f73170bda570 100644 --- a/src/Illuminate/Testing/ParallelTesting.php +++ b/src/Illuminate/Testing/ParallelTesting.php @@ -42,6 +42,13 @@ class ParallelTesting */ protected $setUpTestCaseCallbacks = []; + /** + * All of the registered "setUp" test database callbacks prior the migrations. + * + * @var array + */ + protected $setUpTestDatabasePreMigrationCallbacks = []; + /** * All of the registered "setUp" test database callbacks. * @@ -117,6 +124,17 @@ public function setUpTestCase($callback) $this->setUpTestCaseCallbacks[] = $callback; } + /** + * Register a "setUp" test database prior the migration callback. + * + * @param callable $callback + * @return void + */ + public function setUpTestDatabasePreMigration($callback) + { + $this->setUpTestDatabasePreMigrationCallbacks[] = $callback; + } + /** * Register a "setUp" test database callback. * @@ -184,6 +202,24 @@ public function callSetUpTestCaseCallbacks($testCase) }); } + /** + * Call all of the "setUp" test database callbacks. + * + * @param string $database + * @return void + */ + public function callSetUpTestDatabasePreMigrationCallbacks($database) + { + $this->whenRunningInParallel(function () use ($database) { + foreach ($this->setUpTestDatabasePreMigrationCallbacks as $callback) { + $this->container->call($callback, [ + 'database' => $database, + 'token' => $this->token(), + ]); + } + }); + } + /** * Call all of the "setUp" test database callbacks. * diff --git a/tests/Testing/ParallelTestingTest.php b/tests/Testing/ParallelTestingTest.php index f34b25da6a6d..d6072521ed88 100644 --- a/tests/Testing/ParallelTestingTest.php +++ b/tests/Testing/ParallelTestingTest.php @@ -91,6 +91,7 @@ public static function callbacks() ['setUpProcess'], ['setUpTestCase'], ['setUpTestDatabase'], + ['setUpTestDatabasePreMigration'], ['tearDownTestCase'], ['tearDownProcess'], ]; From 89ada1e26cc674908a2d75be0ce3eb6b44fed355 Mon Sep 17 00:00:00 2001 From: Taylor Otwell Date: Sun, 7 Dec 2025 10:03:09 -0600 Subject: [PATCH 2/3] formatting --- src/Illuminate/Support/Facades/ParallelTesting.php | 4 ++-- src/Illuminate/Testing/Concerns/TestDatabases.php | 2 +- src/Illuminate/Testing/ParallelTesting.php | 14 +++++++------- tests/Testing/ParallelTestingTest.php | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/Illuminate/Support/Facades/ParallelTesting.php b/src/Illuminate/Support/Facades/ParallelTesting.php index 058ad52b4ac0..4a2289013966 100644 --- a/src/Illuminate/Support/Facades/ParallelTesting.php +++ b/src/Illuminate/Support/Facades/ParallelTesting.php @@ -7,13 +7,13 @@ * @method static void resolveTokenUsing(\Closure|null $resolver) * @method static void setUpProcess(callable $callback) * @method static void setUpTestCase(callable $callback) - * @method static void setUpTestDatabasePreMigration(callable $callback) + * @method static void setUpTestDatabaseBeforeMigrating(callable $callback) * @method static void setUpTestDatabase(callable $callback) * @method static void tearDownProcess(callable $callback) * @method static void tearDownTestCase(callable $callback) * @method static void callSetUpProcessCallbacks() * @method static void callSetUpTestCaseCallbacks(\Illuminate\Foundation\Testing\TestCase $testCase) - * @method static void callSetUpTestDatabasePreMigrationCallbacks(string $database) + * @method static void callSetUpTestDatabaseBeforeMigratingCallbacks(string $database) * @method static void callSetUpTestDatabaseCallbacks(string $database) * @method static void callTearDownProcessCallbacks() * @method static void callTearDownTestCaseCallbacks(\Illuminate\Foundation\Testing\TestCase $testCase) diff --git a/src/Illuminate/Testing/Concerns/TestDatabases.php b/src/Illuminate/Testing/Concerns/TestDatabases.php index f71b9292ebdd..a273ed1299f4 100644 --- a/src/Illuminate/Testing/Concerns/TestDatabases.php +++ b/src/Illuminate/Testing/Concerns/TestDatabases.php @@ -60,7 +60,7 @@ protected function bootTestDatabase() $this->switchToDatabase($testDatabase); if ($created) { - ParallelTesting::callSetUpTestDatabasePreMigrationCallbacks($testDatabase); + ParallelTesting::callSetUpTestDatabaseBeforeMigratingCallbacks($testDatabase); } if (isset($uses[Testing\DatabaseTransactions::class])) { diff --git a/src/Illuminate/Testing/ParallelTesting.php b/src/Illuminate/Testing/ParallelTesting.php index f73170bda570..0b84c0902d83 100644 --- a/src/Illuminate/Testing/ParallelTesting.php +++ b/src/Illuminate/Testing/ParallelTesting.php @@ -47,7 +47,7 @@ class ParallelTesting * * @var array */ - protected $setUpTestDatabasePreMigrationCallbacks = []; + protected $setUpTestDatabaseBeforeMigratingCallbacks = []; /** * All of the registered "setUp" test database callbacks. @@ -125,14 +125,14 @@ public function setUpTestCase($callback) } /** - * Register a "setUp" test database prior the migration callback. + * Register a "setUp" test database callback that runs prior to the migrations. * * @param callable $callback * @return void */ - public function setUpTestDatabasePreMigration($callback) + public function setUpTestDatabaseBeforeMigrating($callback) { - $this->setUpTestDatabasePreMigrationCallbacks[] = $callback; + $this->setUpTestDatabaseBeforeMigratingCallbacks[] = $callback; } /** @@ -203,15 +203,15 @@ public function callSetUpTestCaseCallbacks($testCase) } /** - * Call all of the "setUp" test database callbacks. + * Call all of the "setUp" test database callbacks that run prior to migrations. * * @param string $database * @return void */ - public function callSetUpTestDatabasePreMigrationCallbacks($database) + public function callSetUpTestDatabaseBeforeMigratingCallbacks($database) { $this->whenRunningInParallel(function () use ($database) { - foreach ($this->setUpTestDatabasePreMigrationCallbacks as $callback) { + foreach ($this->setUpTestDatabaseBeforeMigratingCallbacks as $callback) { $this->container->call($callback, [ 'database' => $database, 'token' => $this->token(), diff --git a/tests/Testing/ParallelTestingTest.php b/tests/Testing/ParallelTestingTest.php index d6072521ed88..5845a7b8c9ca 100644 --- a/tests/Testing/ParallelTestingTest.php +++ b/tests/Testing/ParallelTestingTest.php @@ -91,7 +91,7 @@ public static function callbacks() ['setUpProcess'], ['setUpTestCase'], ['setUpTestDatabase'], - ['setUpTestDatabasePreMigration'], + ['setUpTestDatabaseBeforeMigrating'], ['tearDownTestCase'], ['tearDownProcess'], ]; From 2743e79d6b541f521392e5ccca5d88befb55a2ad Mon Sep 17 00:00:00 2001 From: Taylor Otwell Date: Sun, 7 Dec 2025 10:03:37 -0600 Subject: [PATCH 3/3] formatting --- src/Illuminate/Testing/ParallelTesting.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Illuminate/Testing/ParallelTesting.php b/src/Illuminate/Testing/ParallelTesting.php index 0b84c0902d83..2efee59eff41 100644 --- a/src/Illuminate/Testing/ParallelTesting.php +++ b/src/Illuminate/Testing/ParallelTesting.php @@ -43,7 +43,7 @@ class ParallelTesting protected $setUpTestCaseCallbacks = []; /** - * All of the registered "setUp" test database callbacks prior the migrations. + * All of the registered "setUp" test database callbacks prior to the migrations. * * @var array */