Loading src/Plugin/migrate/destination/MigrateSandboxEntityContentBase.php +7 −0 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ namespace Drupal\migrate_sandbox\Plugin\migrate\destination; use Drupal\migrate\Exception\EntityValidationException; use Drupal\migrate\MigrateException; use Drupal\migrate\Plugin\MigrationInterface; use Drupal\migrate\Row; /** Loading @@ -22,6 +23,12 @@ class MigrateSandboxEntityContentBase extends MigrateSandboxEntity { if (!$entity) { throw new MigrateException('Unable to create sandbox entity'); } // Add a title to the entity to avoid annoying validation error. if (!$entity->label()) { $label_key = $entity->getEntityType()->getKey('label'); $entity->set($label_key, 'Dummy ' . $label_key); $this->migration->getIdMap()->saveMessage($row->getSourceIdValues(), $this->t('Dummy value used for entity label to avoid validation error.'), MigrationInterface::MESSAGE_INFORMATIONAL); } \Drupal::service('tempstore.private')->get('migrate_sandbox')->set('migrate_sandbox.latest', $entity); $violations = $entity->validate(); if (count($violations) > 0) { Loading src/Plugin/migrate/id_map/MigrateSandboxMap.php +12 −1 Original line number Diff line number Diff line Loading @@ -24,7 +24,18 @@ class MigrateSandboxMap extends NullIdMap { * {@inheritdoc} */ public function saveMessage(array $source_id_values, $message, $level = MigrationInterface::MESSAGE_ERROR) { switch ($level) { case MigrationInterface::MESSAGE_INFORMATIONAL: \Drupal::messenger()->addMessage('(Migrate Message) ' . $message, 'status'); break; case MigrationInterface::MESSAGE_NOTICE: \Drupal::messenger()->addMessage('(Migrate Message) ' . $message, 'warning'); break; default: \Drupal::messenger()->addError('(Migrate Message) ' . $message); } } } tests/src/FunctionalJavascript/MigrateSandboxTest.php +11 −10 Original line number Diff line number Diff line Loading @@ -82,10 +82,12 @@ class MigrateSandboxTest extends WebDriverTestBase { // Try submitting with invalid yaml. $page->find('css', '[name="data_rows"]')->setValue(' foo:'); $assert_session->elementNotExists('css', 'div[aria-label="Error message"]'); $assert_session->statusMessageNotExists(); $assert_session->elementTextContains('css', '[data-drupal-selector="edit-yaml"]', "new_url: 'http://example.com/a%20url%20with%20spaces.html'"); $page->pressButton('Save & Run'); $assert_session->waitForElementVisible('css', 'div[aria-label="Error message"]'); $assert_session->assertWaitOnAjaxRequest(); // The following line fails on d.o for a reason I don't understand. // $assert_session->statusMessageExistsAfterWait('error'); // The results text should be cleared. $assert_session->elementTextNotContains('css', '[data-drupal-selector="edit-yaml"]', "new_url: 'http://example.com/a%20url%20with%20spaces.html'"); Loading @@ -93,11 +95,10 @@ class MigrateSandboxTest extends WebDriverTestBase { $page->find('css', '[name="prepopulated"]')->setValue('log'); $assert_session->assertWaitOnAjaxRequest(); $expected_log = "'example_1' value is 'Foo'"; $assert_session->pageTextNotContains($expected_log); $assert_session->statusMessageNotContains($expected_log); $assert_session->elementTextNotContains('css', '[data-drupal-selector="edit-yaml"]', 'example_1: Foo'); $page->pressButton('Save & Run'); $assert_session->waitForElementVisible('css', 'div[aria-label="Error message"]'); $assert_session->elementTextContains('css', 'div[aria-label="Error message"]', $expected_log); $assert_session->statusMessageContainsAfterWait($expected_log, 'error'); $assert_session->elementTextContains('css', '[data-drupal-selector="edit-yaml"]', 'example_1: Foo'); $this->assertFalse(\Drupal::database()->schema()->tableExists('migrate_map_migrate_sandbox')); $this->assertFalse(\Drupal::database()->schema()->tableExists('migrate_message_migrate_sandbox')); Loading @@ -113,8 +114,7 @@ class MigrateSandboxTest extends WebDriverTestBase { $assert_session->pageTextNotContains($expected_log); $assert_session->elementTextContains('css', '[data-drupal-selector="edit-yaml"]', 'example_1:'); $page->pressButton('Save & Run'); $assert_session->waitForElementVisible('css', 'div[aria-label="Error message"]'); $assert_session->elementTextContains('css', 'div[aria-label="Error message"]', $expected_log); $assert_session->statusMessageContainsAfterWait($expected_log, 'error'); // Result should be cleared. $assert_session->elementTextNotContains('css', '[data-drupal-selector="edit-yaml"]', 'example_1:'); Loading @@ -128,15 +128,16 @@ class MigrateSandboxTest extends WebDriverTestBase { $page->find('css', '[name="destination"]')->setValue('entity'); $page->find('css', '[name="entity_type"]')->setValue('node'); $page->find('css', '[name="entity_bundle"]')->setValue('page'); // Expect validation error since title is not in process. // Expect message about dummy title since title is not in process. $page->pressButton('Save & Run'); $assert_session->assertWaitOnAjaxRequest(); $assert_session->pageTextContains('(Migrate Message)'); $assert_session->statusMessageContainsAfterWait('(Migrate Message) Dummy value used for entity label to avoid validation error.', 'status'); $page->find('css', '[name="data_rows"]')->setValue('my_string: My title'); $page->find('css', '[name="process"]')->setValue('title: my_string'); $assert_session->pageTextNotContains("value: 'My title'"); $assert_session->pageTextContains("value: 'Dummy title'"); $page->pressButton('Save & Run'); $assert_session->assertWaitOnAjaxRequest(); $assert_session->statusMessageNotContainsAfterWait('(Migrate Message)'); $assert_session->pageTextContains("value: 'My title'"); // Confirm node was not saved. Loading Loading
src/Plugin/migrate/destination/MigrateSandboxEntityContentBase.php +7 −0 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ namespace Drupal\migrate_sandbox\Plugin\migrate\destination; use Drupal\migrate\Exception\EntityValidationException; use Drupal\migrate\MigrateException; use Drupal\migrate\Plugin\MigrationInterface; use Drupal\migrate\Row; /** Loading @@ -22,6 +23,12 @@ class MigrateSandboxEntityContentBase extends MigrateSandboxEntity { if (!$entity) { throw new MigrateException('Unable to create sandbox entity'); } // Add a title to the entity to avoid annoying validation error. if (!$entity->label()) { $label_key = $entity->getEntityType()->getKey('label'); $entity->set($label_key, 'Dummy ' . $label_key); $this->migration->getIdMap()->saveMessage($row->getSourceIdValues(), $this->t('Dummy value used for entity label to avoid validation error.'), MigrationInterface::MESSAGE_INFORMATIONAL); } \Drupal::service('tempstore.private')->get('migrate_sandbox')->set('migrate_sandbox.latest', $entity); $violations = $entity->validate(); if (count($violations) > 0) { Loading
src/Plugin/migrate/id_map/MigrateSandboxMap.php +12 −1 Original line number Diff line number Diff line Loading @@ -24,7 +24,18 @@ class MigrateSandboxMap extends NullIdMap { * {@inheritdoc} */ public function saveMessage(array $source_id_values, $message, $level = MigrationInterface::MESSAGE_ERROR) { switch ($level) { case MigrationInterface::MESSAGE_INFORMATIONAL: \Drupal::messenger()->addMessage('(Migrate Message) ' . $message, 'status'); break; case MigrationInterface::MESSAGE_NOTICE: \Drupal::messenger()->addMessage('(Migrate Message) ' . $message, 'warning'); break; default: \Drupal::messenger()->addError('(Migrate Message) ' . $message); } } }
tests/src/FunctionalJavascript/MigrateSandboxTest.php +11 −10 Original line number Diff line number Diff line Loading @@ -82,10 +82,12 @@ class MigrateSandboxTest extends WebDriverTestBase { // Try submitting with invalid yaml. $page->find('css', '[name="data_rows"]')->setValue(' foo:'); $assert_session->elementNotExists('css', 'div[aria-label="Error message"]'); $assert_session->statusMessageNotExists(); $assert_session->elementTextContains('css', '[data-drupal-selector="edit-yaml"]', "new_url: 'http://example.com/a%20url%20with%20spaces.html'"); $page->pressButton('Save & Run'); $assert_session->waitForElementVisible('css', 'div[aria-label="Error message"]'); $assert_session->assertWaitOnAjaxRequest(); // The following line fails on d.o for a reason I don't understand. // $assert_session->statusMessageExistsAfterWait('error'); // The results text should be cleared. $assert_session->elementTextNotContains('css', '[data-drupal-selector="edit-yaml"]', "new_url: 'http://example.com/a%20url%20with%20spaces.html'"); Loading @@ -93,11 +95,10 @@ class MigrateSandboxTest extends WebDriverTestBase { $page->find('css', '[name="prepopulated"]')->setValue('log'); $assert_session->assertWaitOnAjaxRequest(); $expected_log = "'example_1' value is 'Foo'"; $assert_session->pageTextNotContains($expected_log); $assert_session->statusMessageNotContains($expected_log); $assert_session->elementTextNotContains('css', '[data-drupal-selector="edit-yaml"]', 'example_1: Foo'); $page->pressButton('Save & Run'); $assert_session->waitForElementVisible('css', 'div[aria-label="Error message"]'); $assert_session->elementTextContains('css', 'div[aria-label="Error message"]', $expected_log); $assert_session->statusMessageContainsAfterWait($expected_log, 'error'); $assert_session->elementTextContains('css', '[data-drupal-selector="edit-yaml"]', 'example_1: Foo'); $this->assertFalse(\Drupal::database()->schema()->tableExists('migrate_map_migrate_sandbox')); $this->assertFalse(\Drupal::database()->schema()->tableExists('migrate_message_migrate_sandbox')); Loading @@ -113,8 +114,7 @@ class MigrateSandboxTest extends WebDriverTestBase { $assert_session->pageTextNotContains($expected_log); $assert_session->elementTextContains('css', '[data-drupal-selector="edit-yaml"]', 'example_1:'); $page->pressButton('Save & Run'); $assert_session->waitForElementVisible('css', 'div[aria-label="Error message"]'); $assert_session->elementTextContains('css', 'div[aria-label="Error message"]', $expected_log); $assert_session->statusMessageContainsAfterWait($expected_log, 'error'); // Result should be cleared. $assert_session->elementTextNotContains('css', '[data-drupal-selector="edit-yaml"]', 'example_1:'); Loading @@ -128,15 +128,16 @@ class MigrateSandboxTest extends WebDriverTestBase { $page->find('css', '[name="destination"]')->setValue('entity'); $page->find('css', '[name="entity_type"]')->setValue('node'); $page->find('css', '[name="entity_bundle"]')->setValue('page'); // Expect validation error since title is not in process. // Expect message about dummy title since title is not in process. $page->pressButton('Save & Run'); $assert_session->assertWaitOnAjaxRequest(); $assert_session->pageTextContains('(Migrate Message)'); $assert_session->statusMessageContainsAfterWait('(Migrate Message) Dummy value used for entity label to avoid validation error.', 'status'); $page->find('css', '[name="data_rows"]')->setValue('my_string: My title'); $page->find('css', '[name="process"]')->setValue('title: my_string'); $assert_session->pageTextNotContains("value: 'My title'"); $assert_session->pageTextContains("value: 'Dummy title'"); $page->pressButton('Save & Run'); $assert_session->assertWaitOnAjaxRequest(); $assert_session->statusMessageNotContainsAfterWait('(Migrate Message)'); $assert_session->pageTextContains("value: 'My title'"); // Confirm node was not saved. Loading