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