1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
<?php
declare(strict_types=1);
namespace Doctrine\DBAL\Tests\Functional\Schema;
use Doctrine\DBAL\Schema\Column;
use Doctrine\DBAL\Schema\ColumnEditor;
use Doctrine\DBAL\Schema\Table;
use Doctrine\DBAL\Tests\FunctionalTestCase;
use Doctrine\DBAL\Types\Types;
use PHPUnit\Framework\Attributes\DataProvider;
class ColumnCommentTest extends FunctionalTestCase
{
private static bool $initialized = false;
protected function setUp(): void
{
parent::setUp();
if (self::$initialized) {
return;
}
self::$initialized = true;
$editor = Table::editor()
->setUnquotedName('column_comments')
->setColumns(
Column::editor()
->setUnquotedName('id')
->setTypeName(Types::INTEGER)
->create(),
);
foreach (self::commentProvider() as [$columnName, $comment]) {
$editor->addColumn(
Column::editor()
->setUnquotedName($columnName)
->setTypeName(Types::INTEGER)
->setComment($comment)
->create(),
);
}
$table = $editor->create();
$this->dropAndCreateTable($table);
}
#[DataProvider('commentProvider')]
public function testColumnComment(string $columnName, string $comment): void
{
$this->assertColumnComment($columnName, $comment);
}
/** @return iterable<string,array{non-empty-string,string}> */
public static function commentProvider(): iterable
{
return [
'Empty comment' => ['empty_comment', ''],
'Non-empty comment' => ['some_comment', ''],
'Zero comment' => ['zero_comment', '0'],
'Comment with quote' => ['quoted_comment', "O'Reilly"],
];
}
#[DataProvider('alterColumnCommentProvider')]
public function testAlterColumnComment(string $comment1, string $comment2): void
{
$table1 = Table::editor()
->setUnquotedName('column_comments')
->setColumns(
Column::editor()
->setUnquotedName('id')
->setTypeName(Types::INTEGER)
->setComment($comment1)
->create(),
)
->create();
$this->dropAndCreateTable($table1);
$table2 = $table1->edit()
->modifyColumnByUnquotedName('id', static function (ColumnEditor $editor) use ($comment2): void {
$editor->setComment($comment2);
})
->create();
$schemaManager = $this->connection->createSchemaManager();
$diff = $schemaManager->createComparator()
->compareTables($table1, $table2);
$schemaManager->alterTable($diff);
$this->assertColumnComment('id', $comment2);
}
/** @return mixed[][] */
public static function alterColumnCommentProvider(): iterable
{
return [
'Empty to non-empty' => ['', 'foo'],
'Non-empty to empty' => ['foo', ''],
'Empty to zero' => ['', '0'],
'Zero to empty' => ['0', ''],
'Non-empty to non-empty' => ['foo', 'bar'],
];
}
private function assertColumnComment(string $columnName, string $expectedComment): void
{
self::assertSame(
$expectedComment,
$this->connection->createSchemaManager()
->introspectTable('column_comments')
->getColumn($columnName)
->getComment(),
);
}
}
|