function pmUpdateCode::testUpdateCode

8.0.x pmUpdateCodeTest.php pmUpdateCode::testUpdateCode()
6.x pmUpdateCodeTest.php pmUpdateCode::testUpdateCode()
7.x pmUpdateCodeTest.php pmUpdateCode::testUpdateCode()
4.x pmUpdateCodeTest.php pmUpdateCode::testUpdateCode()
5.x pmUpdateCodeTest.php pmUpdateCode::testUpdateCode()
master pmUpdateCodeTest.php pmUpdateCode::testUpdateCode()

File

tests/pmUpdateCodeTest.php, line 70
Prepare a codebase and upgrade it in several stages, exercising updatecode's filters.

Namespace

Unish

Class

pmUpdateCode
@group slow @group pm

Code

function testUpdateCode() {
  $extension = UNISH_DRUPAL_MAJOR_VERSION == 8 ? '.info.yml' : '.info';
  $first = $this->modules[1];
  $second = $this->modules[2];

  $options = array(
    'root' => $this->webroot(),
    'uri' => key($this->getSites()),
    'yes' => NULL,
    'backup-dir' => UNISH_SANDBOX . '/backups',
    'cache' => NULL,
    'check-updatedb' => 0,
    
    // Needed in order to get 'Up to date' in the return value of updatestatus. See pm_project_filter().
    'verbose' => NULL,
    'strict' => 0,
  );

  // Upgrade a specific module.
  $this->drush('pm-updatecode', array($first), $options + array());

  // Assure that first was upgraded and second was not.
  $this->drush('pm-updatestatus', array(), $options + array('format' => 'json'));
  $all = $this->getOutputFromJSON();
  $this->assertEquals($all->$first->existing_version, $all->$first->candidate_version);
  $this->assertNotEquals($all->$second->existing_version, $all->$second->candidate_version);

  // Lock second, and update core.
  $this->drush('pm-updatecode', array(), $options + array('lock' => $second));
  $list = $this->getOutputAsList(); // For debugging.
  $this->drush('pm-updatestatus', array(), $options + array('format' => 'json'));
  $all = $this->getOutputFromJSON();
  $this->assertEquals($all->drupal->existing_version, $all->drupal->candidate_version);
  $this->assertNotEquals($all->$second->existing_version, $all->$second->candidate_version);

  // Unlock second, update, and check.
  $this->drush('pm-updatecode', array(), $options + array('unlock' => $second, 'no-backup' => NULL));
  $list = $this->getOutputAsList();
  $this->drush('pm-updatestatus', array(), $options + array('format' => 'json'));
  $all = $this->getOutputFromJSON();
  $this->assertEquals($all->$second->existing_version, $all->$second->candidate_version);

  // Verify that we keep backups as instructed.
  $backup_dir = UNISH_SANDBOX . '/backups';
  $Directory = new \RecursiveDirectoryIterator($backup_dir);
  $Iterator = new \RecursiveIteratorIterator($Directory);
  $found = FALSE;
  foreach ($Iterator as $item) {
    if (basename($item) == $first . $extension) {
      $found = TRUE;
      break;
    }
  }
  $this->assertTrue($found, 'Backup exists and contains the first module.');

  $Iterator = new \RecursiveIteratorIterator($Directory);
  $found = FALSE;
  foreach ($Iterator as $item) {
    if (basename($item) == $second . '.module') {
      $found = TRUE;
      break;
    }
  }
  $this->assertFalse($found, 'Backup exists and does not contain the second module.');
}