packages/ztd-query-core/tests/Unit/Connection/Exception/DatabaseExceptionTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Connection\Exception;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use RuntimeException;
10use ZtdQuery\Connection\Exception\DatabaseException;
11
12#[CoversClass(DatabaseException::class)]
13final class DatabaseExceptionTest extends TestCase
14{
15 public function testCarriesEverythingADriverSaidAboutTheFailure(): void
16 {
17 $previous = new RuntimeException('root cause');
18 $exception = new DatabaseException('Query failed', 1045, 42, $previous);
19
20 self::assertSame('Query failed', $exception->getMessage());
21 self::assertSame(1045, $exception->getDriverErrorCode());
22 self::assertSame(42, $exception->getCode());
23 self::assertSame($previous, $exception->getPrevious());
24 }
25
26 public function testCarriesNothingTheDriverDidNotSay(): void
27 {
28 $exception = new DatabaseException('Error');
29
30 self::assertSame('Error', $exception->getMessage());
31 self::assertNull($exception->getDriverErrorCode());
32 self::assertSame(0, $exception->getCode());
33 self::assertNull($exception->getPrevious());
34 }
35
36 public function testGetDriverErrorCodeReturnsNull(): void
37 {
38 $exception = new DatabaseException('No driver code');
39
40 self::assertNull($exception->getDriverErrorCode());
41 }
42
43 public function testGetDriverErrorCodeReturnsCode(): void
44 {
45 $exception = new DatabaseException('Driver error', 2002);
46
47 self::assertSame(2002, $exception->getDriverErrorCode());
48 }
49}
50