Mercurial > hg > isophonics-drupal-site
view core/modules/migrate/tests/src/Kernel/MigrateMessageTest.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | af1871eacc83 |
line wrap: on
line source
<?php namespace Drupal\Tests\migrate\Kernel; use Drupal\KernelTests\KernelTestBase; use Drupal\migrate\Plugin\MigrationInterface; use Drupal\migrate\Event\MigrateEvents; use Drupal\migrate\Event\MigrateIdMapMessageEvent; use Drupal\migrate\MigrateExecutable; use Drupal\migrate\MigrateMessageInterface; /** * Tests whether idmap messages are sent to message interface when requested. * * @group migrate */ class MigrateMessageTest extends KernelTestBase implements MigrateMessageInterface { /** * Modules to enable. * * @var array */ public static $modules = ['migrate', 'system']; /** * Migration to run. * * @var \Drupal\migrate\Plugin\MigrationInterface */ protected $migration; /** * Messages accumulated during the migration run. * * @var array */ protected $messages = []; /** * {@inheritdoc} */ protected function setUp() { parent::setUp(); $this->installConfig(['system']); // A simple migration, which will generate a message to the ID map because // the concat plugin throws an exception if its source is not an array. $definition = [ 'migration_tags' => ['Message test'], 'source' => [ 'plugin' => 'embedded_data', 'data_rows' => [ ['name' => 'source_message', 'value' => 'a message'], ], 'ids' => [ 'name' => ['type' => 'string'], ], ], 'process' => [ 'message' => [ 'plugin' => 'concat', 'source' => 'value', ], ], 'destination' => [ 'plugin' => 'config', 'config_name' => 'system.maintenance', ], ]; $this->migration = \Drupal::service('plugin.manager.migration')->createStubMigration($definition); } /** * Tests migration interruptions. */ public function testMessagesNotTeed() { // We don't ask for messages to be teed, so don't expect any. $executable = new MigrateExecutable($this->migration, $this); $executable->import(); $this->assertIdentical(count($this->messages), 0); } /** * Tests migration interruptions. */ public function testMessagesTeed() { // Ask to receive any messages sent to the idmap. \Drupal::service('event_dispatcher')->addListener(MigrateEvents::IDMAP_MESSAGE, [$this, 'mapMessageRecorder']); $executable = new MigrateExecutable($this->migration, $this); $executable->import(); $this->assertIdentical(count($this->messages), 1); $this->assertIdentical(reset($this->messages), "source_message: 'a message' is not an array"); } /** * Reacts to map message event. * * @param \Drupal\Migrate\Event\MigrateIdMapMessageEvent $event * The migration event. * @param string $name * The event name. */ public function mapMessageRecorder(MigrateIdMapMessageEvent $event, $name) { if ($event->getLevel() == MigrationInterface::MESSAGE_NOTICE || $event->getLevel() == MigrationInterface::MESSAGE_INFORMATIONAL) { $type = 'status'; } else { $type = 'error'; } $source_id_string = implode(',', $event->getSourceIdValues()); $this->display($source_id_string . ': ' . $event->getMessage(), $type); } /** * {@inheritdoc} */ public function display($message, $type = 'status') { $this->messages[] = $message; } }