filter.test 8.3 KB
Newer Older
1 2 3
<?php
// $Id$

4
class FilterAdminTestCase extends DrupalWebTestCase {
5 6 7 8 9 10 11 12 13 14 15 16 17 18
  /**
   * Implementation of getInfo().
   */
  function getInfo() {
    return array(
      'name' => t('Filter administration functionality'),
      'description' => t('Thoroughly test the administrative interface of the filter module.'),
      'group' => t('Filter'),
    );
  }

  /**
   * Test filter administration functionality.
   */
19
  function testFilterAdmin() {
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
    $first_filter = 2; // URL filter.
    $second_filter = 1; // Line filter.

    // Create users.
    $admin_user = $this->drupalCreateUser(array('administer filters'));
    $web_user = $this->drupalCreateUser(array('create page content'));

    $this->drupalLogin($admin_user);

    list($filtered, $full) = $this->checkFilterFormats();

    // Change default filter.
    $edit = array();
    $edit['default'] = $full;
    $this->drupalPost('admin/settings/filters', $edit, t('Save changes'));
    $this->assertText(t('Default format updated.'), t('Default filter updated successfully.'));

37
    $this->assertNoRaw('admin/settings/filters/delete/' . $full, t('Delete link not found.'));
38 39 40

    // Add an additional tag.
    $edit = array();
41
    $edit['allowed_html_1'] = '<a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>' . ' <quote>'; // Adding <quote> tag.
42
    $this->drupalPost('admin/settings/filters/' . $filtered . '/configure', $edit, t('Save configuration'));
43 44 45 46 47 48 49 50 51
    $this->assertText(t('The configuration options have been saved.'), t('Allowed HTML tag added.'));

    $this->assertRaw(htmlentities($edit['allowed_html_1']), t('Tag displayed.'));

    $result = db_fetch_object(db_query('SELECT * FROM {cache_filter}'));
    $this->assertFalse($result, t('Cache cleared.'));

    // Reorder filters.
    $edit = array();
52 53
    $edit['weights[filter/' . $second_filter . ']'] = 1;
    $edit['weights[filter/' . $first_filter . ']'] = 2;
54
    $this->drupalPost('admin/settings/filters/' . $filtered . '/order', $edit, t('Save configuration'));
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
    $this->assertText(t('The filter ordering has been saved.'), t('Order saved successfully.'));

    $result = db_query('SELECT * FROM {filters} WHERE format = %d ORDER BY weight ASC', $filtered);
    $filters = array();
    while ($filter = db_fetch_object($result)) {
      if ($filter->delta == $second_filter || $filter->delta == $first_filter) {
        $filters[] = $filter;
      }
    }
    $this->assertTrue(($filters[0]->delta == $second_filter && $filters[1]->delta == $first_filter), t('Order confirmed.'));

    // Add filter.
    $edit = array();
    $edit['name'] = $this->randomName();
    $edit['roles[2]'] = TRUE;
70 71
    $edit['filters[filter/' . $second_filter . ']'] = TRUE;
    $edit['filters[filter/' . $first_filter . ']'] = TRUE;
72 73 74 75 76 77 78 79
    $this->drupalPost('admin/settings/filters/add', $edit, t('Save configuration'));
    $this->assertRaw(t('Added input format %format.', array('%format' => $edit['name'])), t('New filter created.'));

    $format = $this->getFilter($edit['name']);
    $this->assertNotNull($format, t('Format found in database.'));

    if ($format !== NULL) {
      $this->assertFieldByName('roles[2]', '', t('Role found.'));
80 81
      $this->assertFieldByName('filters[filter/' . $second_filter . ']', '', t('Line break filter found.'));
      $this->assertFieldByName('filters[filter/' . $first_filter . ']', '', t('Url filter found.'));
82 83

      // Delete new filter.
84
      $this->drupalPost('admin/settings/filters/delete/' . $format->format, array(), t('Delete'));
85 86 87 88 89 90 91 92 93
      $this->assertRaw(t('Deleted input format %format.', array('%format' => $edit['name'])), t('Format successfully deleted.'));
    }

    // Change default filter back.
    $edit = array();
    $edit['default'] = $filtered;
    $this->drupalPost('admin/settings/filters', $edit, t('Save changes'));
    $this->assertText(t('Default format updated.'), t('Default filter updated successfully.'));

94
    $this->assertNoRaw('admin/settings/filters/delete/' . $filtered, t('Delete link not found.'));
95 96 97 98

    // Allow authenticated users on full HTML.
    $edit = array();
    $edit['roles[2]'] = TRUE;
99
    $this->drupalPost('admin/settings/filters/' . $full, $edit, t('Save configuration'));
100 101 102 103 104 105 106
    $this->assertText(t('The input format settings have been updated.'), t('Full HTML format successfully updated.'));

    // Switch user.
    $this->drupalLogout();
    $this->drupalLogin($web_user);

    $this->drupalGet('node/add/page');
107
    $this->assertFieldByName('body_format', $full, t('Full HTML filter accessible.'));
108 109 110 111 112 113 114

    // Use filtered HTML and see if it removes tags that arn't allowed.
    $body = $this->randomName();
    $extra_text = 'text';

    $edit = array();
    $edit['title'] = $this->randomName();
115
    $edit['body'] = $body . '<random>' . $extra_text . '</random>';
116
    $edit['body_format'] = $filtered;
117 118 119 120 121 122
    $this->drupalPost('node/add/page', $edit, t('Save'));
    $this->assertRaw(t('Page %title has been created.', array('%title' => $edit['title'])), t('Filtered node created.'));

    $node = node_load(array('title' => $edit['title']));
    $this->assertTrue($node, t('Node found in database.'));

123
    $this->drupalGet('node/' . $node->nid);
124 125 126 127 128 129 130
    $this->assertText($body . $extra_text, t('Filter removed invalid tag.'));

    // Switch user.
    $this->drupalLogout();
    $this->drupalLogin($admin_user);

    // Clean up.
131
    // Allowed tags.
132 133
    $edit = array();
    $edit['allowed_html_1'] = '<a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>';
134
    $this->drupalPost('admin/settings/filters/' . $filtered . '/configure', $edit, t('Save configuration'));
135 136
    $this->assertText(t('The configuration options have been saved.'), t('Changes reverted.'));

137
    // Full HTML.
138 139
    $edit = array();
    $edit['roles[2]'] = FALSE;
140
    $this->drupalPost('admin/settings/filters/' . $full, $edit, t('Save configuration'));
141 142
    $this->assertText(t('The input format settings have been updated.'), t('Full HTML format successfully reverted.'));

143
    // Filter order.
144
    $edit = array();
145 146 147
    $edit['weights[filter/' . $second_filter . ']'] = 2;
    $edit['weights[filter/' . $first_filter . ']'] = 1;
    $this->drupalPost('admin/settings/filters/' . $filtered . '/order', $edit, t('Save configuration'));
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
    $this->assertText(t('The filter ordering has been saved.'), t('Order successfully reverted.'));
  }

