MigrateUpgradeTestBase.php in Migrate Upgrade 8
File
src/Tests/MigrateUpgradeTestBase.php
View source
<?php
namespace Drupal\migrate_upgrade\Tests;
use Drupal\Core\Database\Database;
use Drupal\simpletest\WebTestBase;
abstract class MigrateUpgradeTestBase extends WebTestBase {
protected $profile = 'standard';
protected $sourceDatabase;
public static $modules = [
'migrate_upgrade',
];
protected function setUp() {
parent::setUp();
$this
->createMigrationConnection();
$this->sourceDatabase = Database::getConnection('default', 'migrate_upgrade');
$this
->drupalLogin($this->rootUser);
}
protected function loadFixture($path) {
$default_db = Database::getConnection()
->getKey();
Database::setActiveConnection($this->sourceDatabase
->getKey());
if (substr($path, -3) == '.gz') {
$path = 'compress.zlib://' . $path;
}
require $path;
Database::setActiveConnection($default_db);
}
protected function createMigrationConnection() {
$connection_info = Database::getConnectionInfo('default')['default'];
if ($connection_info['driver'] === 'sqlite') {
$file = $this->publicFilesDirectory . '/' . $this->testId . '-migrate.db.sqlite';
touch($file);
$connection_info['database'] = $file;
$connection_info['prefix'] = '';
}
else {
$prefix = is_array($connection_info['prefix']) ? $connection_info['prefix']['default'] : $connection_info['prefix'];
$connection_info['prefix'] = $prefix . '0';
}
Database::addConnectionInfo('migrate_upgrade', 'default', $connection_info);
}
protected function tearDown() {
Database::removeConnection('migrate_upgrade');
parent::tearDown();
}
protected function testMigrateUpgrade() {
$connection_options = $this->sourceDatabase
->getConnectionOptions();
$this
->drupalGet('/upgrade');
$this
->assertText('Upgrade a Drupal site by importing it into a clean and empty new install of Drupal 8. You will lose any existing configuration once you import your site into it. See the upgrading handbook for more detailed information.');
$this
->drupalPostForm(NULL, [], t('Continue'));
$this
->assertText('Provide credentials for the database of the Drupal site you want to upgrade.');
$this
->assertFieldByName('mysql[host]');
$driver = $connection_options['driver'];
$connection_options['prefix'] = $connection_options['prefix']['default'];
$drivers = drupal_get_database_types();
$form = $drivers[$driver]
->getFormOptions($connection_options);
$connection_options = array_intersect_key($connection_options, $form + $form['advanced_options']);
$edits = $this
->translatePostValues([
'driver' => $driver,
$driver => $connection_options,
'source_base_path' => $this
->getSourceBasePath(),
]);
$this
->drupalPostForm(NULL, $edits, t('Review upgrade'));
$this
->assertResponse(200);
$this
->assertText('Are you sure?');
$this
->drupalPostForm(NULL, [], t('Perform upgrade'));
$this
->assertText(t('Congratulations, you upgraded Drupal!'));
$this
->resetAll();
$expected_counts = $this
->getEntityCounts();
foreach (array_keys(\Drupal::entityTypeManager()
->getDefinitions()) as $entity_type) {
$real_count = count(\Drupal::entityTypeManager()
->getStorage($entity_type)
->loadMultiple());
$expected_count = isset($expected_counts[$entity_type]) ? $expected_counts[$entity_type] : 0;
$this
->assertEqual($expected_count, $real_count, "Found {$real_count} {$entity_type} entities, expected {$expected_count}.");
}
}
protected abstract function getSourceBasePath();
protected abstract function getEntityCounts();
}