Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Tests\migrate\Kernel;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\migrate\MigrateExecutable;
|
Chris@0
|
6
|
Chris@0
|
7 /**
|
Chris@0
|
8 * Tests rolling back of configuration objects.
|
Chris@0
|
9 *
|
Chris@0
|
10 * @group migrate
|
Chris@0
|
11 */
|
Chris@0
|
12 class MigrateConfigRollbackTest extends MigrateTestBase {
|
Chris@0
|
13
|
Chris@0
|
14 /**
|
Chris@0
|
15 * Modules to enable.
|
Chris@0
|
16 *
|
Chris@0
|
17 * @var array
|
Chris@0
|
18 */
|
Chris@0
|
19 public static $modules = ['system', 'language', 'config_translation'];
|
Chris@0
|
20
|
Chris@0
|
21 /**
|
Chris@0
|
22 * Tests rolling back configuration.
|
Chris@0
|
23 */
|
Chris@0
|
24 public function testConfigRollback() {
|
Chris@0
|
25 // Use system.site configuration to demonstrate importing and rolling back
|
Chris@0
|
26 // configuration.
|
Chris@0
|
27 $variable = [
|
Chris@0
|
28 [
|
Chris@0
|
29 'id' => 'site_name',
|
Chris@0
|
30 'site_name' => 'Some site',
|
Chris@0
|
31 'site_slogan' => 'Awesome slogan',
|
Chris@0
|
32 ],
|
Chris@0
|
33 ];
|
Chris@0
|
34 $ids = [
|
Chris@0
|
35 'id' =>
|
Chris@0
|
36 [
|
Chris@17
|
37 'type' => 'string',
|
Chris@0
|
38 ],
|
Chris@0
|
39 ];
|
Chris@0
|
40 $definition = [
|
Chris@0
|
41 'id' => 'config',
|
Chris@0
|
42 'migration_tags' => ['Import and rollback test'],
|
Chris@0
|
43 'source' => [
|
Chris@0
|
44 'plugin' => 'embedded_data',
|
Chris@0
|
45 'data_rows' => $variable,
|
Chris@0
|
46 'ids' => $ids,
|
Chris@0
|
47 ],
|
Chris@0
|
48 'process' => [
|
Chris@0
|
49 'name' => 'site_name',
|
Chris@0
|
50 'slogan' => 'site_slogan',
|
Chris@0
|
51 ],
|
Chris@0
|
52 'destination' => [
|
Chris@0
|
53 'plugin' => 'config',
|
Chris@0
|
54 'config_name' => 'system.site',
|
Chris@0
|
55 ],
|
Chris@0
|
56 ];
|
Chris@0
|
57
|
Chris@0
|
58 /** @var \Drupal\migrate\Plugin\Migration $config_migration */
|
Chris@0
|
59 $config_migration = \Drupal::service('plugin.manager.migration')
|
Chris@0
|
60 ->createStubMigration($definition);
|
Chris@0
|
61 $config_id_map = $config_migration->getIdMap();
|
Chris@0
|
62
|
Chris@0
|
63 // Rollback is not enabled for configuration translations.
|
Chris@0
|
64 $this->assertFalse($config_migration->getDestinationPlugin()->supportsRollback());
|
Chris@0
|
65
|
Chris@0
|
66 // Import and validate config entities were created.
|
Chris@0
|
67 $config_executable = new MigrateExecutable($config_migration, $this);
|
Chris@0
|
68 $config_executable->import();
|
Chris@0
|
69 $config = $this->config('system.site');
|
Chris@0
|
70 $this->assertSame('Some site', $config->get('name'));
|
Chris@0
|
71 $this->assertSame('Awesome slogan', $config->get('slogan'));
|
Chris@0
|
72 $map_row = $config_id_map->getRowBySource(['id' => $variable[0]['id']]);
|
Chris@0
|
73 $this->assertNotNull($map_row['destid1']);
|
Chris@0
|
74
|
Chris@0
|
75 // Rollback and verify the configuration changes are still there.
|
Chris@0
|
76 $config_executable->rollback();
|
Chris@0
|
77 $config = $this->config('system.site');
|
Chris@0
|
78 $this->assertSame('Some site', $config->get('name'));
|
Chris@0
|
79 $this->assertSame('Awesome slogan', $config->get('slogan'));
|
Chris@0
|
80 // Confirm the map row is deleted.
|
Chris@0
|
81 $map_row = $config_id_map->getRowBySource(['id' => $variable[0]['id']]);
|
Chris@0
|
82 $this->assertNull($map_row['destid1']);
|
Chris@0
|
83
|
Chris@0
|
84 // We use system configuration to demonstrate importing and rolling back
|
Chris@0
|
85 // configuration translations.
|
Chris@0
|
86 $i18n_variable = [
|
Chris@0
|
87 [
|
Chris@0
|
88 'id' => 'site_name',
|
Chris@0
|
89 'language' => 'fr',
|
Chris@0
|
90 'site_name' => 'fr - Some site',
|
Chris@0
|
91 'site_slogan' => 'fr - Awesome slogan',
|
Chris@0
|
92 ],
|
Chris@0
|
93 [
|
Chris@0
|
94 'id' => 'site_name',
|
Chris@0
|
95 'language' => 'is',
|
Chris@0
|
96 'site_name' => 'is - Some site',
|
Chris@0
|
97 'site_slogan' => 'is - Awesome slogan',
|
Chris@0
|
98 ],
|
Chris@0
|
99 ];
|
Chris@0
|
100 $ids = [
|
Chris@0
|
101 'id' =>
|
Chris@0
|
102 [
|
Chris@17
|
103 'type' => 'string',
|
Chris@0
|
104 ],
|
Chris@0
|
105 'language' =>
|
Chris@0
|
106 [
|
Chris@17
|
107 'type' => 'string',
|
Chris@17
|
108 ],
|
Chris@0
|
109 ];
|
Chris@0
|
110 $definition = [
|
Chris@0
|
111 'id' => 'i18n_config',
|
Chris@0
|
112 'migration_tags' => ['Import and rollback test'],
|
Chris@0
|
113 'source' => [
|
Chris@0
|
114 'plugin' => 'embedded_data',
|
Chris@0
|
115 'data_rows' => $i18n_variable,
|
Chris@0
|
116 'ids' => $ids,
|
Chris@0
|
117 ],
|
Chris@0
|
118 'process' => [
|
Chris@0
|
119 'langcode' => 'language',
|
Chris@0
|
120 'name' => 'site_name',
|
Chris@0
|
121 'slogan' => 'site_slogan',
|
Chris@0
|
122 ],
|
Chris@0
|
123 'destination' => [
|
Chris@0
|
124 'plugin' => 'config',
|
Chris@0
|
125 'config_name' => 'system.site',
|
Chris@0
|
126 'translations' => 'true',
|
Chris@0
|
127 ],
|
Chris@0
|
128 ];
|
Chris@0
|
129
|
Chris@0
|
130 $config_migration = \Drupal::service('plugin.manager.migration')
|
Chris@0
|
131 ->createStubMigration($definition);
|
Chris@0
|
132 $config_id_map = $config_migration->getIdMap();
|
Chris@0
|
133
|
Chris@0
|
134 // Rollback is enabled for configuration translations.
|
Chris@0
|
135 $this->assertTrue($config_migration->getDestinationPlugin()->supportsRollback());
|
Chris@0
|
136
|
Chris@0
|
137 // Import and validate config entities were created.
|
Chris@0
|
138 $config_executable = new MigrateExecutable($config_migration, $this);
|
Chris@0
|
139 $config_executable->import();
|
Chris@0
|
140
|
Chris@0
|
141 $language_manager = \Drupal::service('language_manager');
|
Chris@0
|
142 foreach ($i18n_variable as $row) {
|
Chris@0
|
143 $langcode = $row['language'];
|
Chris@0
|
144 /** @var \Drupal\language\Config\LanguageConfigOverride $config_translation */
|
Chris@0
|
145 $config_translation = $language_manager->getLanguageConfigOverride($langcode, 'system.site');
|
Chris@0
|
146 $this->assertSame($row['site_name'], $config_translation->get('name'));
|
Chris@0
|
147 $this->assertSame($row['site_slogan'], $config_translation->get('slogan'));
|
Chris@0
|
148 $map_row = $config_id_map->getRowBySource(['id' => $row['id'], 'language' => $row['language']]);
|
Chris@0
|
149 $this->assertNotNull($map_row['destid1']);
|
Chris@0
|
150 }
|
Chris@0
|
151
|
Chris@0
|
152 // Rollback and verify the translation have been removed.
|
Chris@0
|
153 $config_executable->rollback();
|
Chris@0
|
154 foreach ($i18n_variable as $row) {
|
Chris@0
|
155 $langcode = $row['language'];
|
Chris@0
|
156 $config_translation = $language_manager->getLanguageConfigOverride($langcode, 'system.site');
|
Chris@0
|
157 $this->assertNull($config_translation->get('name'));
|
Chris@0
|
158 $this->assertNull($config_translation->get('slogan'));
|
Chris@0
|
159 // Confirm the map row is deleted.
|
Chris@0
|
160 $map_row = $config_id_map->getRowBySource(['id' => $row['id'], 'language' => $langcode]);
|
Chris@0
|
161 $this->assertFalse($map_row);
|
Chris@0
|
162 }
|
Chris@0
|
163
|
Chris@0
|
164 // Test that the configuration is still present.
|
Chris@0
|
165 $config = $this->config('system.site');
|
Chris@0
|
166 $this->assertSame('Some site', $config->get('name'));
|
Chris@0
|
167 $this->assertSame('Awesome slogan', $config->get('slogan'));
|
Chris@0
|
168 }
|
Chris@0
|
169
|
Chris@0
|
170 }
|