packages/ztd-query-mysql/tests/Unit/Connection/MySqlErrorClassifierTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Connection;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use ZtdQuery\Connection\Exception\DatabaseException;
10use ZtdQuery\Platform\MySql\Connection\MySqlErrorClassifier;
11
12#[CoversClass(MySqlErrorClassifier::class)]
13final class MySqlErrorClassifierTest extends TestCase
14{
15    public function testIsUnknownSchemaErrorUnknownColumnErrorIsClassifiedAsUnknownSchema(): void
16    {
17        $classifier = new MySqlErrorClassifier();
18        $exception = new DatabaseException('Unknown column', 1054);
19        self::assertTrue($classifier->isUnknownSchemaError($exception));
20    }
21
22    public function testTableNotExistsErrorIsClassifiedAsUnknownSchema(): void
23    {
24        $classifier = new MySqlErrorClassifier();
25        $exception = new DatabaseException('Table does not exist', 1146);
26        self::assertTrue($classifier->isUnknownSchemaError($exception));
27    }
28
29    public function testUndeclaredVariableErrorIsClassifiedAsUnknownSchema(): void
30    {
31        $classifier = new MySqlErrorClassifier();
32        $exception = new DatabaseException('Undeclared variable', 1327);
33        self::assertTrue($classifier->isUnknownSchemaError($exception));
34    }
35
36    public function testNonSchemaErrorIsNotClassifiedAsUnknownSchema(): void
37    {
38        $classifier = new MySqlErrorClassifier();
39        $exception = new DatabaseException('Syntax error', 1064);
40        self::assertFalse($classifier->isUnknownSchemaError($exception));
41    }
42
43    public function testNullDriverCodeReturnsFalse(): void
44    {
45        $classifier = new MySqlErrorClassifier();
46        $exception = new DatabaseException('Unknown error', null);
47        self::assertFalse($classifier->isUnknownSchemaError($exception));
48    }
49}
50