test(integration): cover query failure state cleanup
This commit is contained in:
@@ -69,6 +69,10 @@ final class ModelTransactionTest extends TestCase
|
||||
User::beginTransaction();
|
||||
$user = self::seed('wrecked_carol');
|
||||
|
||||
// Dirty the builder BEFORE failing: only a leftover-free result after
|
||||
// the exception proves query() itself cleaned up (finding F2).
|
||||
User::where('age', '>', '30');
|
||||
|
||||
try {
|
||||
(new ReflectionMethod(User::class, 'query'))
|
||||
->invokeArgs(null, ['SELECT * FROM table_that_does_not_exist']);
|
||||
@@ -78,6 +82,14 @@ final class ModelTransactionTest extends TestCase
|
||||
}
|
||||
|
||||
$this->assertFalse(self::db()->inTransaction(), 'the exception path must close the transaction');
|
||||
|
||||
$sqlAfterFailure = (new ReflectionMethod(User::class, 'buildQuery'))->invoke(null);
|
||||
$this->assertSame(
|
||||
'SELECT * FROM users',
|
||||
$sqlAfterFailure,
|
||||
'a failed query must leave the builder at its default state'
|
||||
);
|
||||
|
||||
$this->assertNull(User::where('username', 'wrecked_carol')->getFirst(), 'pending insert must be undone');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user