3 namespace Drupal\Tests\migrate\Kernel;
5 use Drupal\migrate\MigrateExecutable;
8 * Tests rolling back of configuration objects.
12 class MigrateConfigRollbackTest extends MigrateTestBase {
19 public static $modules = ['system', 'language', 'config_translation'];
22 * Tests rolling back configuration.
24 public function testConfigRollback() {
25 // Use system.site configuration to demonstrate importing and rolling back
30 'site_name' => 'Some site',
31 'site_slogan' => 'Awesome slogan',
42 'migration_tags' => ['Import and rollback test'],
44 'plugin' => 'embedded_data',
45 'data_rows' => $variable,
49 'name' => 'site_name',
50 'slogan' => 'site_slogan',
54 'config_name' => 'system.site',
58 /** @var \Drupal\migrate\Plugin\Migration $config_migration */
59 $config_migration = \Drupal::service('plugin.manager.migration')
60 ->createStubMigration($definition);
61 $config_id_map = $config_migration->getIdMap();
63 // Rollback is not enabled for configuration translations.
64 $this->assertFalse($config_migration->getDestinationPlugin()->supportsRollback());
66 // Import and validate config entities were created.
67 $config_executable = new MigrateExecutable($config_migration, $this);
68 $config_executable->import();
69 $config = $this->config('system.site');
70 $this->assertSame('Some site', $config->get('name'));
71 $this->assertSame('Awesome slogan', $config->get('slogan'));
72 $map_row = $config_id_map->getRowBySource(['id' => $variable[0]['id']]);
73 $this->assertNotNull($map_row['destid1']);
75 // Rollback and verify the configuration changes are still there.
76 $config_executable->rollback();
77 $config = $this->config('system.site');
78 $this->assertSame('Some site', $config->get('name'));
79 $this->assertSame('Awesome slogan', $config->get('slogan'));
80 // Confirm the map row is deleted.
81 $map_row = $config_id_map->getRowBySource(['id' => $variable[0]['id']]);
82 $this->assertNull($map_row['destid1']);
84 // We use system configuration to demonstrate importing and rolling back
85 // configuration translations.
90 'site_name' => 'fr - Some site',
91 'site_slogan' => 'fr - Awesome slogan',
96 'site_name' => 'is - Some site',
97 'site_slogan' => 'is - Awesome slogan',
111 'id' => 'i18n_config',
112 'migration_tags' => ['Import and rollback test'],
114 'plugin' => 'embedded_data',
115 'data_rows' => $i18n_variable,
119 'langcode' => 'language',
120 'name' => 'site_name',
121 'slogan' => 'site_slogan',
124 'plugin' => 'config',
125 'config_name' => 'system.site',
126 'translations' => 'true',
130 $config_migration = \Drupal::service('plugin.manager.migration')
131 ->createStubMigration($definition);
132 $config_id_map = $config_migration->getIdMap();
134 // Rollback is enabled for configuration translations.
135 $this->assertTrue($config_migration->getDestinationPlugin()->supportsRollback());
137 // Import and validate config entities were created.
138 $config_executable = new MigrateExecutable($config_migration, $this);
139 $config_executable->import();
141 $language_manager = \Drupal::service('language_manager');
142 foreach ($i18n_variable as $row) {
143 $langcode = $row['language'];
144 /** @var \Drupal\language\Config\LanguageConfigOverride $config_translation */
145 $config_translation = $language_manager->getLanguageConfigOverride($langcode, 'system.site');
146 $this->assertSame($row['site_name'], $config_translation->get('name'));
147 $this->assertSame($row['site_slogan'], $config_translation->get('slogan'));
148 $map_row = $config_id_map->getRowBySource(['id' => $row['id'], 'language' => $row['language']]);
149 $this->assertNotNull($map_row['destid1']);
152 // Rollback and verify the translation have been removed.
153 $config_executable->rollback();
154 foreach ($i18n_variable as $row) {
155 $langcode = $row['language'];
156 $config_translation = $language_manager->getLanguageConfigOverride($langcode, 'system.site');
157 $this->assertNull($config_translation->get('name'));
158 $this->assertNull($config_translation->get('slogan'));
159 // Confirm the map row is deleted.
160 $map_row = $config_id_map->getRowBySource(['id' => $row['id'], 'language' => $langcode]);
161 $this->assertFalse($map_row);
164 // Test that the configuration is still present.
165 $config = $this->config('system.site');
166 $this->assertSame('Some site', $config->get('name'));
167 $this->assertSame('Awesome slogan', $config->get('slogan'));