packages/ztd-query-pdo-adapter/tests/Integration/Sqlite/DropTableTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Integration\Sqlite;
6
7use PDO;
8use PHPUnit\Framework\Attributes\CoversNothing;
9use PHPUnit\Framework\Attributes\Large;
10use PHPUnit\Framework\TestCase;
11use ZtdQuery\Adapter\Pdo\ZtdPdo;
12
13/**
14 * @requires extension pdo_sqlite
15 *
16 * @phpstan-type Row array<string, mixed>
17 */
18#[CoversNothing]
19#[Large]
20final class DropTableTest extends TestCase
21{
22    public function testDropTableRemovesFromRegistry(): void
23    {
24        $rawPdo = new PDO('sqlite::memory:', null, null, [
25            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
26            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
27        ]);
28
29        $rawPdo->exec('CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT NOT NULL)');
30        $rawPdo->exec("INSERT INTO users (id, name) VALUES (1, 'Alice')");
31
32        $ztdPdo = ZtdPdo::fromPdo($rawPdo);
33
34        $ztdPdo->exec("INSERT INTO users (id, name) VALUES (1, 'Alice')");
35
36        $stmt = $ztdPdo->query('SELECT * FROM users');
37        self::assertNotFalse($stmt);
38        /** @var list<Row> $rows */
39        $rows = $stmt->fetchAll();
40        self::assertCount(1, $rows);
41
42        $ztdPdo->exec('DROP TABLE users');
43
44        $stmt = $rawPdo->query('SELECT * FROM users');
45        self::assertNotFalse($stmt);
46        /** @var list<Row> $rawRows */
47        $rawRows = $stmt->fetchAll();
48        self::assertCount(1, $rawRows);
49    }
50
51    public function testDropTableIfExists(): void
52    {
53        $rawPdo = new PDO('sqlite::memory:', null, null, [
54            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
55            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
56        ]);
57
58        $ztdPdo = ZtdPdo::fromPdo($rawPdo, null);
59
60        $ztdPdo->exec('DROP TABLE IF EXISTS users');
61        self::addToAssertionCount(1);
62    }
63}
64