Spike PHPCoverage Details: filter.test

Line #FrequencySource 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(
101      '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 }