View 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;
use Drupal\migrate\Plugin\migrate\id_map\Sql;
class MigrateMessageTest extends KernelTestBase implements MigrateMessageInterface {
public static $modules = [
'migrate',
'system',
];
protected $migration;
protected $messages = [];
protected function setUp() {
parent::setUp();
$this
->installConfig([
'system',
]);
$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);
}
public function testMessagesNotTeed() {
$executable = new MigrateExecutable($this->migration, $this);
$executable
->import();
$this
->assertCount(0, $this->messages);
}
public function testMessagesTeed() {
\Drupal::service('event_dispatcher')
->addListener(MigrateEvents::IDMAP_MESSAGE, [
$this,
'mapMessageRecorder',
]);
$executable = new MigrateExecutable($this->migration, $this);
$executable
->import();
$this
->assertCount(1, $this->messages);
$this
->assertIdentical(reset($this->messages), "source_message: 'a message' is not an array");
}
public function testGetMessages() {
$expected_message = (object) [
'src_name' => 'source_message',
'dest_config_name' => NULL,
'msgid' => '1',
Sql::SOURCE_IDS_HASH => '170cde81762e22552d1b1578cf3804c89afefe9efbc7cc835185d7141060b032',
'level' => '1',
'message' => "'a message' is not an array",
];
$executable = new MigrateExecutable($this->migration, $this);
$executable
->import();
$count = 0;
foreach ($this->migration
->getIdMap()
->getMessages() as $message) {
++$count;
$this
->assertEqual($message, $expected_message);
}
$this
->assertEqual($count, 1);
}
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);
}
public function display($message, $type = 'status') {
$this->messages[] = $message;
}
}