Skip to content

Commit

Permalink
Add test to ensure json_array can still be used
Browse files Browse the repository at this point in the history
On 31d0128 we made JsonType the default
one, which caused some unexpected results with the comparator.

This tests validates that if users have a JSON column but are using the
JsonArrayType we'll just add a comment to the column.

Reference: doctrine#2782
  • Loading branch information
lcobucci committed Sep 11, 2017
1 parent ba421d1 commit 94f6786
Showing 1 changed file with 107 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1192,4 +1192,111 @@ public function testDoesNotListIndexesImplicitlyCreatedByForeignKeys()
self::assertArrayHasKey('explicit_fk1_idx', $indexes);
self::assertArrayHasKey('idx_3d6c147fdc58d6c', $indexes);
}

/**
* @group 2782
* @group 6654
*/
public function testComparatorShouldReturnFalseWhenLegacyJsonArrayColumnHasComment()
{
if ( ! $this->_sm->getDatabasePlatform()->hasNativeJsonType()) {
$this->markTestSkipped('This test is only supported on platforms that have native JSON type.');
}

$table = new Table('json_array_test');
$table->addColumn('id', 'integer');
$table->addColumn('parameters', 'json_array');
$table->setPrimaryKey(['id']);

$this->_sm->createTable($table);

$comparator = new Comparator();
$tableDiff = $comparator->diffTable($this->_sm->listTableDetails('json_array_test'), $table);

self::assertFalse($tableDiff);

$this->_sm->dropTable('json_array_test');
}

/**
* @group 2782
* @group 6654
*/
public function testComparatorShouldAddCommentToLegacyJsonArrayType()
{
if ( ! $this->_sm->getDatabasePlatform()->hasNativeJsonType()) {
$this->markTestSkipped('This test is only supported on platforms that have native JSON type.');
}

$this->_conn->executeQuery(
'CREATE TABLE json_array_test (id INT NOT NULL, parameters JSON NOT NULL, PRIMARY KEY(id))'
);

$table = new Table('json_array_test');
$table->addColumn('id', 'integer');
$table->addColumn('parameters', 'json_array');
$table->setPrimaryKey(['id']);

$comparator = new Comparator();
$tableDiff = $comparator->diffTable($this->_sm->listTableDetails('json_array_test'), $table);

$this->_sm->dropTable('json_array_test');

self::assertInstanceOf(TableDiff::class, $tableDiff);
self::assertSame(['comment'], $tableDiff->changedColumns['parameters']->changedProperties);
}

/**
* @group 2782
* @group 6654
*/
public function testComparatorShouldReturnAllChangesWhenUsingLegacyJsonArrayType()
{
if ( ! $this->_sm->getDatabasePlatform()->hasNativeJsonType()) {
$this->markTestSkipped('This test is only supported on platforms that have native JSON type.');
}

$this->_conn->executeQuery(
'CREATE TABLE json_array_test (id INT NOT NULL, parameters JSON DEFAULT NULL, PRIMARY KEY(id))'
);

$table = new Table('json_array_test');
$table->addColumn('id', 'integer');
$table->addColumn('parameters', 'json_array');
$table->setPrimaryKey(['id']);

$comparator = new Comparator();
$tableDiff = $comparator->diffTable($this->_sm->listTableDetails('json_array_test'), $table);

$this->_sm->dropTable('json_array_test');

self::assertInstanceOf(TableDiff::class, $tableDiff);
self::assertSame(['notnull', 'comment'], $tableDiff->changedColumns['parameters']->changedProperties);
}

/**
* @group 2782
* @group 6654
*/
public function testComparatorShouldNotAddCommentToJsonTypeSinceItIsTheDefaultNow()
{
if ( ! $this->_sm->getDatabasePlatform()->hasNativeJsonType()) {
$this->markTestSkipped('This test is only supported on platforms that have native JSON type.');
}

$this->_conn->executeQuery(
'CREATE TABLE json_test (id INT NOT NULL, parameters JSON NOT NULL, PRIMARY KEY(id))'
);

$table = new Table('json_test');
$table->addColumn('id', 'integer');
$table->addColumn('parameters', 'json');
$table->setPrimaryKey(['id']);

$comparator = new Comparator();
$tableDiff = $comparator->diffTable($this->_sm->listTableDetails('json_test'), $table);
$this->_sm->dropTable('json_test');

self::assertFalse($tableDiff);
}
}

0 comments on commit 94f6786

Please sign in to comment.