packages/ztd-query-mysql/tests/Unit/Rewrite/Validation/ReplaceColumnsTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Rewrite\Validation;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use ZtdQuery\Platform\MySql\Rewrite\Validation\ReplaceColumns;
10
11#[CoversClass(ReplaceColumns::class)]
12final class ReplaceColumnsTest extends TestCase
13{
14    public function testEnsureReplaceColumns(): void
15    {
16        $statement = (new \PhpMyAdmin\SqlParser\Parser('REPLACE INTO users VALUES (1)'))->statements[0];
17        self::assertInstanceOf(\PhpMyAdmin\SqlParser\Statements\ReplaceStatement::class, $statement);
18        $columns = new ReplaceColumns(new \ZtdQuery\Schema\TableDefinitionRegistry(), new \ZtdQuery\Shadow\ShadowStore());
19        $this->expectException(\ZtdQuery\Exception\UnsupportedSqlException::class);
20        $this->expectExceptionMessage('Cannot determine columns');
21        $columns->ensureReplaceColumns($statement, $statement->build());
22    }
23
24    public function testResolveIntoTableName(): void
25    {
26        $statement = (new \PhpMyAdmin\SqlParser\Parser('REPLACE INTO users (id) VALUES (1)'))->statements[0];
27        self::assertInstanceOf(\PhpMyAdmin\SqlParser\Statements\ReplaceStatement::class, $statement);
28        self::assertSame('users', ReplaceColumns::resolveIntoTableName($statement->into));
29        self::assertNull(ReplaceColumns::resolveIntoTableName(null));
30    }
31
32}
33