summaryrefslogtreecommitdiff
path: root/modules/update/update.test
blob: 79fb9127182c516a5e3cd30bbd9de8685e29ee86 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<?php
// $Id$

/**
 * @file
 * This file contains tests for the update module.
 */

class UpdateTestCase extends DrupalWebTestCase {

  public static function getInfo() {
    return array(
      'name' => 'Update functionality',
      'description' => 'Tests the update module through a series of functional tests using mock XML data.',
      'group' => 'Update',
    );
  }

  function setUp() {
    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)));
  }

  /**
   * Tests the update module when no updates are available.
   */
  function testNoUpdatesAvailable() {
    $this->setSystemInfo7_0();
    $this->refreshUpdateData('no-updates.xml');
    $this->drupalGet('admin/reports/updates');
    $this->standardTests();
    $this->assertText(t('Up to date'));
    $this->assertNoText(t('Update available'));
    $this->assertNoText(t('Security update required!'));
  }

  /**
   * Tests the update module when one normal update ("7.1") is available.
   */
  function testNormalUpdateAvailable() {
    $this->setSystemInfo7_0();
    $this->refreshUpdateData('normal-update.xml');
    $this->drupalGet('admin/reports/updates');
    $this->standardTests();
    $this->assertNoText(t('Up to date'));
    $this->assertText(t('Update available'));
    $this->assertNoText(t('Security update required!'));
    $this->assertRaw(l('7.1', 'http://example.com/drupal-7-1-release'), t('Link to release appears.'));
    $this->assertRaw(l(t('Download'), 'http://example.com/drupal-7-1.tar.gz'), t('Link to download appears.'));
    $this->assertRaw(l(t('Release notes'), 'http://example.com/drupal-7-1-release'), t('Link to release notes appears.'));
  }

  /**
   * Tests the update module when a security update ("7.2") is available.
   */
  function testSecurityUpdateAvailable() {
    $this->setSystemInfo7_0();
    $this->refreshUpdateData('security-update.xml');
    $this->drupalGet('admin/reports/updates');
    $this->standardTests();
    $this->assertNoText(t('Up to date'));
    $this->assertNoText(t('Update available'));
    $this->assertText(t('Security update required!'));
    $this->assertRaw(l('7.2', 'http://example.com/drupal-7-2-release'), t('Link to release appears.'));
    $this->assertRaw(l(t('Download'), 'http://example.com/drupal-7-2.tar.gz'), t('Link to download appears.'));
    $this->assertRaw(l(t('Release notes'), 'http://example.com/drupal-7-2-release'), t('Link to release notes appears.'));
  }

  /**
   * Ensure proper results where there are date mismatches among modules.
   */
  function testDatestampMismatch() {
    $system_info = array(
      '#all' => array(
        // We need to think we're running a -dev snapshot to see dates.
        'version' => '7.0-dev',
        'datestamp' => time(),
      ),
      'block' => array(
        // This is 2001-09-09 01:46:40 GMT, so test for "2001-Sep-".
        'datestamp' => '1000000000',
      ),
    );
    variable_set('update_test_system_info', $system_info);
    $this->refreshUpdateData('dev-snapshot.xml');
    $this->drupalGet('admin/reports/updates');
    $this->assertNoText(t('2001-Sep-'));
    $this->assertText(t('Up to date'));
    $this->assertNoText(t('Update available'));
    $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(
        'version' => '7.0',
      ),
    );
    variable_set('update_test_system_info', $setting);
  }

  /**
   * Helper function: run a series of assertions that are applicable for all
   * update statuses.
   */
  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.'));
  }
}