packages/ztd-query-mysql/tests/Unit/Shadow/Mutation/Table/Alter/ColumnDefinitionParserTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Shadow\Mutation\Table\Alter;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use ZtdQuery\Platform\MySql\Shadow\Mutation\Table\Alter\ColumnDefinitionParser;
10
11#[CoversClass(ColumnDefinitionParser::class)]
12final class ColumnDefinitionParserTest extends TestCase
13{
14 public function testBuildColumnDefinition(): void
15 {
16 $alter = (new \PhpMyAdmin\SqlParser\Parser('ALTER TABLE t ADD COLUMN name VARCHAR(20) NOT NULL'))->statements[0];
17 self::assertInstanceOf(\PhpMyAdmin\SqlParser\Statements\AlterStatement::class, $alter);
18 self::assertNotNull($alter->altered);
19 $op = $alter->altered[0];
20 $column = (new ColumnDefinitionParser())->buildColumnDefinition($op);
21 self::assertNotNull($column);
22 self::assertSame('name', $column->name);
23 self::assertNotNull($column->type);
24 self::assertSame('VARCHAR', $column->type->name);
25 self::assertSame(['20'], $column->type->parameters);
26 }
27
28 public function testBuildColumnDefinitionFromUnknown(): void
29 {
30 $alter = (new \PhpMyAdmin\SqlParser\Parser('ALTER TABLE t CHANGE COLUMN name label TEXT'))->statements[0];
31 self::assertInstanceOf(\PhpMyAdmin\SqlParser\Statements\AlterStatement::class, $alter);
32 self::assertNotNull($alter->altered);
33 $op = $alter->altered[0];
34 $column = (new ColumnDefinitionParser())->buildColumnDefinitionFromUnknown($op);
35 self::assertNotNull($column);
36 self::assertSame('label', $column->name);
37 self::assertNotNull($column->type);
38 self::assertSame('TEXT', $column->type->name);
39 }
40
41 public function testGetColumnName(): void
42 {
43 $alter = (new \PhpMyAdmin\SqlParser\Parser('ALTER TABLE t DROP COLUMN `name`'))->statements[0];
44 self::assertInstanceOf(\PhpMyAdmin\SqlParser\Statements\AlterStatement::class, $alter);
45 self::assertNotNull($alter->altered);
46 $op = $alter->altered[0];
47 self::assertSame('name', (new ColumnDefinitionParser())->getColumnName($op));
48 self::assertNull((new ColumnDefinitionParser())->getColumnName(new \PhpMyAdmin\SqlParser\Components\AlterOperation()));
49 }
50
51}
52