summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorDaniel Kesselberg <mail@danielkesselberg.de>2021-02-03 19:40:08 +0100
committerDaniel Kesselberg <mail@danielkesselberg.de>2021-02-03 19:43:52 +0100
commitb68c3a5836ac18297c9af10c150b5be20bcb0877 (patch)
treea5e5e104d1d14f650feb6ad611213e23c303ba2e /tests
parent3e35d2c394f65d327ac90dd83bacecd0b6a035bf (diff)
downloadnextcloud-server-b68c3a5836ac18297c9af10c150b5be20bcb0877.tar.gz
nextcloud-server-b68c3a5836ac18297c9af10c150b5be20bcb0877.zip
Add test for dbal exception wrapping
Signed-off-by: Daniel Kesselberg <mail@danielkesselberg.de>
Diffstat (limited to 'tests')
-rw-r--r--tests/lib/DB/Exception/DbalExceptionTest.php87
1 files changed, 87 insertions, 0 deletions
diff --git a/tests/lib/DB/Exception/DbalExceptionTest.php b/tests/lib/DB/Exception/DbalExceptionTest.php
new file mode 100644
index 00000000000..0cb8ebf046c
--- /dev/null
+++ b/tests/lib/DB/Exception/DbalExceptionTest.php
@@ -0,0 +1,87 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @author Daniel Kesselberg <mail@danielkesselberg.de>
+ *
+ * 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 <http://www.gnu.org/licenses/>
+ *
+ */
+
+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());
+ }
+}