setUpDrupal(1, TRUE, "7.30"); $options = array( 'root' => $this->webroot(), 'uri' => key($sites), 'yes' => NULL, 'cache' => NULL, 'skip' => NULL, // No FirePHP 'strict' => 0, ); // Prepare a list of modules with several update statuses. $modules_dl = array(); $modules_en = array(); // Update available but not a security one. Cross fingers they never release a security update. $modules_dl[] = 'bad_judgement-1.0-rc38'; $modules_en[] = 'bad_judgement'; // Old devel release with a security update available. $modules_dl[] = 'devel-7.x-1.0-rc1'; $modules_en[] = 'devel'; // Installed version not supported. $modules_dl[] = 'cck-2.x-dev'; $modules_en[] = 'cck'; // Up to date. $modules_dl[] = 'ctools'; $modules_en[] = 'ctools'; // Download and enable the modules. Additionally download a module from git, so it has no version information. $this->drush('pm-download', $modules_dl, $options); $this->drush('pm-download', array('zen'), $options + array('package-handler' => 'git_drupalorg')); $modules_en[] = 'zen'; // self::EXIT_ERROR because of bad_judgement. $this->drush('pm-enable', $modules_en, $options, NULL, NULL, self::EXIT_ERROR); } /** * Test several update statuses via drupal backend. */ function testUpdateStatusDrupal() { $this->doTest('drupal'); } /** * Test several update statuses via drush backend. */ function testUpdateStatusDrush() { $this->doTest('drush'); } function doTest($update_backend) { // Test several projects with a variety of statuses. $options = array( 'root' => $this->webroot(), 'uri' => key($this->getSites()), 'verbose' => NULL, 'backend' => NULL, 'update-backend' => $update_backend, ); $this->drush('pm-updatestatus', array(), $options); $parsed = $this->parse_backend_output($this->getOutput()); $data = $parsed['object']; $expected = array( 'drupal' => 'SECURITY UPDATE available', 'bad_judgement' => 'Update available', 'ctools' => 'Up to date', 'devel' => 'SECURITY UPDATE available', 'cck' => 'Installed version not supported', 'zen' => 'Project was not packaged by drupal.org but obtained from git. You need to enable git_deploy module', ); foreach ($expected as $module => $status_msg) { $this->assertArrayHasKey($module, $data, "$module module present in pm-updatestatus output"); $this->assertEquals($data[$module]['status_msg'], $status_msg, "$module status is '$status_msg'"); } // Test statuses when asked for specific projects and versions. $args = array( 'bad_judgement-1.0-rc38', 'ctools-0.0', 'devel-1.5', 'foo', ); $this->drush('pm-updatestatus', $args, $options); $parsed = $this->parse_backend_output($this->getOutput()); $data = $parsed['object']; $expected = array( 'bad_judgement' => 'Specified version already installed', 'ctools' => 'Specified version not found', 'devel' => 'Specified version available', 'foo' => 'Specified project not found', ); foreach ($expected as $module => $status_msg) { $this->assertArrayHasKey($module, $data, "$module module present in pm-updatestatus output"); $this->assertEquals($data[$module]['status_msg'], $status_msg, "$module status is '$status_msg'"); } // We don't expect any output for other projects than the provided ones. $not_expected = array( 'drupal', 'cck', 'zen', ); foreach ($not_expected as $module) { $this->assertArrayNotHasKey($module, $data, "$module module not present in pm-updatestatus output"); } // Test --security-only. $this->drush('pm-updatestatus', array(), $options + array('security-only' => NULL)); $parsed = $this->parse_backend_output($this->getOutput()); $data = $parsed['object']; $expected = array( 'drupal' => 'SECURITY UPDATE available', 'devel' => 'SECURITY UPDATE available', ); foreach ($expected as $module => $status_msg) { $this->assertArrayHasKey($module, $data, "$module module present in pm-updatestatus output"); $this->assertEquals($data[$module]['status_msg'], $status_msg, "$module status is '$status_msg'"); } // We don't expect any output for projects without security updates. $not_expected = array( 'bad_judgement', 'ctools', 'cck', 'zen', ); foreach ($not_expected as $module) { $this->assertArrayNotHasKey($module, $data, "$module module not present in pm-updatestatus output"); } // Test --check-disabled. $dis_options = array( 'root' => $this->webroot(), 'uri' => key($this->getSites()), 'yes' => NULL, ); $this->drush('pm-disable', array('devel'), $dis_options); $this->drush('pm-updatestatus', array(), $options + array('check-disabled' => 1)); $parsed = $this->parse_backend_output($this->getOutput()); $data = $parsed['object']; $this->assertArrayHasKey('devel', $data, "devel module present in pm-updatestatus output"); $this->drush('pm-updatestatus', array(), $options + array('check-disabled' => 0)); $parsed = $this->parse_backend_output($this->getOutput()); $data = $parsed['object']; $this->assertArrayNotHasKey('devel', $data, "devel module not present in pm-updatestatus output"); } }