Chris@4
|
1 <?php
|
Chris@4
|
2
|
Chris@4
|
3 namespace Drupal\Tests\migrate_upgrade\Kernel {
|
Chris@4
|
4
|
Chris@4
|
5 use Drupal\KernelTests\FileSystemModuleDiscoveryDataProviderTrait;
|
Chris@4
|
6 use Drupal\migrate_plus\Entity\Migration;
|
Chris@4
|
7 use Drupal\migrate_upgrade\Commands\MigrateUpgradeCommands;
|
Chris@4
|
8 use Drupal\Tests\migrate_drupal\Kernel\MigrateDrupalTestBase;
|
Chris@4
|
9 use Drupal\Tests\migrate_drupal\Traits\CreateMigrationsTrait;
|
Chris@4
|
10
|
Chris@4
|
11 /**
|
Chris@4
|
12 * Tests the drush command runner for migrate upgrade.
|
Chris@4
|
13 *
|
Chris@4
|
14 * @group migrate_upgrade
|
Chris@4
|
15 *
|
Chris@4
|
16 * @requires module migrate_plus
|
Chris@4
|
17 */
|
Chris@4
|
18 class DrushTest extends MigrateDrupalTestBase {
|
Chris@4
|
19
|
Chris@4
|
20 use FileSystemModuleDiscoveryDataProviderTrait;
|
Chris@4
|
21 use CreateMigrationsTrait;
|
Chris@4
|
22
|
Chris@4
|
23 /**
|
Chris@4
|
24 * The migration plugin manager.
|
Chris@4
|
25 *
|
Chris@4
|
26 * @var \Drupal\migrate\Plugin\MigrationPluginManager
|
Chris@4
|
27 */
|
Chris@4
|
28 protected $migrationManager;
|
Chris@4
|
29
|
Chris@4
|
30 /**
|
Chris@4
|
31 * The Migrate Upgrade Command drush service.
|
Chris@4
|
32 *
|
Chris@4
|
33 * @var \Drupal\migrate_upgrade\Commands\MigrateUpgradeCommands
|
Chris@4
|
34 */
|
Chris@4
|
35 protected $commands;
|
Chris@4
|
36
|
Chris@4
|
37 /**
|
Chris@4
|
38 * The state service.
|
Chris@4
|
39 *
|
Chris@4
|
40 * @var \Drupal\Core\State\StateInterface
|
Chris@4
|
41 */
|
Chris@4
|
42 protected $state;
|
Chris@4
|
43
|
Chris@4
|
44 /**
|
Chris@4
|
45 * {@inheritdoc}
|
Chris@4
|
46 */
|
Chris@4
|
47 protected function setUp() {
|
Chris@4
|
48 // Enable all modules.
|
Chris@4
|
49 self::$modules = array_merge(array_keys($this->coreModuleListDataProvider()), [
|
Chris@4
|
50 'migrate_plus',
|
Chris@4
|
51 'migrate_upgrade',
|
Chris@4
|
52 ]);
|
Chris@4
|
53 parent::setUp();
|
Chris@4
|
54 $this->installSchema('system', ['key_value', 'key_value_expire']);
|
Chris@4
|
55 $this->installConfig(self::$modules);
|
Chris@4
|
56 $this->installEntitySchema('migration_group');
|
Chris@4
|
57 $this->installEntitySchema('migration');
|
Chris@4
|
58 $this->migrationManager = \Drupal::service('plugin.manager.migration');
|
Chris@4
|
59 $this->state = $this->container->get('state');
|
Chris@4
|
60 $this->commands = new MigrateUpgradeCommands($this->state);
|
Chris@4
|
61 }
|
Chris@4
|
62
|
Chris@4
|
63 /**
|
Chris@4
|
64 * Tests that all D6 migrations are generated as migrate plus entities.
|
Chris@4
|
65 */
|
Chris@4
|
66 public function testD6Migrations() {
|
Chris@4
|
67 $skipped_migrations = [
|
Chris@4
|
68 'upgrade_d6_entity_reference_translation_comment__comment_forum',
|
Chris@4
|
69 ];
|
Chris@4
|
70 $migrations = $this->drupal6Migrations();
|
Chris@4
|
71 $options = [
|
Chris@4
|
72 'configure-only' => TRUE,
|
Chris@4
|
73 'legacy-db-key' => $this->sourceDatabase->getKey(),
|
Chris@4
|
74 ];
|
Chris@4
|
75 $this->commands->upgrade($options);
|
Chris@4
|
76 $migrate_plus_migrations = Migration::loadMultiple();
|
Chris@4
|
77 $this->assertMigrations($migrations, $migrate_plus_migrations, $skipped_migrations);
|
Chris@4
|
78 $optional = array_flip($migrate_plus_migrations['upgrade_d6_url_alias']->toArray()['migration_dependencies']['optional']);
|
Chris@4
|
79 $this->assertArrayHasKey('upgrade_d6_node_translation_page', $optional);
|
Chris@4
|
80 }
|
Chris@4
|
81
|
Chris@4
|
82 /**
|
Chris@4
|
83 * Tests that all D7 migrations are generated as migrate plus entities.
|
Chris@4
|
84 */
|
Chris@4
|
85 public function testD7Migrations() {
|
Chris@4
|
86 $skipped_migrations = [
|
Chris@4
|
87 'upgrade_d7_entity_reference_translation_comment__comment_forum',
|
Chris@4
|
88 ];
|
Chris@4
|
89 $migrations = $this->drupal7Migrations();
|
Chris@4
|
90 $this->sourceDatabase->update('system')
|
Chris@4
|
91 ->fields(['status' => 1])
|
Chris@4
|
92 ->condition('name', 'profile')
|
Chris@4
|
93 ->execute();
|
Chris@4
|
94 $options = [
|
Chris@4
|
95 'configure-only' => TRUE,
|
Chris@4
|
96 'legacy-db-key' => $this->sourceDatabase->getKey(),
|
Chris@4
|
97 ];
|
Chris@4
|
98 $this->commands->upgrade($options);
|
Chris@4
|
99 $migrate_plus_migrations = Migration::loadMultiple();
|
Chris@4
|
100 $this->assertMigrations($migrations, $migrate_plus_migrations, $skipped_migrations);
|
Chris@4
|
101 $optional = array_flip($migrate_plus_migrations['upgrade_d7_url_alias']->toArray()['migration_dependencies']['optional']);
|
Chris@4
|
102 $this->assertArrayHasKey('upgrade_d7_node_translation_page', $optional);
|
Chris@4
|
103 }
|
Chris@4
|
104
|
Chris@4
|
105 /**
|
Chris@4
|
106 * Asserts that all migrations are exported as migrate plus entities.
|
Chris@4
|
107 *
|
Chris@4
|
108 * @param \Drupal\migrate\Plugin\MigrationInterface[] $migrations
|
Chris@4
|
109 * The migrations.
|
Chris@4
|
110 * @param \Drupal\migrate_plus\Entity\MigrationInterface[] $migrate_plus_migrations
|
Chris@4
|
111 * The migrate plus config entities.
|
Chris@4
|
112 * @param array $skipped_migrations
|
Chris@4
|
113 * The migrations to skip.
|
Chris@4
|
114 */
|
Chris@4
|
115 protected function assertMigrations(array $migrations, array $migrate_plus_migrations, array $skipped_migrations) {
|
Chris@4
|
116 foreach ($migrations as $id => $migration) {
|
Chris@4
|
117 $migration_id = 'upgrade_' . str_replace(':', '_', $migration->id());
|
Chris@4
|
118 if (in_array($migration_id, $skipped_migrations, TRUE)) {
|
Chris@4
|
119 continue;
|
Chris@4
|
120 }
|
Chris@4
|
121 $this->assertArrayHasKey($migration_id, $migrate_plus_migrations);
|
Chris@4
|
122 }
|
Chris@4
|
123 }
|
Chris@4
|
124
|
Chris@4
|
125 }
|
Chris@4
|
126
|
Chris@4
|
127 }
|
Chris@4
|
128
|
Chris@4
|
129 namespace {
|
Chris@4
|
130
|
Chris@4
|
131 if (!function_exists('drush_print')) {
|
Chris@4
|
132
|
Chris@4
|
133 /**
|
Chris@4
|
134 * Stub for drush_print.
|
Chris@4
|
135 *
|
Chris@4
|
136 * @param string $message
|
Chris@4
|
137 * The message to print.
|
Chris@4
|
138 * @param int $indent
|
Chris@4
|
139 * The indentation (space chars)
|
Chris@4
|
140 * @param resource $handle
|
Chris@4
|
141 * File handle to write to. NULL will write to standard output, STDERR
|
Chris@4
|
142 * will write to the standard error. See
|
Chris@4
|
143 * http://php.net/manual/en/features.commandline.io-streams.php.
|
Chris@4
|
144 * @param bool $newline
|
Chris@4
|
145 * Add a "\n" to the end of the output. Defaults to TRUE.
|
Chris@4
|
146 */
|
Chris@4
|
147 function drush_print($message = '', $indent = 0, $handle = NULL, $newline = TRUE) {
|
Chris@4
|
148 // Do nothing.
|
Chris@4
|
149 }
|
Chris@4
|
150
|
Chris@4
|
151 }
|
Chris@4
|
152
|
Chris@4
|
153 if (!function_exists('dt')) {
|
Chris@4
|
154
|
Chris@4
|
155 /**
|
Chris@4
|
156 * Stub for dt().
|
Chris@4
|
157 *
|
Chris@4
|
158 * @param string $message
|
Chris@4
|
159 * The text.
|
Chris@4
|
160 * @param array $replace
|
Chris@4
|
161 * The replacement values.
|
Chris@4
|
162 *
|
Chris@4
|
163 * @return string
|
Chris@4
|
164 * The text.
|
Chris@4
|
165 */
|
Chris@4
|
166 function dt($message, array $replace = []) {
|
Chris@4
|
167 return strtr($message, $replace);
|
Chris@4
|
168 }
|
Chris@4
|
169
|
Chris@4
|
170 }
|
Chris@4
|
171
|
Chris@4
|
172 if (!function_exists('drush_op')) {
|
Chris@4
|
173
|
Chris@4
|
174 /**
|
Chris@4
|
175 * Stub for drush_op.
|
Chris@4
|
176 *
|
Chris@4
|
177 * @param callable $callable
|
Chris@4
|
178 * The function to call.
|
Chris@4
|
179 */
|
Chris@4
|
180 function drush_op(callable $callable) {
|
Chris@4
|
181 $args = func_get_args();
|
Chris@4
|
182 array_shift($args);
|
Chris@4
|
183 call_user_func_array($callable, $args);
|
Chris@4
|
184 }
|
Chris@4
|
185
|
Chris@4
|
186 }
|
Chris@4
|
187
|
Chris@4
|
188 }
|