update.test

Same filename in this branch
  1. 7.x modules/update/update.test

Tests for the update system.

File

modules/simpletest/tests/update.test

View source
<?php


/**
 * @file
 * Tests for the update system.
 */

/**
 * Tests for the update dependency ordering system.
 */
class UpdateDependencyOrderingTestCase extends DrupalWebTestCase {
    public static function getInfo() {
        return array(
            'name' => 'Update dependency ordering',
            'description' => 'Test that update functions are run in the proper order.',
            'group' => 'Update API',
        );
    }
    function setUp() {
        parent::setUp('update_test_1', 'update_test_2', 'update_test_3');
        require_once DRUPAL_ROOT . '/includes/update.inc';
    }
    
    /**
     * Test that updates within a single module run in the correct order.
     */
    function testUpdateOrderingSingleModule() {
        $starting_updates = array(
            'update_test_1' => 7000,
        );
        $expected_updates = array(
            'update_test_1_update_7000',
            'update_test_1_update_7001',
            'update_test_1_update_7002',
        );
        $actual_updates = array_keys(update_resolve_dependencies($starting_updates));
        $this->assertEqual($expected_updates, $actual_updates, 'Updates within a single module run in the correct order.');
    }
    
    /**
     * Test that dependencies between modules are resolved correctly.
     */
    function testUpdateOrderingModuleInterdependency() {
        $starting_updates = array(
            'update_test_2' => 7000,
            'update_test_3' => 7000,
        );
        $update_order = array_keys(update_resolve_dependencies($starting_updates));
        // Make sure that each dependency is satisfied.
        $first_dependency_satisfied = array_search('update_test_2_update_7000', $update_order) < array_search('update_test_3_update_7000', $update_order);
        $this->assertTrue($first_dependency_satisfied, 'The dependency of the second module on the first module is respected by the update function order.');
        $second_dependency_satisfied = array_search('update_test_3_update_7000', $update_order) < array_search('update_test_2_update_7001', $update_order);
        $this->assertTrue($second_dependency_satisfied, 'The dependency of the first module on the second module is respected by the update function order.');
    }

}

/**
 * Tests for missing update dependencies.
 */
class UpdateDependencyMissingTestCase extends DrupalWebTestCase {
    public static function getInfo() {
        return array(
            'name' => 'Missing update dependencies',
            'description' => 'Test that missing update dependencies are correctly flagged.',
            'group' => 'Update API',
        );
    }
    function setUp() {
        // Only install update_test_2.module, even though its updates have a
        // dependency on update_test_3.module.
        parent::setUp('update_test_2');
        require_once DRUPAL_ROOT . '/includes/update.inc';
    }
    function testMissingUpdate() {
        $starting_updates = array(
            'update_test_2' => 7000,
        );
        $update_graph = update_resolve_dependencies($starting_updates);
        $this->assertTrue($update_graph['update_test_2_update_7000']['allowed'], "The module's first update function is allowed to run, since it does not have any missing dependencies.");
        $this->assertFalse($update_graph['update_test_2_update_7001']['allowed'], "The module's second update function is not allowed to run, since it has a direct dependency on a missing update.");
        $this->assertFalse($update_graph['update_test_2_update_7002']['allowed'], "The module's third update function is not allowed to run, since it has an indirect dependency on a missing update.");
    }

}

/**
 * Tests for the invocation of hook_update_dependencies().
 */
class UpdateDependencyHookInvocationTestCase extends DrupalWebTestCase {
    public static function getInfo() {
        return array(
            'name' => 'Update dependency hook invocation',
            'description' => 'Test that the hook invocation for determining update dependencies works correctly.',
            'group' => 'Update API',
        );
    }
    function setUp() {
        parent::setUp('update_test_1', 'update_test_2');
        require_once DRUPAL_ROOT . '/includes/update.inc';
    }
    
    /**
     * Test the structure of the array returned by hook_update_dependencies().
     */
    function testHookUpdateDependencies() {
        $update_dependencies = update_retrieve_dependencies();
        $this->assertTrue($update_dependencies['system'][7000]['update_test_1'] == 7000, 'An update function that has a dependency on two separate modules has the first dependency recorded correctly.');
        $this->assertTrue($update_dependencies['system'][7000]['update_test_2'] == 7001, 'An update function that has a dependency on two separate modules has the second dependency recorded correctly.');
        $this->assertTrue($update_dependencies['system'][7001]['update_test_1'] == 7002, 'An update function that depends on more than one update from the same module only has the dependency on the higher-numbered update function recorded.');
    }

}

Classes

Title Deprecated Summary
UpdateDependencyHookInvocationTestCase Tests for the invocation of hook_update_dependencies().
UpdateDependencyMissingTestCase Tests for missing update dependencies.
UpdateDependencyOrderingTestCase Tests for the update dependency ordering system.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.