? modules/filter/filter_administration_6.patch
? sites/dc2009.jonathan.local
Index: modules/filter/filter.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/filter/filter.test,v
retrieving revision 1.14
diff -u -p -r1.14 filter.test
--- modules/filter/filter.test	26 Jan 2009 14:08:43 -0000	1.14
+++ modules/filter/filter.test	7 Mar 2009 17:27:27 -0000
@@ -11,61 +11,81 @@ class FilterAdminTestCase extends Drupal
   }
 
   /**
-   * Test filter administration functionality.
+   * Implementation of setUp().
    */
-  function testFilterAdmin() {
-    $first_filter = 2; // URL filter.
-    $second_filter = 1; // Line filter.
+  function setUp() {
+     parent::setUp();
+     $this->filter = new stdClass();
+     $this->filters->first_filter = 2; // URL filter.
+     $this->filters->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();
+    $this->users = new stdClass();
+    $this->users->admin_user = $this->drupalCreateUser(array('administer filters', 'create page content'));
+    $this->users->web_user = $this->drupalCreateUser(array('create page content'));
+
+    $this->formats = new stdClass();
+    list($this->formats->filtered, $this->formats->full) = $this->checkFilterFormats();
+    $this->empty_format_name = 'Empty Format Name';
+    $this->drupalLogin($this->users->admin_user);
+  }
 
+  /**
+   * Test changing the default filter.
+   */
+  function testFilterChangeDefault() {
     // Change default filter.
     $edit = array();
-    $edit['default'] = $full;
+    $edit['default'] = $this->formats->full;
     $this->drupalPost('admin/settings/filter', $edit, t('Save changes'));
     $this->assertText(t('Default format updated.'), t('Default filter updated successfully.'));
 
-    $this->assertNoRaw('admin/settings/filter/delete/' . $full, t('Delete link not found.'));
+    $this->assertNoRaw('admin/settings/filter/delete/' . $this->formats->full, t('Delete link not found.'));
+  }
 
-    // Add an additional tag.
+  /**
+   * Test adding a new tag to allowed html filter.
+   */
+  function testFilterAllowedHTML() {
     $edit = array();
     $edit['allowed_html_1'] = '<a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>' . ' <quote>'; // Adding <quote> tag.
-    $this->drupalPost('admin/settings/filter/' . $filtered . '/configure', $edit, t('Save configuration'));
+
+    $this->drupalPost('admin/settings/filter/' . $this->formats->filtered . '/configure', $edit, t('Save configuration'));
     $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.
+  /**
+   * Test reordering of filters.
+   */
+  function testFilterReorder() {
     $edit = array();
-    $edit['weights[filter/' . $second_filter . ']'] = 1;
-    $edit['weights[filter/' . $first_filter . ']'] = 2;
-    $this->drupalPost('admin/settings/filter/' . $filtered . '/order', $edit, t('Save configuration'));
+    $edit['weights[filter/' . $this->filters->second_filter . ']'] = 1;
+    $edit['weights[filter/' . $this->filters->first_filter . ']'] = 2;
+    $this->drupalPost('admin/settings/filter/' . $this->formats->filtered . '/order', $edit, t('Save configuration'));
     $this->assertText(t('The filter ordering has been saved.'), t('Order saved successfully.'));
 
-    $result = db_query('SELECT * FROM {filter} WHERE format = %d ORDER BY weight ASC', $filtered);
+    $result = db_query('SELECT * FROM {filter} WHERE format = %d ORDER BY weight ASC', $this->formats->filtered);
     $filters = array();
     while ($filter = db_fetch_object($result)) {
-      if ($filter->delta == $second_filter || $filter->delta == $first_filter) {
+      if ($filter->delta == $this->filters->second_filter || $filter->delta == $this->filters->first_filter) {
         $filters[] = $filter;
       }
     }
-    $this->assertTrue(($filters[0]->delta == $second_filter && $filters[1]->delta == $first_filter), t('Order confirmed.'));
+    $this->assertTrue(($filters[0]->delta == $this->filters->second_filter && $filters[1]->delta == $this->filters->first_filter), t('Order confirmed.'));
+  }
 
-    // Add filter.
+  /**
+   * Test adding and deleting a format.
+   */
+  function testFilterFormatAddDelete() {
     $edit = array();
     $edit['name'] = $this->randomName();
     $edit['roles[2]'] = TRUE;
-    $edit['filters[filter/' . $second_filter . ']'] = TRUE;
-    $edit['filters[filter/' . $first_filter . ']'] = TRUE;
+    $edit['filters[filter/' . $this->filters->second_filter . ']'] = TRUE;
+    $edit['filters[filter/' . $this->filters->first_filter . ']'] = TRUE;
+
     $this->drupalPost('admin/settings/filter/add', $edit, t('Save configuration'));
     $this->assertRaw(t('Added text format %format.', array('%format' => $edit['name'])), t('New filter created.'));
 
@@ -74,43 +94,54 @@ class FilterAdminTestCase extends Drupal
 
     if ($format !== NULL) {
       $this->assertFieldByName('roles[2]', '', t('Role found.'));
-      $this->assertFieldByName('filters[filter/' . $second_filter . ']', '', t('Line break filter found.'));
-      $this->assertFieldByName('filters[filter/' . $first_filter . ']', '', t('Url filter found.'));
+      $this->assertFieldByName('filters[filter/' . $this->filters->second_filter . ']', '', t('Line break filter found.'));
+      $this->assertFieldByName('filters[filter/' . $this->filters->first_filter . ']', '', t('Url filter found.'));
 
       // Delete new filter.
       $this->drupalPost('admin/settings/filter/delete/' . $format->format, array(), t('Delete'));
       $this->assertRaw(t('Deleted text format %format.', array('%format' => $edit['name'])), t('Format successfully deleted.'));
     }
+  }
 
-    // Change default filter back.
-    $edit = array();
-    $edit['default'] = $filtered;
-    $this->drupalPost('admin/settings/filter', $edit, t('Save changes'));
-    $this->assertText(t('Default format updated.'), t('Default filter updated successfully.'));
-
-    $this->assertNoRaw('admin/settings/filter/delete/' . $filtered, t('Delete link not found.'));
-
-    // Allow authenticated users on full HTML.
+  /**
+   * Test role accessibility of formats.
+   */
+  function testFilterFormatRole() {
+    // Allow authenticated users to use full HTML.
     $edit = array();
     $edit['roles[2]'] = TRUE;
-    $this->drupalPost('admin/settings/filter/' . $full, $edit, t('Save configuration'));
+    $content = $this->drupalPost('admin/settings/filter/' . $this->formats->full, $edit, t('Save configuration'));
     $this->assertText(t('The text format settings have been updated.'), t('Full HTML format successfully updated.'));
 
     // Switch user.
     $this->drupalLogout();
-    $this->drupalLogin($web_user);
+    $this->drupalLogin($this->users->web_user);
 
     $this->drupalGet('node/add/page');
-    $this->assertFieldByName('body_format', $full, t('Full HTML filter accessible.'));
+    $this->assertFieldByName('body_format', $this->formats->full, t('Full HTML filter accessible.'));
+  }
 
-    // Use filtered HTML and see if it removes tags that arn't allowed.
+  /**
+   * Test filtered HTML filter.
+   */
+  function testFilterFilteredHTML() {
+    // Change default filter back to filtered HTML.
+    $edit = array();
+    $edit['default'] = $this->formats->filtered;
+    $this->drupalPost('admin/settings/filter', $edit, t('Save changes'));
+    $this->assertText(t('Default format updated.'), t('Default filter updated successfully.'));
+
+    $this->assertNoRaw('admin/settings/filter/delete/' . $this->formats->filtered, t('Delete link not found.'));
+
+    // Use filtered HTML and see if it removes tags that are not allowed.
     $body = $this->randomName();
     $extra_text = 'text';
 
     $edit = array();
     $edit['title'] = $this->randomName();
     $edit['body'] = $body . '<random>' . $extra_text . '</random>';
-    $edit['body_format'] = $filtered;
+    $edit['body_format'] = $this->formats->filtered;
+
     $this->drupalPost('node/add/page', $edit, t('Save'));
     $this->assertRaw(t('Page %title has been created.', array('%title' => $edit['title'])), t('Filtered node created.'));
 
@@ -119,30 +150,68 @@ class FilterAdminTestCase extends Drupal
 
     $this->drupalGet('node/' . $node->nid);
     $this->assertText($body . $extra_text, t('Filter removed invalid tag.'));
+  }
 
+  /**
+   * Test creation of a format with no filters.
+   */
+  function testFilterEmptyFormat() {
+    // Create format with no filters.
+    $empty_format = array(
+      'name'     => $this->randomName(),
+      'roles[2]' => 1,
+    );
+    $this->drupalPost('admin/settings/filter/add', $empty_format, t('Save configuration'));
+    $this->assertRaw(t('Added text format %format.', array('%format' => $empty_format['name'])), t('New empty format created.'));
+  
     // Switch user.
     $this->drupalLogout();
-    $this->drupalLogin($admin_user);
+    $this->drupalLogin($this->users->web_user);
 
-    // Clean up.
-    // Allowed tags.
-    $edit = array();
-    $edit['allowed_html_1'] = '<a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>';
-    $this->drupalPost('admin/settings/filter/' . $filtered . '/configure', $edit, t('Save configuration'));
-    $this->assertText(t('The configuration options have been saved.'), t('Changes reverted.'));
+    $filter_id = db_result(db_query("SELECT format FROM {filter_format} WHERE name = '%s'", $empty_format['name']));
 
-    // Full HTML.
-    $edit = array();
-    $edit['roles[2]'] = FALSE;
-    $this->drupalPost('admin/settings/filter/' . $full, $edit, t('Save configuration'));
-    $this->assertText(t('The text format settings have been updated.'), t('Full HTML format successfully reverted.'));
+    $random_text = $this->randomName(2);
+    $node_body =  $random_text . '<?php print "' . $random_text . '"; ?>' . $random_text . '<img src="' . $random_text . '" />' . $random_text; 
 
-    // Filter order.
-    $edit = array();
-    $edit['weights[filter/' . $second_filter . ']'] = 2;
-    $edit['weights[filter/' . $first_filter . ']'] = 1;
-    $this->drupalPost('admin/settings/filter/' . $filtered . '/order', $edit, t('Save configuration'));
-    $this->assertText(t('The filter ordering has been saved.'), t('Order successfully reverted.'));
+    $node = $this->drupalCreateNode(array(
+      'body'   => $node_body,
+      'format' => $filter_id
+    ));
+
+    $this->drupalGet('node/' . $node->nid);
+    $this->drupalGetContent();
+    $this->assertRaw($node_body, t('Nothing is filtered.'));
+  }
+
+  /**
+   * Test creating format with same name.
+   */
+  function testFilterFormatSameName() {
+    // Create format with no filters.
+    $empty_format = array(
+      'name'     => $this->randomName(),
+      'roles[2]' => 1,
+    );
+    $this->drupalPost('admin/settings/filter/add', $empty_format, t('Save configuration'));
+
+    // Create format with same name.
+    $edit = array(
+      'name'     => $empty_format['name'],
+      'roles[2]' => 1,
+    );
+    $this->drupalPost('admin/settings/filter/add', $edit, t('Save configuration'));
+    $this->assertRaw(t('Filter format names need to be unique. A format named %format already exists.', array('%format' => $edit['name'])), t('Cannot create format with same name.'));
+  }
+
+  /**
+   * Test deleting the default format.
+   */
+  function testFilterDeleteDefault() {
+    $filter_id = variable_get('filter_default_format', 1);
+
+    // Should redirect back to filter settings page.
+    $this->drupalGet('admin/settings/filter/delete/' . $filter_id);
+    $this->assertRaw(t('The default format cannot be deleted.'), t('The default format cannot be deleted.'));
   }
 
   /**
@@ -151,10 +220,10 @@ class FilterAdminTestCase extends Drupal
    * @return Array Array containing filtered and full filter ids.
    */
   function checkFilterFormats() {
-    $result = db_query('SELECT format, name FROM {filter_format}');
-
+    $result = db_query('SELECT name, format FROM {filter_format}');
     $filtered = -1;
     $full = -1;
+
     while ($format = db_fetch_object($result)) {
       if ($format->name == 'Filtered HTML') {
         $filtered = $format->format;
@@ -163,7 +232,6 @@ class FilterAdminTestCase extends Drupal
         $full = $format->format;
       }
     }
-
     return array($filtered, $full);
   }
 
