d99329e18181a2c1ac12e003e08132bf11b744ae
[yaffs-website] / web / core / modules / migrate / tests / src / Kernel / MigrateInterruptionTest.php
1 <?php
2
3 namespace Drupal\Tests\migrate\Kernel;
4
5 use Drupal\migrate\Event\MigratePostRowSaveEvent;
6 use Drupal\migrate\MigrateMessage;
7 use Drupal\migrate\Plugin\MigrationInterface;
8 use Drupal\migrate\Event\MigrateEvents;
9 use Drupal\migrate\MigrateExecutable;
10 use Drupal\KernelTests\KernelTestBase;
11
12 /**
13  * Tests interruptions triggered during migrations.
14  *
15  * @group migrate
16  */
17 class MigrateInterruptionTest extends KernelTestBase {
18
19   /**
20    * Modules to enable.
21    *
22    * @var array
23    */
24   public static $modules = ['migrate', 'migrate_events_test'];
25
26   /**
27    * {@inheritdoc}
28    */
29   protected function setUp() {
30     parent::setUp();
31     \Drupal::service('event_dispatcher')->addListener(MigrateEvents::POST_ROW_SAVE,
32       [$this, 'postRowSaveEventRecorder']);
33   }
34
35   /**
36    * Tests migration interruptions.
37    */
38   public function testMigrateEvents() {
39     // Run a simple little migration, which should trigger one of each event
40     // other than map_delete.
41     $definition = [
42       'migration_tags' => ['Interruption test'],
43       'source' => [
44         'plugin' => 'embedded_data',
45         'data_rows' => [
46           ['data' => 'dummy value'],
47           ['data' => 'dummy value2'],
48         ],
49         'ids' => [
50           'data' => ['type' => 'string'],
51         ],
52       ],
53       'process' => ['value' => 'data'],
54       'destination' => ['plugin' => 'dummy'],
55     ];
56
57     $migration = \Drupal::service('plugin.manager.migration')->createStubMigration($definition);
58
59     $executable = new MigrateExecutable($migration, new MigrateMessage());
60     // When the import runs, the first row imported will trigger an
61     // interruption.
62     $result = $executable->import();
63
64     $this->assertEqual($result, MigrationInterface::RESULT_INCOMPLETE);
65
66     // The status should have been reset to IDLE.
67     $this->assertEqual($migration->getStatus(), MigrationInterface::STATUS_IDLE);
68   }
69
70   /**
71    * Reacts to post-row-save event.
72    *
73    * @param \Drupal\Migrate\Event\MigratePostRowSaveEvent $event
74    *   The migration event.
75    * @param string $name
76    *   The event name.
77    */
78   public function postRowSaveEventRecorder(MigratePostRowSaveEvent $event, $name) {
79     $event->getMigration()->interruptMigration(MigrationInterface::RESULT_INCOMPLETE);
80   }
81
82 }