DatabaseTransactions
trait DatabaseTransactions
Traits
Provides per-worker database isolation for parallel testing.
Properties
| static protected string|null | $originalDatabaseName | The original database name before parallel suffixing. |
from InteractsWithParallelDatabase |
Methods
Rewrite the default connection's database name for parallel testing.
Ensure the per-worker database exists, creating it if needed.
Determine if the database should be managed for parallel testing.
Get the per-worker test database name.
Handle database transactions on the specified connections.
Start database transaction in the test coroutine.
Rollback database transaction in the test coroutine.
Start transactions on all connections.
Rollback transactions on all connections.
The database connections that should have transactions.
Details
in
InteractsWithParallelDatabase at line 45
protected void
configureParallelDatabaseName(mixed $app)
Rewrite the default connection's database name for parallel testing.
Config-only — does not create connections or purge pools. Called early in CreatesApplication (after config is loaded, before defineEnvironment) so that custom connections derived from the default connection inherit the per-worker database name.
No-op when not running in parallel or when using in-memory SQLite.
in
InteractsWithParallelDatabase at line 86
protected void
ensureParallelDatabaseExists()
Ensure the per-worker database exists, creating it if needed.
Called from database testing traits (RefreshDatabase, DatabaseMigrations, DatabaseTransactions) after the app is booted and connections are available. The config has already been rewritten by configureParallelDatabaseName().
No-op when not running in parallel or when using in-memory SQLite.
in
InteractsWithParallelDatabase at line 132
protected bool
shouldManageParallelDatabase(mixed $driver, string $database)
Determine if the database should be managed for parallel testing.
in
InteractsWithParallelDatabase at line 159
protected string
parallelTestDatabase(string $database, string $token)
Get the per-worker test database name.
at line 25
void
beginDatabaseTransaction()
Handle database transactions on the specified connections.
For tests using RunTestsInCoroutine, this method does nothing - the actual transaction work is done in setUpDatabaseTransactionsInCoroutine() to keep all transaction state in the same coroutine.
For non-coroutine tests, this starts the transaction immediately and registers a rollback callback.
at line 47
protected void
setUpDatabaseTransactionsInCoroutine()
Start database transaction in the test coroutine.
Called by RunTestsInCoroutine before the test runs. Keeps all transaction state in the same coroutine, avoiding Context handoff issues.
at line 57
protected void
tearDownDatabaseTransactionsInCoroutine()
Rollback database transaction in the test coroutine.
Called by RunTestsInCoroutine after the test runs.
at line 65
protected void
beginDatabaseTransactionWork()
Start transactions on all connections.
at line 96
protected void
rollbackDatabaseTransactionWork()
Rollback transactions on all connections.
at line 121
protected array
connectionsToTransact()
The database connections that should have transactions.