1 | <?php |
||
2 | |||
3 | declare(strict_types=1); |
||
4 | |||
5 | namespace Doctrine\DBAL\Tests\Functional\Schema; |
||
6 | |||
7 | use Doctrine\DBAL\Schema\Comparator; |
||
8 | use Doctrine\DBAL\Schema\Table; |
||
9 | use Doctrine\DBAL\Tests\FunctionalTestCase; |
||
10 | use function array_merge; |
||
11 | use function sprintf; |
||
12 | |||
13 | class ColumnCommentTest extends FunctionalTestCase |
||
14 | { |
||
15 | /** @var bool */ |
||
16 | private static $initialized = false; |
||
17 | |||
18 | protected function setUp() : void |
||
19 | { |
||
20 | parent::setUp(); |
||
21 | |||
22 | if (self::$initialized) { |
||
23 | return; |
||
24 | } |
||
25 | |||
26 | self::$initialized = true; |
||
27 | |||
28 | $table = new Table('column_comments'); |
||
29 | $table->addColumn('id', 'integer'); |
||
30 | |||
31 | foreach (self::columnProvider() as [$name, $type, $options]) { |
||
32 | $table->addColumn($name, $type, $options); |
||
33 | } |
||
34 | |||
35 | $this->connection->getSchemaManager() |
||
36 | ->dropAndCreateTable($table); |
||
37 | } |
||
38 | |||
39 | /** |
||
40 | * @param array<string,mixed> $options |
||
41 | * |
||
42 | * @dataProvider columnProvider |
||
43 | */ |
||
44 | public function testColumnComment(string $name, string $type, array $options) : void |
||
0 ignored issues
–
show
|
|||
45 | { |
||
46 | $this->assertColumnComment('column_comments', $name, $options['comment'] ?? ''); |
||
47 | } |
||
48 | |||
49 | /** |
||
50 | * @return mixed[][] |
||
51 | */ |
||
52 | public static function columnProvider() : iterable |
||
53 | { |
||
54 | foreach ([ |
||
55 | 'commented' => [ |
||
56 | 'string', |
||
57 | ['length' => 16], |
||
58 | ], |
||
59 | 'not_commented' => [ |
||
60 | 'array', |
||
61 | [], |
||
62 | ], |
||
63 | ] as $typeName => [$type, $typeOptions]) { |
||
64 | foreach ([ |
||
65 | 'no_comment' => [], |
||
66 | 'with_comment' => ['comment' => 'Some comment'], |
||
67 | 'zero_comment' => ['comment' => '0'], |
||
68 | 'empty_comment' => ['comment' => ''], |
||
69 | 'quoted_comment' => ['comment' => "O'Reilly"], |
||
70 | ] as $caseName => $caseOptions) { |
||
71 | $name = sprintf('%s_%s', $typeName, $caseName); |
||
72 | |||
73 | yield $name => [ |
||
0 ignored issues
–
show
|
|||
74 | $name, |
||
75 | $type, |
||
76 | array_merge($typeOptions, $caseOptions), |
||
77 | ]; |
||
78 | } |
||
79 | } |
||
80 | } |
||
81 | |||
82 | /** |
||
83 | * @dataProvider alterColumnCommentProvider |
||
84 | */ |
||
85 | public function testAlterColumnComment(string $comment1, string $comment2) : void |
||
86 | { |
||
87 | $table1 = new Table('column_comments'); |
||
88 | $table1->addColumn('id', 'integer', ['comment' => $comment1]); |
||
89 | |||
90 | $this->connection->getSchemaManager() |
||
91 | ->dropAndCreateTable($table1); |
||
92 | |||
93 | $table2 = clone $table1; |
||
94 | $table2->getColumn('id')->setComment($comment2); |
||
95 | |||
96 | $diff = (new Comparator())->diffTable($table1, $table2); |
||
97 | self::assertNotNull($diff); |
||
98 | |||
99 | $sm = $this->connection->getSchemaManager(); |
||
100 | $sm->alterTable($diff); |
||
101 | |||
102 | $this->assertColumnComment('column_comments', 'id', $comment2); |
||
103 | } |
||
104 | |||
105 | /** |
||
106 | * @return mixed[][] |
||
107 | */ |
||
108 | public static function alterColumnCommentProvider() : iterable |
||
109 | { |
||
110 | return [ |
||
111 | 'Empty to non-empty' => ['', 'foo'], |
||
112 | 'Non-empty to empty' => ['foo', ''], |
||
113 | 'Empty to zero' => ['', '0'], |
||
114 | 'Zero to empty' => ['0', ''], |
||
115 | 'Non-empty to non-empty' => ['foo', 'bar'], |
||
116 | ]; |
||
117 | } |
||
118 | |||
119 | private function assertColumnComment(string $table, string $column, string $expectedComment) : void |
||
120 | { |
||
121 | self::assertSame( |
||
122 | $expectedComment, |
||
123 | $this->connection->getSchemaManager() |
||
124 | ->listTableDetails($table) |
||
125 | ->getColumn($column) |
||
126 | ->getComment() |
||
127 | ); |
||
128 | } |
||
129 | } |
||
130 |
This check looks for parameters that have been defined for a function or method, but which are not used in the method body.