summaryrefslogtreecommitdiff
path: root/kolab.org/www/drupal-7.26/modules/simpletest/tests/upgrade/upgrade.node.test
blob: 4ac14c574533bae75b44127ae08cbe7494c8868e (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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
<?php

/**
 * Upgrade test for node bodies.
 *
 * Load a filled installation of Drupal 6 and run the upgrade process on it.
 */
class NodeBodyUpgradePathTestCase extends UpgradePathTestCase {
  public static function getInfo() {
    return array(
      'name'  => 'Node body upgrade path',
      'description'  => 'Node body upgrade path tests.',
      'group' => 'Upgrade path',
    );
  }

  public function setUp() {
    // Path to the database dump.
    $this->databaseDumpFiles = array(
      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.filled.database.php',
    );
    parent::setUp();
  }

  /**
   * Test a successful upgrade.
   */
  public function testNodeBodyUpgrade() {
    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');

    $instance = field_info_instance('node', 'body', 'story');
    $this->assertIdentical($instance['required'], 0, 'The required setting was preserved during the upgrade path.');
    $this->assertTrue($instance['description'], 'The description was preserved during the upgrade path');

    $this->drupalGet("content/1263769200");
    $this->assertText('node body (broken) - 37');

    // Find a published node revision and make sure it still has a body.
    $revision = db_query_range("SELECT r.nid, r.vid FROM {node_revision} r JOIN {node} n ON n.nid = r.nid WHERE n.status = 1 AND n.type <> 'poll' AND n.vid <> r.vid", 0, 1)->fetch();
    $revision = node_load($revision->nid, $revision->vid);
    $this->assertTrue(!empty($revision->body), 'Non-current node revisions still have a node body.');
    // Find an unpublished node revision and make sure it still has a body.
    $revision = db_query_range("SELECT r.nid, r.vid FROM {node_revision} r JOIN {node} n ON n.nid = r.nid WHERE n.status = 0 AND n.type <> 'poll' AND n.vid <> r.vid", 0, 1)->fetch();
    $revision = node_load($revision->nid, $revision->vid);
    $this->assertTrue(!empty($revision->body), 'Unpublished non-current node revisions still have a node body.');

    // Check that fields created during the upgrade can be edited and resaved
    // in the UI.
    $this->drupalPost('admin/structure/types/manage/story/fields/body', array(), t('Save settings'));
  }
}

/**
 * Tests the upgrade path for node disabled node types.
 *
 * Load a filled installation of Drupal 6 and run the upgrade process on it.
 */
class DisabledNodeTypeTestCase extends UpgradePathTestCase {
  public static function getInfo() {
    return array(
      'name'  => 'Disabled node type upgrade path',
      'description'  => 'Disabled node type upgrade path tests.',
      'group' => 'Upgrade path',
    );
  }

  public function setUp() {
    // Path to the database dump.
    $this->databaseDumpFiles = array(
      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.filled.database.php',
      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.node_type_broken.database.php',
    );
    parent::setUp();
  }

  /**
   * Tests a successful upgrade.
   */
  public function testDisabledNodeTypeUpgrade() {
    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
    $this->assertTrue(field_info_instance('comment', 'comment_body', 'comment_node_broken'), 'Comment body field instance was created for comments attached to the disabled broken node type');
  }
}

/**
 * Upgrade test for node type poll.
 *
 * Load a bare installation of Drupal 6 and run the upgrade process on it.
 *
 * The install only contains dblog (although it's optional, it's only so that
 * another hook_watchdog module can take its place, the site is not functional
 * without watchdog) and update.
 */
class PollUpgradePathTestCase extends UpgradePathTestCase {
  public static function getInfo() {
    return array(
      'name'  => 'Poll upgrade path',
      'description'  => 'Poll upgrade path tests.',
      'group' => 'Upgrade path',
    );
  }

  public function setUp() {
    // Path to the database dump.
    $this->databaseDumpFiles = array(
      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.filled.database.php',
    );
    parent::setUp();

    $this->uninstallModulesExcept(array('poll'));
  }

  /**
   * Test a successful upgrade.
   */
  public function testPollUpgrade() {
    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');

    // Check modules page for poll
    $this->drupalGet('admin/modules');

    // Verify that the poll data is still correctly available
    for ($i = 0; $i < 12; $i++) {
      $this->drupalGet("content/poll/$i");

      $nbchoices = ($i % 4) + 2;

      for ($c = 0; $c < $nbchoices; $c++) {
        $this->assertText("Choice $c for poll $i", 'Choice text is displayed correctly on poll view');
      }

      // Now check that the votes are correct
      $this->clickLink(t('Results'));

      for ($c = 0; $c < $nbchoices; $c++) {
        $this->assertText("Choice $c for poll $i", 'Choice text is displayed correctly on result view');
      }

      $nbvotes = floor (($i % 4) + 5);
      $elements = $this->xpath("//div[@class='percent']");
      for ($c = 0; $c < $nbchoices; $c++) {
        $votes = floor($nbvotes / $nbchoices);
        if (($nbvotes % $nbchoices) > $c) $votes++;
        $this->assertTrue(preg_match("/$votes vote/", $elements[$c]), 'The number of votes is displayed correctly: expected ' . $votes . ', got ' . $elements[$c]);
      }
    }
  }
}