160 lines
5.3 KiB
Plaintext

<?php
/*
* @file
* Contains tests for Translation management
*/
/**
* Upgrade tests.
*/
class TMGMTUpgradeAlpha1TestCase extends DrupalWebTestCase {
protected $profile = 'testing';
static function getInfo() {
return array(
'name' => t('Upgrade tests Alpha1'),
'description' => t('Tests the upgrade path from 7.x-1.0-alpha1'),
'group' => t('Translation Management'),
);
}
function setUp() {
// Enable all dependencies.
parent::setUp(array('entity', 'views', 'translation', 'locale'));
// Create the tmgmt tables and fill them.
module_load_include('inc', 'tmgmt', 'tests/tmgmt_alpha1_dump.sql');
// @todo: Figure out why this is necessary.
$enabled_modules = db_query("SELECT name FROM {system} where status = 1 and type = 'module'")->fetchCol();
foreach ($enabled_modules as $enabled_module) {
module_load_install($enabled_module);
// Set the schema version to the number of the last update provided
// by the module.
$versions = drupal_get_schema_versions($enabled_module);
$version = $versions ? max($versions) : SCHEMA_INSTALLED;
db_update('system')
->condition('name', $enabled_module)
->fields(array('schema_version' => $version))
->execute();
}
// Set schema version to 0 and then install the tmgmt modules, to simulate
// an enabling.
db_update('system')
->condition('name', array('tmgmt', 'tmgmt_ui', 'tmgmt_field', 'tmgmt_node', 'tmgmt_test', 'tmgmt_node_ui'))
->fields(array(
'schema_version' => 0,
))
->execute();
module_enable(array('tmgmt', 'tmgmt_ui', 'tmgmt_field', 'tmgmt_node', 'tmgmt_test', 'tmgmt_node_ui'));
// Log in as a user that can run update.php
$admin = $this->drupalCreateUser(array('administer software updates'));
$this->drupalLogin($admin);
$this->performUpgrade();
}
/**
* Verifies that the data has been migrated properly
*/
function testUpgradePath() {
// Log in as a user with enough permissions.
$translator = $this->drupalCreateUser(array('administer tmgmt'));
$this->drupalLogin($translator);
// Go to a job and check the review form.
$this->drupalGet('admin/tmgmt/jobs/1');
// Make sure the #status values have been set accordingly.
$this->assertRaw(t('Accepted: @accepted, reviewed: @reviewed, translated: @translated, pending: @pending.', array('@accepted' => 0, '@reviewed' => 0, '@translated' => 2, '@pending' => 0)));
// Extract the word count field and make sure it's correct.
$word_count = $this->xpath('//td[contains(@class, :class)]', array(':class' => 'views-field-word-count-1'));
$this->assertEqual(6, trim((string)reset($word_count)));
$this->clickLink(t('review'));
// Needs review icon.
$this->assertRaw('tmgmt-ui-icon-yellow tmgmt-ui-state-translated');
// Translated values.
$this->assertRaw('de_Test content');
$this->assertRaw('de_This is the body.');
// Reject button.
$this->assertRaw('✗');
// Check that accepted count has been updated correctly.
$this->drupalGet('admin/tmgmt/jobs/2');
// Make sure the #status values have been set accordingly.
$this->assertRaw(t('Accepted: @accepted, reviewed: @reviewed, translated: @translated, pending: @pending.', array('@accepted' => 2, '@reviewed' => 0, '@translated' => 0, '@pending' => 0)));
}
/**
* Perform the upgrade.
*
* Copied and adapted from UpgradePathTestCase::performUpgrade().
*
* @param $register_errors
* Register the errors during the upgrade process as failures.
* @return
* TRUE if the upgrade succeeded, FALSE otherwise.
*/
protected function performUpgrade($register_errors = TRUE) {
$update_url = $GLOBALS['base_url'] . '/update.php';
// Load the first update screen.
$this->drupalGet($update_url, array('external' => TRUE));
if (!$this->assertResponse(200)) {
return FALSE;
}
// Continue.
$this->drupalPost(NULL, array(), t('Continue'));
if (!$this->assertResponse(200)) {
return FALSE;
}
// The test should pass if there are no pending updates.
$content = $this->drupalGetContent();
if (strpos($content, t('No pending updates.')) !== FALSE) {
$this->pass(t('No pending updates and therefore no upgrade process to test.'));
$this->pendingUpdates = FALSE;
return TRUE;
}
// Go!
$this->drupalPost(NULL, array(), t('Apply pending updates'));
if (!$this->assertResponse(200)) {
return FALSE;
}
// Check for errors during the update process.
foreach ($this->xpath('//li[@class=:class]', array(':class' => 'failure')) as $element) {
$message = strip_tags($element->asXML());
$this->upgradeErrors[] = $message;
if ($register_errors) {
$this->fail($message);
}
}
if (!empty($this->upgradeErrors)) {
// Upgrade failed, the installation might be in an inconsistent state,
// don't process.
return FALSE;
}
// Check if there still are pending updates.
$this->drupalGet($update_url, array('external' => TRUE));
$this->drupalPost(NULL, array(), t('Continue'));
if (!$this->assertText(t('No pending updates.'), t('No pending updates at the end of the update process.'))) {
return FALSE;
}
// Clear caches.
$this->checkPermissions(array(), TRUE);
}
}