Mercurial > hg > cmmr2012-drupal-site
diff core/modules/migrate/tests/src/Kernel/TrackChangesTest.php @ 5:12f9dff5fda9 tip
Update to Drupal core 8.7.1
author | Chris Cannam |
---|---|
date | Thu, 09 May 2019 15:34:47 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/migrate/tests/src/Kernel/TrackChangesTest.php Thu May 09 15:34:47 2019 +0100 @@ -0,0 +1,194 @@ +<?php + +namespace Drupal\Tests\migrate\Kernel; + +/** + * Tests migration track changes property. + * + * @group migrate + */ +class TrackChangesTest extends MigrateTestBase { + + /** + * {@inheritdoc} + */ + public static $modules = [ + 'system', + 'user', + 'taxonomy', + 'migrate', + 'migrate_track_changes_test', + 'text', + ]; + + /** + * {@inheritdoc} + */ + protected function setUp() { + parent::setUp(); + // Create source test table. + $this->sourceDatabase->schema()->createTable('track_changes_term', [ + 'fields' => [ + 'tid' => [ + 'description' => 'Serial', + 'type' => 'serial', + 'unsigned' => TRUE, + 'not null' => TRUE, + ], + 'name' => [ + 'description' => 'Name', + 'type' => 'varchar', + 'length' => 128, + 'not null' => TRUE, + 'default' => '', + ], + 'description' => [ + 'description' => 'Name', + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + 'default' => '', + ], + ], + 'primary key' => [ + 'tid', + ], + 'description' => 'Contains taxonomy terms to import', + ]); + + // Add 4 items to source table. + $this->sourceDatabase->insert('track_changes_term') + ->fields([ + 'name', + 'description', + ]) + ->values([ + 'name' => 'Item 1', + 'description' => 'Text item 1', + ]) + ->values([ + 'name' => 'Item 2', + 'description' => 'Text item 2', + ]) + ->values([ + 'name' => 'Item 3', + 'description' => 'Text item 3', + ]) + ->values([ + 'name' => 'Item 4', + 'description' => 'Text item 4', + ]) + ->execute(); + + $this->installEntitySchema('taxonomy_term'); + $this->installEntitySchema('user'); + + $this->executeMigration('track_changes_test'); + } + + /** + * Tests track changes property of SqlBase. + */ + public function testTrackChanges() { + // Assert all of the terms have been imported. + $this->assertTermExists('name', 'Item 1'); + $this->assertTermExists('name', 'Item 2'); + $this->assertTermExists('description', 'Text item 3'); + $this->assertTermExists('description', 'Text item 4'); + + // Update Item 1 triggering its track_changes by name. + $this->sourceDatabase->update('track_changes_term') + ->fields([ + 'name' => 'Item 1 updated', + ]) + ->condition('name', 'Item 1') + ->execute(); + + // Update Item 2 keeping it's track_changes name the same. + $this->sourceDatabase->update('track_changes_term') + ->fields([ + 'name' => 'Item 2', + ]) + ->condition('name', 'Item 2') + ->execute(); + + // Update Item 3 triggering its track_changes by field. + $this->sourceDatabase->update('track_changes_term') + ->fields([ + 'description' => 'Text item 3 updated', + ]) + ->condition('name', 'Item 3') + ->execute(); + + // Update Item 2 keeping it's track_changes field the same. + $this->sourceDatabase->update('track_changes_term') + ->fields([ + 'description' => 'Text item 4', + ]) + ->condition('name', 'Item 4') + ->execute(); + + // Execute migration again. + $this->executeMigration('track_changes_test'); + + // Item with name changes should be updated. + $this->assertTermExists('name', 'Item 1 updated'); + $this->assertTermDoesNotExist('name', 'Item 1'); + + // Item without name changes should not be updated. + $this->assertTermExists('name', 'Item 2'); + + // Item with field changes should be updated. + $this->assertTermExists('description', 'Text item 3 updated'); + $this->assertTermDoesNotExist('description', 'Text item 3'); + + // Item without field changes should not be updated. + $this->assertTermExists('description', 'Text item 4'); + } + + /** + * Assert that term with given name exists. + * + * @param string $property + * Property to evaluate. + * @param string $value + * Value to evaluate. + */ + protected function assertTermExists($property, $value) { + self::assertTrue($this->termExists($property, $value)); + } + + /** + * Assert that term with given title does not exist. + * + * @param string $property + * Property to evaluate. + * @param string $value + * Value to evaluate. + */ + protected function assertTermDoesNotExist($property, $value) { + self::assertFalse($this->termExists($property, $value)); + } + + /** + * Checks if term with given name exists. + * + * @param string $property + * Property to evaluate. + * @param string $value + * Value to evaluate. + * + * @return bool + */ + protected function termExists($property, $value) { + $property = $property === 'description' ? 'description__value' : $property; + $query = \Drupal::entityQuery('taxonomy_term'); + $result = $query + ->condition($property, $value) + ->range(0, 1) + ->execute(); + + return !empty($result); + } + +}