summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/update/tests/aaa_update_test.1_0.xml34
-rw-r--r--modules/update/tests/aaa_update_test.info7
-rw-r--r--modules/update/tests/aaa_update_test.module7
-rw-r--r--modules/update/tests/bbb_update_test.1_0.xml34
-rw-r--r--modules/update/tests/bbb_update_test.info7
-rw-r--r--modules/update/tests/bbb_update_test.module7
-rw-r--r--modules/update/tests/ccc_update_test.1_0.xml34
-rw-r--r--modules/update/tests/ccc_update_test.info7
-rw-r--r--modules/update/tests/ccc_update_test.module7
-rw-r--r--modules/update/tests/drupal.0.xml (renamed from modules/update/tests/no-updates.xml)0
-rw-r--r--modules/update/tests/drupal.1.xml (renamed from modules/update/tests/normal-update.xml)0
-rw-r--r--modules/update/tests/drupal.2-sec.xml (renamed from modules/update/tests/security-update.xml)0
-rw-r--r--modules/update/tests/drupal.dev.xml (renamed from modules/update/tests/dev-snapshot.xml)0
-rw-r--r--modules/update/tests/update_test.module30
-rw-r--r--modules/update/update.test122
15 files changed, 266 insertions, 30 deletions
diff --git a/modules/update/tests/aaa_update_test.1_0.xml b/modules/update/tests/aaa_update_test.1_0.xml
new file mode 100644
index 000000000..a168453f0
--- /dev/null
+++ b/modules/update/tests/aaa_update_test.1_0.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<project xmlns:dc="http://purl.org/dc/elements/1.1/">
+<title>AAA Update test</title>
+<short_name>aaa_update_test</short_name>
+<dc:creator>Drupal</dc:creator>
+<api_version>7.x</api_version>
+<recommended_major>1</recommended_major>
+<supported_majors>1</supported_majors>
+<default_major>1</default_major>
+<project_status>published</project_status>
+<link>http://example.com/project/aaa_update_test</link>
+ <terms>
+ <term><name>Projects</name><value>Modules</value></term>
+ </terms>
+<releases>
+ <release>
+ <name>aaa_update_test 7.x-1.0</name>
+ <version>7.x-1.0</version>
+ <tag>DRUPAL-7--1-0</tag>
+ <version_major>1</version_major>
+ <version_patch>0</version_patch>
+ <status>published</status>
+ <release_link>http://example.com/aaa_update_test-7-x-1-0-release</release_link>
+ <download_link>http://example.com/aaa_update_test-7.x-1.0.tar.gz</download_link>
+ <date>1250424521</date>
+ <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash>
+ <filesize>1073741824</filesize>
+ <terms>
+ <term><name>Release type</name><value>New features</value></term>
+ <term><name>Release type</name><value>Bug fixes</value></term>
+ </terms>
+ </release>
+</releases>
+</project>
diff --git a/modules/update/tests/aaa_update_test.info b/modules/update/tests/aaa_update_test.info
new file mode 100644
index 000000000..634d9840d
--- /dev/null
+++ b/modules/update/tests/aaa_update_test.info
@@ -0,0 +1,7 @@
+; $Id$
+name = AAA Update test
+description = Support module for update module testing.
+package = Testing
+core = 7.x
+files[] = aaa_update_test.module
+hidden = TRUE
diff --git a/modules/update/tests/aaa_update_test.module b/modules/update/tests/aaa_update_test.module
new file mode 100644
index 000000000..da4699c05
--- /dev/null
+++ b/modules/update/tests/aaa_update_test.module
@@ -0,0 +1,7 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Dummy module for testing Update status.
+ */
diff --git a/modules/update/tests/bbb_update_test.1_0.xml b/modules/update/tests/bbb_update_test.1_0.xml
new file mode 100644
index 000000000..bfdf196f8
--- /dev/null
+++ b/modules/update/tests/bbb_update_test.1_0.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<project xmlns:dc="http://purl.org/dc/elements/1.1/">
+<title>BBB Update test</title>
+<short_name>bbb_update_test</short_name>
+<dc:creator>Drupal</dc:creator>
+<api_version>7.x</api_version>
+<recommended_major>1</recommended_major>
+<supported_majors>1</supported_majors>
+<default_major>1</default_major>
+<project_status>published</project_status>
+<link>http://example.com/project/bbb_update_test</link>
+ <terms>
+ <term><name>Projects</name><value>Modules</value></term>
+ </terms>
+<releases>
+ <release>
+ <name>bbb_update_test 7.x-1.0</name>
+ <version>7.x-1.0</version>
+ <tag>DRUPAL-7--1-0</tag>
+ <version_major>1</version_major>
+ <version_patch>0</version_patch>
+ <status>published</status>
+ <release_link>http://example.com/bbb_update_test-7-x-1-0-release</release_link>
+ <download_link>http://example.com/bbb_update_test-7.x-1.0.tar.gz</download_link>
+ <date>1250424521</date>
+ <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash>
+ <filesize>1073741824</filesize>
+ <terms>
+ <term><name>Release type</name><value>New features</value></term>
+ <term><name>Release type</name><value>Bug fixes</value></term>
+ </terms>
+ </release>
+</releases>
+</project>
diff --git a/modules/update/tests/bbb_update_test.info b/modules/update/tests/bbb_update_test.info
new file mode 100644
index 000000000..d322dc375
--- /dev/null
+++ b/modules/update/tests/bbb_update_test.info
@@ -0,0 +1,7 @@
+; $Id$
+name = BBB Update test
+description = Support module for update module testing.
+package = Testing
+core = 7.x
+files[] = bbb_update_test.module
+hidden = TRUE
diff --git a/modules/update/tests/bbb_update_test.module b/modules/update/tests/bbb_update_test.module
new file mode 100644
index 000000000..da4699c05
--- /dev/null
+++ b/modules/update/tests/bbb_update_test.module
@@ -0,0 +1,7 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Dummy module for testing Update status.
+ */
diff --git a/modules/update/tests/ccc_update_test.1_0.xml b/modules/update/tests/ccc_update_test.1_0.xml
new file mode 100644
index 000000000..1b9ba75cd
--- /dev/null
+++ b/modules/update/tests/ccc_update_test.1_0.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<project xmlns:dc="http://purl.org/dc/elements/1.1/">
+<title>CCC Update test</title>
+<short_name>ccc_update_test</short_name>
+<dc:creator>Drupal</dc:creator>
+<api_version>7.x</api_version>
+<recommended_major>1</recommended_major>
+<supported_majors>1</supported_majors>
+<default_major>1</default_major>
+<project_status>published</project_status>
+<link>http://example.com/project/ccc_update_test</link>
+ <terms>
+ <term><name>Projects</name><value>Modules</value></term>
+ </terms>
+<releases>
+ <release>
+ <name>ccc_update_test 7.x-1.0</name>
+ <version>7.x-1.0</version>
+ <tag>DRUPAL-7--1-0</tag>
+ <version_major>1</version_major>
+ <version_patch>0</version_patch>
+ <status>published</status>
+ <release_link>http://example.com/ccc_update_test-7-x-1-0-release</release_link>
+ <download_link>http://example.com/ccc_update_test-7.x-1.0.tar.gz</download_link>
+ <date>1250424521</date>
+ <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash>
+ <filesize>1073741824</filesize>
+ <terms>
+ <term><name>Release type</name><value>New features</value></term>
+ <term><name>Release type</name><value>Bug fixes</value></term>
+ </terms>
+ </release>
+</releases>
+</project>
diff --git a/modules/update/tests/ccc_update_test.info b/modules/update/tests/ccc_update_test.info
new file mode 100644
index 000000000..a4eb3ea06
--- /dev/null
+++ b/modules/update/tests/ccc_update_test.info
@@ -0,0 +1,7 @@
+; $Id$
+name = CCC Update test
+description = Support module for update module testing.
+package = Testing
+core = 7.x
+files[] = ccc_update_test.module
+hidden = TRUE
diff --git a/modules/update/tests/ccc_update_test.module b/modules/update/tests/ccc_update_test.module
new file mode 100644
index 000000000..da4699c05
--- /dev/null
+++ b/modules/update/tests/ccc_update_test.module
@@ -0,0 +1,7 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Dummy module for testing Update status.
+ */
diff --git a/modules/update/tests/no-updates.xml b/modules/update/tests/drupal.0.xml
index 701e11e3e..701e11e3e 100644
--- a/modules/update/tests/no-updates.xml
+++ b/modules/update/tests/drupal.0.xml
diff --git a/modules/update/tests/normal-update.xml b/modules/update/tests/drupal.1.xml
index de4cfd004..de4cfd004 100644
--- a/modules/update/tests/normal-update.xml
+++ b/modules/update/tests/drupal.1.xml
diff --git a/modules/update/tests/security-update.xml b/modules/update/tests/drupal.2-sec.xml
index 1e68c8d5f..1e68c8d5f 100644
--- a/modules/update/tests/security-update.xml
+++ b/modules/update/tests/drupal.2-sec.xml
diff --git a/modules/update/tests/dev-snapshot.xml b/modules/update/tests/drupal.dev.xml
index 49dcc3f5f..49dcc3f5f 100644
--- a/modules/update/tests/dev-snapshot.xml
+++ b/modules/update/tests/drupal.dev.xml
diff --git a/modules/update/tests/update_test.module b/modules/update/tests/update_test.module
index 54e497415..f95a5cb9a 100644
--- a/modules/update/tests/update_test.module
+++ b/modules/update/tests/update_test.module
@@ -41,10 +41,30 @@ function update_test_system_info_alter(&$info, $file) {
/**
* Page callback, prints mock XML for the update module.
+ *
+ * The specific XML file to print depends on two things: the project we're
+ * trying to fetch data for, and the desired "availability scenario" for that
+ * project which we're trying to test. Before attempting to fetch this data
+ * (by checking for updates on the available updates report), callers need to
+ * define the 'update_test_xml_map' variable as an array, keyed by project
+ * name, indicating which availability scenario to use for that project.
+ *
+ * @param $project_name
+ * The project short name update.module is trying to fetch data for (the
+ * fetch URLs are of the form: [base_url]/[project_name]/[core_version]).
*/
-function update_test_mock_page() {
- $xml = variable_get('update_test_xml', FALSE);
- // Note: this will cause an exception to occur if no variable was set and
- // $file is FALSE.
- readfile(drupal_get_path('module', 'update_test') . "/$xml");
+function update_test_mock_page($project_name) {
+ $xml_map = variable_get('update_test_xml_map', FALSE);
+ if (isset($xml_map[$project_name])) {
+ $availability_scenario = $xml_map[$project_name];
+ }
+ elseif (isset($xml_map['#all'])) {
+ $availability_scenario = $xml_map['#all'];
+ }
+ else {
+ return FALSE;
+ }
+
+ $path = drupal_get_path('module', 'update_test');
+ readfile("$path/$project_name.$availability_scenario.xml");
}
diff --git a/modules/update/update.test b/modules/update/update.test
index 79fb91271..5a4b163c9 100644
--- a/modules/update/update.test
+++ b/modules/update/update.test
@@ -3,14 +3,60 @@
/**
* @file
- * This file contains tests for the update module.
+ * This file contains tests for the update module. The overarching methodology
+ * of these tests is we need to compare a given state of installed modules and
+ * themes (e.g. version, project grouping, timestamps, etc) vs. a current
+ * state of what the release history XML files we fetch say is available. We
+ * have dummy XML files (in the 'tests' subdirectory) that describe various
+ * scenarios of what's available for different test projects, and we have
+ * dummy .info file data (specified via hook_system_info_alter() in the
+ * update_test helper module) describing what's currently installed. Each
+ * test case defines a set of projects to install, their current state (via
+ * the 'update_test_system_info' variable) and the desired availabile update
+ * data (via the 'update_test_xml_map' variable), and then performs a series
+ * of assertions that the report matches our expectations given the specific
+ * initial state and availability scenario.
*/
-class UpdateTestCase extends DrupalWebTestCase {
+/**
+ * Base class to define some shared functions used by all update tests.
+ */
+class UpdateTestHelper extends DrupalWebTestCase {
+ /**
+ * Refresh the update status based on the desired available update scenario.
+ *
+ * @param $xml_map
+ * Array that maps project names to availability scenarios to fetch.
+ * The key '#all' is used if a project-specific mapping is not defined.
+ *
+ * @see update_test_mock_page()
+ */
+ protected function refreshUpdateStatus($xml_map) {
+ // Tell update module to fetch from the URL provided by update_test module.
+ variable_set('update_fetch_url', url('update-test', array('absolute' => TRUE)));
+ // Save the map for update_test_mock_page() to use.
+ variable_set('update_test_xml_map', $xml_map);
+ // Manually check the update status.
+ $this->drupalGet('admin/reports/updates/check');
+ }
+
+ /**
+ * Run a series of assertions that are applicable for all update statuses.
+ */
+ protected function standardTests() {
+ $this->assertRaw('<h3>' . t('Drupal core') . '</h3>');
+ $this->assertRaw(l(t('Check manually'), 'admin/reports/updates/check'), t('Link to check available updates manually appears.'));
+ $this->assertRaw(l(t('Drupal'), 'http://example.com/project/drupal'), t('Link to the Drupal project appears.'));
+ $this->assertNoText(t('No available releases found'));
+ }
+
+}
+
+class UpdateCoreTestCase extends UpdateTestHelper {
public static function getInfo() {
return array(
- 'name' => 'Update functionality',
+ 'name' => 'Update core functionality',
'description' => 'Tests the update module through a series of functional tests using mock XML data.',
'group' => 'Update',
);
@@ -20,7 +66,6 @@ class UpdateTestCase extends DrupalWebTestCase {
parent::setUp('update_test', 'update');
$admin_user = $this->drupalCreateUser(array('administer site configuration'));
$this->drupalLogin($admin_user);
- variable_set('update_fetch_url', url('update-test', array('absolute' => TRUE)));
}
/**
@@ -28,7 +73,7 @@ class UpdateTestCase extends DrupalWebTestCase {
*/
function testNoUpdatesAvailable() {
$this->setSystemInfo7_0();
- $this->refreshUpdateData('no-updates.xml');
+ $this->refreshUpdateStatus(array('drupal' => '0'));
$this->drupalGet('admin/reports/updates');
$this->standardTests();
$this->assertText(t('Up to date'));
@@ -41,7 +86,7 @@ class UpdateTestCase extends DrupalWebTestCase {
*/
function testNormalUpdateAvailable() {
$this->setSystemInfo7_0();
- $this->refreshUpdateData('normal-update.xml');
+ $this->refreshUpdateStatus(array('drupal' => '1'));
$this->drupalGet('admin/reports/updates');
$this->standardTests();
$this->assertNoText(t('Up to date'));
@@ -57,7 +102,7 @@ class UpdateTestCase extends DrupalWebTestCase {
*/
function testSecurityUpdateAvailable() {
$this->setSystemInfo7_0();
- $this->refreshUpdateData('security-update.xml');
+ $this->refreshUpdateStatus(array('drupal' => '2-sec'));
$this->drupalGet('admin/reports/updates');
$this->standardTests();
$this->assertNoText(t('Up to date'));
@@ -84,7 +129,7 @@ class UpdateTestCase extends DrupalWebTestCase {
),
);
variable_set('update_test_system_info', $system_info);
- $this->refreshUpdateData('dev-snapshot.xml');
+ $this->refreshUpdateStatus(array('drupal' => 'dev'));
$this->drupalGet('admin/reports/updates');
$this->assertNoText(t('2001-Sep-'));
$this->assertText(t('Up to date'));
@@ -92,18 +137,6 @@ class UpdateTestCase extends DrupalWebTestCase {
$this->assertNoText(t('Security update required!'));
}
- /**
- * Helper function: force te update cache to refresh based on the contents of
- * the specified XML file.
- *
- * @param $xml
- * The file name of the XML file to use for mock update data.
- */
- protected function refreshUpdateData($xml) {
- variable_set('update_test_xml', $xml);
- $this->drupalGet('admin/reports/updates/check');
- }
-
protected function setSystemInfo7_0() {
$setting = array(
'#all' => array(
@@ -113,12 +146,51 @@ class UpdateTestCase extends DrupalWebTestCase {
variable_set('update_test_system_info', $setting);
}
+}
+
+class UpdateTestContribCase extends UpdateTestHelper {
+
+ public static function getInfo() {
+ return array(
+ 'name' => 'Update contrib functionality',
+ 'description' => 'Tests how the update module handles contributed modules and themes in a series of functional tests using mock XML data.',
+ 'group' => 'Update',
+ );
+ }
+
+ function setUp() {
+ parent::setUp('update_test', 'update', 'aaa_update_test', 'bbb_update_test', 'ccc_update_test');
+ $admin_user = $this->drupalCreateUser(array('administer site configuration'));
+ $this->drupalLogin($admin_user);
+ }
+
/**
- * Helper function: run a series of assertions that are applicable for all
- * update statuses.
+ * Test the basic functionality of a contrib module on the status report.
*/
- protected function standardTests() {
- $this->assertRaw(l(t('Check manually'), 'admin/reports/updates/check'), t('Link to check available updates manually appears.'));
- $this->assertRaw(l(t('Drupal'), 'http://example.com/project/drupal'), t('Link to the Drupal project appears.'));
+ function testUpdateContribBasic() {
+ $system_info = array(
+ '#all' => array(
+ 'version' => '7.0',
+ ),
+ 'aaa_update_test' => array(
+ 'project' => 'aaa_update_test',
+ 'version' => '7.x-1.0',
+ 'hidden' => FALSE,
+ ),
+ );
+ variable_set('update_test_system_info', $system_info);
+ $this->refreshUpdateStatus(
+ array(
+ 'drupal' => '0',
+ 'aaa_update_test' => '1_0',
+ )
+ );
+ $this->drupalGet('admin/reports/updates');
+ $this->standardTests();
+ $this->assertText(t('Up to date'));
+ $this->assertRaw('<h3>' . t('Modules') . '</h3>');
+ $this->assertNoText(t('Update available'));
+ $this->assertRaw(l(t('AAA Update test'), 'http://example.com/project/aaa_update_test'), t('Link to aaa_update_test project appears.'));
}
}
+