function ContentImportTest::testPreImportEvent
Tests that the pre-import event allows skipping certain entities.
File
-
core/
tests/ Drupal/ FunctionalTests/ DefaultContent/ ContentImportTest.php, line 290
Class
- ContentImportTest
- @covers \Drupal\Core\DefaultContent\Importer @group DefaultContent @group Recipe @group #slow
Namespace
Drupal\FunctionalTests\DefaultContentCode
public function testPreImportEvent() : void {
$invalid_uuid_detected = FALSE;
$listener = function (PreImportEvent $event) use (&$invalid_uuid_detected) : void {
$event->skip('3434bd5a-d2cd-4f26-bf79-a7f6b951a21b', 'Decided not to!');
try {
$event->skip('not-a-thing');
} catch (\InvalidArgumentException) {
$invalid_uuid_detected = TRUE;
}
};
\Drupal::service(EventDispatcherInterface::class)->addListener(PreImportEvent::class, $listener);
$finder = new Finder($this->contentDir);
$this->assertSame('menu_link_content', $finder->data['3434bd5a-d2cd-4f26-bf79-a7f6b951a21b']['_meta']['entity_type']);
/** @var \Drupal\Core\DefaultContent\Importer $importer */
$importer = \Drupal::service(Importer::class);
$logger = new TestLogger();
$importer->setLogger($logger);
$importer->importContent($finder, Existing::Error);
// The entity we skipped should not be here, and the reason why should have
// been logged.
$menu_link = \Drupal::service(EntityRepositoryInterface::class)->loadEntityByUuid('menu_link_content', '3434bd5a-d2cd-4f26-bf79-a7f6b951a21b');
$this->assertNull($menu_link);
$this->assertTrue($logger->hasInfo([
'message' => 'Skipped importing @entity_type @uuid because: %reason',
'context' => [
'@entity_type' => 'menu_link_content',
'@uuid' => '3434bd5a-d2cd-4f26-bf79-a7f6b951a21b',
'%reason' => 'Decided not to!',
],
]));
// We should have caught an exception for trying to skip an invalid UUID.
$this->assertTrue($invalid_uuid_detected);
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.