packages/ztd-query-mysql/tests/Unit/Shadow/Mutation/Table/Alter/PrimaryKeyAlterationTest.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\PrimaryKeyAlteration;
10
11#[CoversClass(PrimaryKeyAlteration::class)]
12final class PrimaryKeyAlterationTest extends TestCase
13{
14 public function testApplyAddPrimaryKey(): void
15 {
16 $create = (new \PhpMyAdmin\SqlParser\Parser('CREATE TABLE t (id INT, code INT)'))->statements[0];
17 self::assertInstanceOf(\PhpMyAdmin\SqlParser\Statements\CreateStatement::class, $create);
18 $alter = (new \PhpMyAdmin\SqlParser\Parser('ALTER TABLE t ADD PRIMARY KEY (`id`, `code`)'))->statements[0];
19 self::assertInstanceOf(\PhpMyAdmin\SqlParser\Statements\AlterStatement::class, $alter);
20 self::assertNotNull($alter->altered);
21 $op = $alter->altered[0];
22 (new PrimaryKeyAlteration())->applyAddPrimaryKey($create, $op);
23 self::assertIsArray($create->fields);
24 self::assertCount(3, $create->fields);
25 self::assertNotNull($create->fields[2]->key);
26 self::assertSame('PRIMARY KEY', $create->fields[2]->key->type);
27 self::assertSame([['name' => 'id'], ['name' => 'code']], $create->fields[2]->key->columns);
28 }
29
30 public function testApplyDropPrimaryKey(): void
31 {
32 $create = (new \PhpMyAdmin\SqlParser\Parser('CREATE TABLE t (id INT PRIMARY KEY, code INT, PRIMARY KEY (code))'))->statements[0];
33 self::assertInstanceOf(\PhpMyAdmin\SqlParser\Statements\CreateStatement::class, $create);
34 (new PrimaryKeyAlteration())->applyDropPrimaryKey($create);
35 self::assertIsArray($create->fields);
36 self::assertCount(2, $create->fields);
37 self::assertNotNull($create->fields[0]->options);
38 self::assertFalse($create->fields[0]->options->has('PRIMARY KEY'));
39 }
40
41}
42