  /**
   * Query the database to get the two basic formats.
   *
   * @return Array Array containing filtered and full filter ids.
   */
  function checkFilterFormats() {
    $result = db_query('SELECT format, name FROM {filter_formats}');

    $filtered = -1;
    $full = -1;
    while ($format = db_fetch_object($result)) {
      if ($format->name == 'Filtered HTML') {
        $filtered = $format->format;
      }
165
      elseif ($format->name == 'Full HTML') {
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
        $full = $format->format;
      }
    }

    return array($filtered, $full);
  }

  /**
   * Get filter by name.
   *
   * @param string $name Name of filter to find.
   * @return object Filter object.
   */
  function getFilter($name) {
    return db_fetch_object(db_query("SELECT * FROM {filter_formats} WHERE name = '%s'", $name));
  }
}
183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202

class FilterTestCase extends DrupalWebTestCase {
  protected $format;

  /**
   * Implementation of getInfo().
   */
  function getInfo() {
    return array(
      'name' => t('Core filters'),
      'description' => t('Filter each filter individually: Convert URLs into links, Convert line breaks, Correct broken HTML, Escape all HTML, Limit allowed HTML tags.'),
      'group' => t('Filter'),
    );
  }

  /**
   * Implementation of setUp().
   */
  function setUp() {
    parent::setUp();
203 204 205

    $admin_user = $this->drupalCreateUser(array('administer filters', 'create page content'));
    $this->drupalLogin($admin_user);
206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238
  }

  /**
   * Test the line break filter
   */
  function testLineBreakFilter() {

  }

  /**
   * Test the HTML filter
   */
  function testHtmlFilter() {

  }

  function createFormat($filter) {
    $edit = array(
      'name' => $this->randomName(),
      'roles[2]' => TRUE,
      'filters[filter/' . $filter . ']' => TRUE,
    );
    $this->drupalPost('admin/settings/filters/add', $edit, t('Save configuration'));
    return db_fetch_object(db_query("SELECT * FROM {filter_formats} WHERE name = '%s'", $edit['name']));
  }

  function deleteFormat($format) {
    if ($format !== NULL) {
      // Delete new filter.
      $this->drupalPost('admin/settings/filters/delete/' . $format->format, array(), t('Delete'));
    }
  }
}