+++ /dev/null
-<?php
-
-/**
- * @file
- * Prepare a codebase with modules in several update status and test pm-updatestatus.
- */
-
-namespace Unish;
-
-/**
- * @group slow
- * @group pm
- */
-class pmUpdateStatus extends CommandUnishTestCase {
-
- /**
- * Setup the test environment.
- *
- * Here we assume that any Drupal core version parses data from Drupal's
- * update service the same way. We focus on testing drush functionality.
- *
- * Several drupal core versions are already tested by pmUpdateCode.
- *
- * We choose to setup a Drupal 7 environment for convenience:
- * - It has modules in each maintenance status
- * and they're not willing to change in short
- * - Drupal 6 will start to be unsupported at some point
- * - Drupal 8 still has not enough variety to cover the tests
- */
- function setUp() {
- $sites = $this->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");
- }
-}
-