Index: tests/content_actions.test
===================================================================
RCS file: tests/content_actions.test
diff -N tests/content_actions.test
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/content_actions.test	26 Dec 2007 16:36:15 -0000
@@ -0,0 +1,89 @@
+<?php
+// $Id$
+class ActionsContentTest extends  DrupalTestCase {
+  var $_cleanup_roles = array();
+  var $_cleanup_users = array();
+  
+  /**
+   * Implementation of get_info() for information
+   */
+  function get_info() {
+    return array('name' => t('Actions content'), 'desc' => t('Perform various tests with content actions.') , 'group' => 'Actions');
+  }
+
+  /**
+   * Setup function
+   */
+  function setup() {
+  }
+
+  /**
+   * Various tests, all in one function to assure they happen in the right order.
+   */
+  function testActionsContent() {
+    global $user;
+
+    $this->drupalModuleEnable('trigger');
+
+    $content_actions = array('node_publish_action', 'node_unpublish_action', 'node_make_sticky_action', 'node_make_unsticky_action', 'node_promote_action', 'node_unpromote_action');
+
+    $hash = md5('node_publish_action');
+
+    $not_clean = db_result(db_query("SELECT COUNT(*) FROM {trigger_assignments} WHERE aid IN ('". implode("','", $content_actions) ."')"));
+    
+    if ($not_clean) {
+      $this->assertFalse($not_clean, t('Actions were already assigned to the trigger. Unassign all content triggers before attempting to run again.'));
+      return;
+    }
+    else {
+      $this->assertFalse($not_clean, t('Actions were already not assigned to the trigger.'));
+    }
+
+    // Test 1: Assign an action to a trigger, then pull the trigger, and make sure the actions fire. (Wow, those metaphors work out nicely).
+
+    $test_user = $this->drupalCreateUserRolePerm(array('administer actions', 'create page content'));
+    $this->drupalLoginUser($test_user);
+
+    // Set action id to "publish post".
+    $edit = array('aid' => $hash);
+    $this->drupalPostRequest('admin/build/trigger/node', $edit, 'Assign');
+
+    // Create an unpublished node.
+    $node->body      = $this->randomName(32);
+    $node->title     = $this->randomName(8);
+    $node->teaser    = $node->body;
+    $node->comment   = 2;
+    $node->date      = format_date($node->created, 'custom', 'Y-m-d H:i:s O');
+    $node->format    = 1;
+    $node->name      = $test_user->name;
+    $node->uid       = $test_user->uid;
+    $node->promote   = 0;
+    $node->revision  = 0;
+    $node->status    = 0;
+    $node->sticky    = 0;
+    $node->type      = 'page';
+    $node->revisions = NULL;
+    $node->taxonomy  = NULL;
+    node_save($node);
+    // Node should be published automatically.
+    $loaded_node = node_load($node->nid);
+    $this->assertTrue($loaded_node->status == 1, t('Check to make sure the node is automatically published'));
+
+    // Leave action assigned for next test
+
+    // Test 2: There should be an error when the action is assigned to the trigger twice.
+
+    $edit = array('aid' => $hash);
+    $this->drupalPostRequest('admin/build/trigger/node', $edit, 'Assign');
+    $this->assertWantedRaw(t('The action you choose is already assigned to that trigger.'), t('Check to make sure an error occurs when assigning an action to a trigger twice.'));
+
+    // Test 3: The action should be able to be unassigned from a trigger.
+
+    // This effectively cleans up as well.
+    $this->drupalPostRequest('admin/build/trigger/unassign/nodeapi/presave/'. $hash, array(), 'Unassign');
+    $this->assertWantedRaw(t('Action %action has been unassigned.', array('%action' => 'Publish post')), t('Check to make sure action can be unassigned from trigger.'));
+
+    $assigned = db_result(db_query("SELECT COUNT(*) FROM {trigger_assignments} WHERE aid IN ('". implode("','", $content_actions) ."')"));
+    $this->assertFalse($assigned, t('Check to make sure unassign worked properly at the database level.'));
+  }
+}
