From b68c3a5836ac18297c9af10c150b5be20bcb0877 Mon Sep 17 00:00:00 2001 From: Daniel Kesselberg Date: Wed, 3 Feb 2021 19:40:08 +0100 Subject: [PATCH] Add test for dbal exception wrapping Signed-off-by: Daniel Kesselberg --- tests/lib/DB/Exception/DbalExceptionTest.php | 87 ++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 tests/lib/DB/Exception/DbalExceptionTest.php diff --git a/tests/lib/DB/Exception/DbalExceptionTest.php b/tests/lib/DB/Exception/DbalExceptionTest.php new file mode 100644 index 0000000000..0cb8ebf046 --- /dev/null +++ b/tests/lib/DB/Exception/DbalExceptionTest.php @@ -0,0 +1,87 @@ + + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see + * + */ + +namespace Test\DB\Exception; + +use Doctrine\DBAL\ConnectionException; +use Doctrine\DBAL\Driver\Exception as TheDriverException; +use Doctrine\DBAL\Exception\ConstraintViolationException; +use Doctrine\DBAL\Exception\DatabaseObjectExistsException; +use Doctrine\DBAL\Exception\DatabaseObjectNotFoundException; +use Doctrine\DBAL\Exception\DeadlockException; +use Doctrine\DBAL\Exception\DriverException; +use Doctrine\DBAL\Exception\ForeignKeyConstraintViolationException; +use Doctrine\DBAL\Exception\InvalidArgumentException; +use Doctrine\DBAL\Exception\InvalidFieldNameException; +use Doctrine\DBAL\Exception\NonUniqueFieldNameException; +use Doctrine\DBAL\Exception\NotNullConstraintViolationException; +use Doctrine\DBAL\Exception\ServerException; +use Doctrine\DBAL\Exception\SyntaxErrorException; +use Doctrine\DBAL\Exception\UniqueConstraintViolationException; +use OC\DB\Exceptions\DbalException; + +class DbalExceptionTest extends \Test\TestCase { + + /** @var TheDriverException */ + protected $driverException; + + protected function setUp(): void { + parent::setUp(); + $this->driverException = $this->createMock(TheDriverException::class); + } + + /** + * @dataProvider dataDriverException + * @param string $class + * @param int $reason + */ + public function testDriverException(string $class, int $reason): void { + $result = DbalException::wrap(new $class($this->driverException, null)); + $this->assertSame($reason, $result->getReason()); + } + + public function dataDriverException(): array { + return [ + [ForeignKeyConstraintViolationException::class, DbalException::REASON_FOREIGN_KEY_VIOLATION], + [NotNullConstraintViolationException::class, DbalException::REASON_NOT_NULL_CONSTRAINT_VIOLATION], + [UniqueConstraintViolationException::class, DbalException::REASON_UNIQUE_CONSTRAINT_VIOLATION], + [ConstraintViolationException::class, DbalException::REASON_CONSTRAINT_VIOLATION], + [DatabaseObjectExistsException::class, DbalException::REASON_DATABASE_OBJECT_EXISTS], + [DatabaseObjectNotFoundException::class, DbalException::REASON_DATABASE_OBJECT_NOT_FOUND], + [DeadlockException::class, DbalException::REASON_DEADLOCK], + [InvalidFieldNameException::class, DbalException::REASON_INVALID_FIELD_NAME], + [NonUniqueFieldNameException::class, DbalException::REASON_NON_UNIQUE_FIELD_NAME], + [SyntaxErrorException::class, DbalException::REASON_SYNTAX_ERROR], + [ServerException::class, DbalException::REASON_SERVER], + [DriverException::class, DbalException::REASON_DRIVER], + ]; + } + + public function testConnectionException(): void { + $result = DbalException::wrap(ConnectionException::noActiveTransaction()); + $this->assertSame(DbalException::REASON_CONNECTION_LOST, $result->getReason()); + } + + public function testInvalidArgumentException(): void { + $result = DbalException::wrap(InvalidArgumentException::fromEmptyCriteria()); + $this->assertSame(DbalException::REASON_INVALID_ARGUMENT, $result->getReason()); + } +}