filter.test 8.31 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
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
    $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;
      }
      else if ($format->name == 'Full HTML') {
        $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'));
    }
  }
}