Line # | Frequency | Source Line |
1 | | <?php
|
2 | | // $Id: filter.test,v 1.10 2008/04/01 23:33:54 boombatower Exp $
|
3 | |
|
4 | | class FilterTestCase extends DrupalTestCase {
|
5 | | /**
|
6 | | * Implementation of getInfo().
|
7 | | */
|
8 | | function getInfo() {
|
9 | | return array(
|
10 | 1 | 'name' => t('Filter administration functionality'),
|
11 | | 'description' => t('Thoroughly test the administrative interface of the filter module.'),
|
12 | | 'group' => t('Filter Tests'),
|
13 | | );
|
14 | | }
|
15 | |
|
16 | | /**
|
17 | | * Test filter administration functionality.
|
18 | | */
|
19 | | function testFilter() {
|
20 | | $first_filter = 2; // URL filter.
|
21 | | $second_filter = 1; // Line filter.
|
22 | |
|
23 | | // Create users.
|
24 | | $admin_user = $this->drupalCreateUser(array('administer filters'));
|
25 | | $web_user = $this->drupalCreateUser(array('create page content'));
|
26 | |
|
27 | | $this->drupalLogin($admin_user);
|
28 | |
|
29 | | list($filtered, $full) = $this->checkFilterFormats();
|
30 | |
|
31 | | // Change default filter.
|
32 | | $edit = array();
|
33 | | $edit['default'] = $full;
|
34 | | $this->drupalPost('admin/settings/filters', $edit, t('Save changes'));
|
35 | | $this->assertText(t('Default format updated.'), t('Default filter updated successfully.'));
|
36 | |
|
37 | | $this->assertNoRaw('admin/settings/filters/delete/'. $full, t('Delete link not found.'));
|
38 | |
|
39 | | // Add an additional tag.
|
40 | | $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 | | $this->assertText(t('The configuration options have been saved.'), t('Allowed HTML tag added.'));
|
44 | |
|
45 | | $this->assertRaw(htmlentities($edit['allowed_html_1']), t('Tag displayed.'));
|
46 | |
|
47 | | $result = db_fetch_object(db_query('SELECT * FROM {cache_filter}'));
|
48 | | $this->assertFalse($result, t('Cache cleared.'));
|
49 | |
|
50 | | // Reorder filters.
|
51 | | $edit = array();
|
52 | | $edit['weights[filter/'. $second_filter .']'] = 1;
|
53 | | $edit['weights[filter/'. $first_filter .']'] = 2;
|
54 | | $this->drupalPost('admin/settings/filters/'. $filtered .'/order', $edit, t('Save configuration'));
|
55 | | $this->assertText(t('The filter ordering has been saved.'), t('Order saved successfully.'));
|
56 | |
|
57 | | $result = db_query('SELECT * FROM {filters} WHERE format = %d ORDER BY weight ASC', $filtered);
|
58 | | $filters = array();
|
59 | | while ($filter = db_fetch_object($result)) {
|
60 | | if ($filter->delta == $second_filter || $filter->delta == $first_filter) {
|
61 | | $filters[] = $filter;
|
62 | | }
|
63 | | }
|
64 | | $this->assertTrue(($filters[0]->delta == $second_filter && $filters[1]->delta == $first_filter), t('Order confirmed.'));
|
65 | |
|
66 | | // Add filter.
|
67 | | $edit = array();
|
68 | | $edit['name'] = $this->randomName();
|
69 | | $edit['roles[2]'] = TRUE;
|
70 | | $edit['filters[filter/'. $second_filter .']'] = TRUE;
|
71 | | $edit['filters[filter/'. $first_filter .']'] = TRUE;
|
72 | | $this->drupalPost('admin/settings/filters/add', $edit, t('Save configuration'));
|
73 | | $this->assertRaw(t('Added input format %format.', array('%format' => $edit['name'])), t('New filter created.'));
|
74 | |
|
75 | | $format = $this->getFilter($edit['name']);
|
76 | | $this->assertNotNull($format, t('Format found in database.'));
|
77 | |
|
78 | | if ($format !== NULL) {
|
79 | | $this->assertFieldByName('roles[2]', '', t('Role found.'));
|
80 | | $this->assertFieldByName('filters[filter/'. $second_filter .']', '', t('Line break filter found.'));
|
81 | | $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 | | $this->assertRaw(t('Deleted input format %format.', array('%format' => $edit['name'])), t('Format successfully deleted.'));
|
86 | | }
|
87 | |
|
88 | | // Change default filter back.
|
89 | | $edit = array();
|
90 | | $edit['default'] = $filtered;
|
91 | | $this->drupalPost('admin/settings/filters', $edit, t('Save changes'));
|
92 | | $this->assertText(t('Default format updated.'), t('Default filter updated successfully.'));
|
93 | |
|
94 | | $this->assertNoRaw('admin/settings/filters/delete/'. $filtered, t('Delete link not found.'));
|
95 | |
|
96 | | // Allow authenticated users on full HTML.
|
97 | | $edit = array();
|
98 | | $edit['roles[2]'] = TRUE;
|
99 | | $this->drupalPost('admin/settings/filters/'. $full, $edit, t('Save configuration'));
|
100 | | $this->assertText(t('The input format settings have been updated.'), t('Full HTML format successfully updated.'));
|
101 | |
|
102 | | // Switch user.
|
103 | | $this->drupalLogout();
|
104 | | $this->drupalLogin($web_user);
|
105 | |
|
106 | | $this->drupalGet('node/add/page');
|
107 | | $this->assertFieldByName('format', $full, t('Full HTML filter accessible.'));
|
108 | |
|
109 | | // Use filtered HTML and see if it removes tags that arn't allowed.
|
110 | | $body = $this->randomName();
|
111 | | $extra_text = 'text';
|
112 | |
|
113 | | $edit = array();
|
114 | | $edit['title'] = $this->randomName();
|
115 | | $edit['body'] = $body .'<random>'. $extra_text .'</random>';
|
116 | | $edit['format'] = $filtered;
|
117 | | $this->drupalPost('node/add/page', $edit, t('Save'));
|
118 | | $this->assertRaw(t('Page %title has been created.', array('%title' => $edit['title'])), t('Filtered node created.'));
|
119 | |
|
120 | | $node = node_load(array('title' => $edit['title']));
|
121 | | $this->assertTrue($node, t('Node found in database.'));
|
122 | |
|
123 | | $this->drupalGet('node/'. $node->nid);
|
124 | | $this->assertText($body . $extra_text, t('Filter removed invalid tag.'));
|
125 | |
|
126 | | // Switch user.
|
127 | | $this->drupalLogout();
|
128 | | $this->drupalLogin($admin_user);
|
129 | |
|
130 | | // Clean up.
|
131 | | // Allowed tags
|
132 | | $edit = array();
|
133 | | $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 | | $this->assertText(t('The configuration options have been saved.'), t('Changes reverted.'));
|
136 | |
|
137 | | // Full HTML
|
138 | | $edit = array();
|
139 | | $edit['roles[2]'] = FALSE;
|
140 | | $this->drupalPost('admin/settings/filters/'. $full, $edit, t('Save configuration'));
|
141 | | $this->assertText(t('The input format settings have been updated.'), t('Full HTML format successfully reverted.'));
|
142 | |
|
143 | | // Filter order
|
144 | | $edit = array();
|
145 | | $edit['weights[filter/'. $second_filter .']'] = 2;
|
146 | | $edit['weights[filter/'. $first_filter .']'] = 1;
|
147 | | $this->drupalPost('admin/settings/filters/'. $filtered .'/order', $edit, t('Save configuration'));
|
148 | | $this->assertText(t('The filter ordering has been saved.'), t('Order successfully reverted.'));
|
149 | | }
|
150 | |
|
151 | | /**
|
152 | | * Query the database to get the two basic formats.
|
153 | | *
|
154 | | * @return Array Array containing filtered and full filter ids.
|
155 | | */
|
156 | | function checkFilterFormats() {
|
157 | | $result = db_query('SELECT format, name FROM {filter_formats}');
|
158 | |
|
159 | | $filtered = -1;
|
160 | | $full = -1;
|
161 | | while ($format = db_fetch_object($result)) {
|
162 | | if ($format->name == 'Filtered HTML') {
|
163 | | $filtered = $format->format;
|
164 | | }
|
165 | | else if ($format->name == 'Full HTML') {
|
166 | | $full = $format->format;
|
167 | | }
|
168 | | }
|
169 | |
|
170 | | return array($filtered, $full);
|
171 | | }
|
172 | |
|
173 | | /**
|
174 | | * Get filter by name.
|
175 | | *
|
176 | | * @param string $name Name of filter to find.
|
177 | | * @return object Filter object.
|
178 | | */
|
179 | | function getFilter($name) {
|
180 | | return db_fetch_object(db_query("SELECT * FROM {filter_formats} WHERE name = '%s'", $name));
|
181 | | }
|
182 | | }
|