function ActivityWebTestCase::testActivityActionCreate in Activity 6.2
Test the creation of a new configurable activity action.
File
- tests/
activity.test, line 27  - : Provide tests for Activity module.
 
Class
- ActivityWebTestCase
 - Class that provides assertations and helper functions for creating content
 
Code
function testActivityActionCreate() {
  $callback = 'activity_record';
  $hash = md5($callback);
  // create and login our test user
  $test_user = $this
    ->drupalCreateUser(array(
    'administer actions',
  ));
  $this
    ->drupalLogin($test_user);
  // post data to create our configurable action
  $edit = array();
  $edit['action'] = $hash;
  $this
    ->drupalPost('admin/settings/actions', $edit, t('Create'));
  // fill out our configurable action form and post
  $edit = array();
  $edit['actions_description'] = t('Record a node update activity');
  $edit['author-pattern'] = t('You updated [node-link].');
  $edit['everyone-pattern'] = t('[user-link] updated [node-link].');
  $this
    ->drupalPost('admin/settings/actions/configure/' . $hash, $edit, t('Save'));
  // make sure that the action is in our list of assignable actions
  $this
    ->assertRaw(t('The action has been successfully saved.'), t('Make sure the new action was saved.'));
  // Assign the action to a trigger
  // Since we created our own action, we need to get the $aid for the hash
  $aid = db_result(db_query("SELECT a.aid FROM {actions} a WHERE a.callback = '%s'", $callback));
  $hash = md5($aid);
  $edit = array();
  $edit['aid'] = $hash;
  // Since there are multiple forms on the page we need to post to, we need to
  //  be able to target a specific form. Activities needs to record a nid which
  //  isn't present through the 'presave' trigger, so we can't just use
  //  $this->drupalPost('admin/build/trigger/node', $edit, t('Assign'));
  //  in order to assign the action or it will go into the 'presave' trigger
  //  since that is the first 'Assign' button on the page.
  // drupal_execute() doesn't seem to work either.
  //  $form_id = 'trigger_assign_form';
  //  $form_state['values'] = $edit;
  //  drupal_execute($form_id, $form_state, 'nodeapi', 'insert', 'inserts a node');
  // So we have to do a direct INSERT.
  db_query("INSERT INTO {trigger_assignments} VALUES ('%s', '%s', '%s', %d)", 'nodeapi', 'insert', $aid, 1);
  // Create a node to see if our action is triggered
  $web_user = $this
    ->drupalCreateUser(array(
    'create page content',
    'access content',
    'administer nodes',
  ));
  $this
    ->drupalLogin($web_user);
  $edit = array();
  $edit['title'] = '!SimpleTest test node! ' . $this
    ->randomName(10);
  $edit['body'] = '!SimpleTest test body! ' . $this
    ->randomName(32) . ' ' . $this
    ->randomName(32);
  $this
    ->drupalPost('node/add/page', $edit, t('Save'));
  // Make sure the text we want appears.
  $this
    ->assertRaw(t('!post %title has been created.', array(
    '!post' => 'Page',
    '%title' => $edit['title'],
  )), t('Make sure the page has actually been created'));
  // check to make sure that there is an activity recorded for this node
  $loaded_node = $this
    ->drupalGetNodeByTitle($edit['title']);
  $query = db_query("SELECT * FROM {activity_messages}");
  $activity = db_fetch_object($query);
  $this
    ->assertTrue(!empty($activity), t('Make sure that an activity was recorded.'));
}