diff options
author | Dries Buytaert <dries@buytaert.net> | 2009-10-01 19:23:21 +0000 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2009-10-01 19:23:21 +0000 |
commit | 6a4064e3d4ba1232e8de661a0efb6ab1bcbb0870 (patch) | |
tree | 3dd6b22b05299bc27a9bf16a9cb3892d7484eb0c | |
parent | 264c9ee8ff7c25035ffda56d1ff2bf3e0fbb3928 (diff) | |
download | brdo-6a4064e3d4ba1232e8de661a0efb6ab1bcbb0870.tar.gz brdo-6a4064e3d4ba1232e8de661a0efb6ab1bcbb0870.tar.bz2 |
- Patch #591632 by dww | chx: Changed Refactor tests to allow testing contrib.
-rw-r--r-- | modules/update/tests/aaa_update_test.1_0.xml | 34 | ||||
-rw-r--r-- | modules/update/tests/aaa_update_test.info | 7 | ||||
-rw-r--r-- | modules/update/tests/aaa_update_test.module | 7 | ||||
-rw-r--r-- | modules/update/tests/bbb_update_test.1_0.xml | 34 | ||||
-rw-r--r-- | modules/update/tests/bbb_update_test.info | 7 | ||||
-rw-r--r-- | modules/update/tests/bbb_update_test.module | 7 | ||||
-rw-r--r-- | modules/update/tests/ccc_update_test.1_0.xml | 34 | ||||
-rw-r--r-- | modules/update/tests/ccc_update_test.info | 7 | ||||
-rw-r--r-- | modules/update/tests/ccc_update_test.module | 7 | ||||
-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.module | 30 | ||||
-rw-r--r-- | modules/update/update.test | 122 |
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.')); } } + |