From e21875aaa3fe086609a3fa1ec8867ea8d74fa19f Mon Sep 17 00:00:00 2001 From: Simon Podlipsky Date: Sat, 19 Oct 2024 12:12:38 +0200 Subject: [PATCH] Cover scenario `BEGIN TRANSACTION; COMMIT; BEGIN TRANSACTION --failure; https://github.com/doctrine/dbal/pull/6545#issuecomment-2412377607 --- tests/ConnectionTest.php | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tests/ConnectionTest.php b/tests/ConnectionTest.php index 225c8def34..49986058b8 100644 --- a/tests/ConnectionTest.php +++ b/tests/ConnectionTest.php @@ -32,6 +32,7 @@ use PHPUnit\Framework\TestCase; use Psr\Cache\CacheItemInterface; use Psr\Cache\CacheItemPoolInterface; +use RuntimeException; use stdClass; /** @requires extension pdo_mysql */ @@ -455,6 +456,35 @@ public function testCommitStartsTransactionInNoAutoCommitMode(): void self::assertTrue($conn->isTransactionActive()); } + public function testBeginTransactionFailureAfterCommitInNoAutoCommitMode(): void + { + $driverConnectionMock = $this->createMock(DriverConnection::class); + $driverConnectionMock->expects(self::exactly(2)) + ->method('beginTransaction') + ->willReturnOnConsecutiveCalls( + true, + self::throwException(new RuntimeException()), + ); + + $driverMock = $this->createMock(Driver::class); + $driverMock + ->method('connect') + ->willReturn( + $driverConnectionMock, + ); + $conn = new Connection([], $driverMock); + + $conn->setAutoCommit(false); + + $conn->connect(); + try { + $conn->commit(); + } catch (RuntimeException $e) { + } + + self::assertTrue($conn->isTransactionActive()); + } + /** @dataProvider resultProvider */ public function testCommitReturn(bool $expectedResult): void {