packages/ztd-query-sqlite/tests/Unit/Connection/SqliteErrorClassifierTest.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\Sqlite\Connection\SqliteErrorClassifier;
11
12#[CoversClass(SqliteErrorClassifier::class)]
13final class SqliteErrorClassifierTest extends TestCase
14{
15 public function testIsUnknownSchemaErrorNoSuchTableIsUnknownSchemaError(): void
16 {
17 $classifier = new SqliteErrorClassifier();
18 $e = new DatabaseException('no such table: users', 1);
19 self::assertTrue($classifier->isUnknownSchemaError($e));
20 }
21
22 public function testNoSuchColumnIsUnknownSchemaError(): void
23 {
24 $classifier = new SqliteErrorClassifier();
25 $e = new DatabaseException('no such column: name', 1);
26 self::assertTrue($classifier->isUnknownSchemaError($e));
27 }
28
29 public function testHasNoColumnNamedIsUnknownSchemaError(): void
30 {
31 $classifier = new SqliteErrorClassifier();
32 $e = new DatabaseException('table users has no column named foo', 1);
33 self::assertTrue($classifier->isUnknownSchemaError($e));
34 }
35
36 public function testSyntaxErrorIsNotUnknownSchemaError(): void
37 {
38 $classifier = new SqliteErrorClassifier();
39 $e = new DatabaseException('near "SELCT": syntax error', 1);
40 self::assertFalse($classifier->isUnknownSchemaError($e));
41 }
42
43 public function testConstraintViolationIsNotUnknownSchemaError(): void
44 {
45 $classifier = new SqliteErrorClassifier();
46 $e = new DatabaseException('UNIQUE constraint failed: users.email', 19);
47 self::assertFalse($classifier->isUnknownSchemaError($e));
48 }
49
50 public function testNullDriverCodeIsNotUnknownSchemaError(): void
51 {
52 $classifier = new SqliteErrorClassifier();
53 $e = new DatabaseException('some error', null);
54 self::assertFalse($classifier->isUnknownSchemaError($e));
55 }
56
57 public function testNonSqliteErrorCodeIsNotUnknownSchemaError(): void
58 {
59 $classifier = new SqliteErrorClassifier();
60 $e = new DatabaseException('some error', 999);
61 self::assertFalse($classifier->isUnknownSchemaError($e));
62 }
63
64 public function testUppercaseNoSuchTableIsUnknownSchemaError(): void
65 {
66 $classifier = new SqliteErrorClassifier();
67 $e = new DatabaseException('No Such Table: users', 1);
68 self::assertTrue($classifier->isUnknownSchemaError($e));
69 }
70
71 public function testUppercaseNoSuchColumnIsUnknownSchemaError(): void
72 {
73 $classifier = new SqliteErrorClassifier();
74 $e = new DatabaseException('No Such Column: name', 1);
75 self::assertTrue($classifier->isUnknownSchemaError($e));
76 }
77
78 public function testUppercaseHasNoColumnNamedIsUnknownSchemaError(): void
79 {
80 $classifier = new SqliteErrorClassifier();
81 $e = new DatabaseException('Table users Has No Column Named foo', 1);
82 self::assertTrue($classifier->isUnknownSchemaError($e));
83 }
84
85 public function testNullDriverCodeReturnsFalseNotNull(): void
86 {
87 $classifier = new SqliteErrorClassifier();
88 $e = new DatabaseException('no such table: users', null);
89 $result = $classifier->isUnknownSchemaError($e);
90 self::assertFalse($result);
91 }
92}
93