packages/ztd-query-mysql/tests/Unit/Shadow/Mutation/Table/Alter/ColumnActionTest.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\ColumnAction;
10
11#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\MySql\Shadow\Mutation\Table\Alter\UnsupportedKeyword::class)]
12#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\MySql\Sql\Alter\OptionList::class)]
13#[CoversClass(ColumnAction::class)]
14final class ColumnActionTest extends TestCase
15{
16 public function testDetectCase1(): void
17 {
18 $operation = 'ADD COLUMN name TEXT';
19 $expected = 'add';
20 $alter = (new \PhpMyAdmin\SqlParser\Parser('ALTER TABLE t ' . $operation))->statements[0];
21 self::assertInstanceOf(\PhpMyAdmin\SqlParser\Statements\AlterStatement::class, $alter);
22 self::assertNotNull($alter->altered);
23 $op = $alter->altered[0];
24 self::assertSame($expected, (new ColumnAction())->detect($op));
25 }
26
27 public function testDetectCase2(): void
28 {
29 $operation = 'ADD name TEXT';
30 $expected = 'add';
31 $alter = (new \PhpMyAdmin\SqlParser\Parser('ALTER TABLE t ' . $operation))->statements[0];
32 self::assertInstanceOf(\PhpMyAdmin\SqlParser\Statements\AlterStatement::class, $alter);
33 self::assertNotNull($alter->altered);
34 $op = $alter->altered[0];
35 self::assertSame($expected, (new ColumnAction())->detect($op));
36 }
37
38 public function testDetectCase3(): void
39 {
40 $operation = 'DROP COLUMN name';
41 $expected = 'drop';
42 $alter = (new \PhpMyAdmin\SqlParser\Parser('ALTER TABLE t ' . $operation))->statements[0];
43 self::assertInstanceOf(\PhpMyAdmin\SqlParser\Statements\AlterStatement::class, $alter);
44 self::assertNotNull($alter->altered);
45 $op = $alter->altered[0];
46 self::assertSame($expected, (new ColumnAction())->detect($op));
47 }
48
49 public function testDetectCase4(): void
50 {
51 $operation = 'DROP name';
52 $expected = 'drop';
53 $alter = (new \PhpMyAdmin\SqlParser\Parser('ALTER TABLE t ' . $operation))->statements[0];
54 self::assertInstanceOf(\PhpMyAdmin\SqlParser\Statements\AlterStatement::class, $alter);
55 self::assertNotNull($alter->altered);
56 $op = $alter->altered[0];
57 self::assertSame($expected, (new ColumnAction())->detect($op));
58 }
59
60 public function testDetectCase5(): void
61 {
62 $operation = 'MODIFY COLUMN name VARCHAR(20)';
63 $expected = 'modify';
64 $alter = (new \PhpMyAdmin\SqlParser\Parser('ALTER TABLE t ' . $operation))->statements[0];
65 self::assertInstanceOf(\PhpMyAdmin\SqlParser\Statements\AlterStatement::class, $alter);
66 self::assertNotNull($alter->altered);
67 $op = $alter->altered[0];
68 self::assertSame($expected, (new ColumnAction())->detect($op));
69 }
70
71 public function testDetectCase6(): void
72 {
73 $operation = 'CHANGE COLUMN name label TEXT';
74 $expected = 'change';
75 $alter = (new \PhpMyAdmin\SqlParser\Parser('ALTER TABLE t ' . $operation))->statements[0];
76 self::assertInstanceOf(\PhpMyAdmin\SqlParser\Statements\AlterStatement::class, $alter);
77 self::assertNotNull($alter->altered);
78 $op = $alter->altered[0];
79 self::assertSame($expected, (new ColumnAction())->detect($op));
80 }
81
82 public function testDetectCase7(): void
83 {
84 $operation = 'ADD PRIMARY KEY (id)';
85 $expected = null;
86 $alter = (new \PhpMyAdmin\SqlParser\Parser('ALTER TABLE t ' . $operation))->statements[0];
87 self::assertInstanceOf(\PhpMyAdmin\SqlParser\Statements\AlterStatement::class, $alter);
88 self::assertNotNull($alter->altered);
89 $op = $alter->altered[0];
90 self::assertSame($expected, (new ColumnAction())->detect($op));
91 }
92
93 public function testDetectCase8(): void
94 {
95 $operation = 'DROP PRIMARY KEY';
96 $expected = null;
97 $alter = (new \PhpMyAdmin\SqlParser\Parser('ALTER TABLE t ' . $operation))->statements[0];
98 self::assertInstanceOf(\PhpMyAdmin\SqlParser\Statements\AlterStatement::class, $alter);
99 self::assertNotNull($alter->altered);
100 $op = $alter->altered[0];
101 self::assertSame($expected, (new ColumnAction())->detect($op));
102 }
103
104}
105