not->toContain("SELECT @@in_transaction") ->and($body)->toContain('inTransaction()'); }); test('PDO reports transaction state identically regardless of engine', function () { $pdo = new PDO('sqlite::memory:', null, null, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]); expect($pdo->inTransaction())->toBeFalse(); $pdo->beginTransaction(); expect($pdo->inTransaction())->toBeTrue(); expect($pdo->commit())->toBeTrue() ->and($pdo->inTransaction())->toBeFalse(); }); test('committing without an open transaction is refused rather than fatal', function () { $pdo = new PDO('sqlite::memory:', null, null, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]); // The guard exists because PDO::commit() throws when nothing is open. expect($pdo->inTransaction())->toBeFalse(); });