packages/ztd-query-pdo-adapter/tests/Integration/SqliteDriverDetectionTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Integration;
6
7use PDO;
8use PHPUnit\Framework\Attributes\CoversNothing;
9use PHPUnit\Framework\Attributes\Large;
10use PHPUnit\Framework\TestCase;
11use ZtdQuery\Adapter\Pdo\ZtdPdo;
12use ZtdQuery\Config\ZtdConfig;
13use ZtdQuery\Platform\Sqlite\SqliteSessionFactory;
14
15/**
16 * @requires extension pdo_sqlite
17 */
18#[CoversNothing]
19#[Large]
20final class SqliteDriverDetectionTest extends TestCase
21{
22    public function testAutoDetectionCreatesSqliteSession(): void
23    {
24        $pdo = new PDO('sqlite::memory:', null, null, [
25            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
26        ]);
27
28        $ztdPdo = ZtdPdo::fromPdo($pdo);
29
30        self::assertTrue($ztdPdo->isZtdEnabled());
31    }
32
33    public function testExplicitSessionFactoryInjection(): void
34    {
35        $pdo = new PDO('sqlite::memory:', null, null, [
36            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
37        ]);
38
39        $factory = new SqliteSessionFactory();
40        $ztdPdo = ZtdPdo::fromPdo($pdo, null, $factory);
41
42        self::assertTrue($ztdPdo->isZtdEnabled());
43    }
44
45    public function testAConnectionOpenedByDsnReadsItsPlatformOffTheDriver(): void
46    {
47        $ztdPdo = new ZtdPdo('sqlite::memory:', null, null, [
48            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
49        ]);
50
51        self::assertTrue($ztdPdo->isZtdEnabled());
52    }
53
54    public function testAConnectionOpenedByDsnUsesThePlatformItIsGiven(): void
55    {
56        $factory = new SqliteSessionFactory();
57        $ztdPdo = new ZtdPdo('sqlite::memory:', null, null, [
58            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
59        ], null, $factory);
60
61        self::assertTrue($ztdPdo->isZtdEnabled());
62    }
63
64    public function testCustomConfigPassedToSession(): void
65    {
66        $config = ZtdConfig::default();
67        $pdo = new PDO('sqlite::memory:', null, null, [
68            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
69        ]);
70
71        $ztdPdo = ZtdPdo::fromPdo($pdo, $config);
72
73        self::assertTrue($ztdPdo->isZtdEnabled());
74    }
75}
76