302 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			302 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
<?php
 | 
						|
// $Id$
 | 
						|
 | 
						|
class TriggerContentTestCase extends DrupalWebTestCase {
 | 
						|
  var $_cleanup_roles = array();
 | 
						|
  var $_cleanup_users = array();
 | 
						|
 | 
						|
  public static function getInfo() {
 | 
						|
    return array(
 | 
						|
      'name' => 'Trigger content (node) actions',
 | 
						|
      'description' => 'Perform various tests with content actions.' ,
 | 
						|
      'group' => 'Trigger',
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  function setUp() {
 | 
						|
    parent::setUp('trigger');
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Various tests, all in one function to assure they happen in the right order.
 | 
						|
   */
 | 
						|
  function testActionsContent() {
 | 
						|
    global $user;
 | 
						|
    $content_actions = array('node_publish_action', 'node_unpublish_action', 'node_make_sticky_action', 'node_make_unsticky_action', 'node_promote_action', 'node_unpromote_action');
 | 
						|
 | 
						|
    foreach ($content_actions as $action) {
 | 
						|
      $hash = md5($action);
 | 
						|
      $info = $this->actionInfo($action);
 | 
						|
 | 
						|
      // Test 1: Assign an action to a trigger, then pull the trigger, and make sure the actions fire.
 | 
						|
      $test_user = $this->drupalCreateUser(array('administer actions'));
 | 
						|
      $this->drupalLogin($test_user);
 | 
						|
      $edit = array('aid' => $hash);
 | 
						|
      $this->drupalPost('admin/structure/trigger/node', $edit, t('Assign'));
 | 
						|
      // Create an unpublished node.
 | 
						|
      $web_user = $this->drupalCreateUser(array('create page content', 'access content', 'administer nodes'));
 | 
						|
      $this->drupalLogin($web_user);
 | 
						|
      $edit = array();
 | 
						|
      $langcode = LANGUAGE_NONE;
 | 
						|
      $edit["title[$langcode][0][value]"] = '!SimpleTest test node! ' . $this->randomName(10);
 | 
						|
      $edit["body[$langcode][0][value]"] = '!SimpleTest test body! ' . $this->randomName(32) . ' ' . $this->randomName(32);
 | 
						|
      $edit[$info['property']] = !$info['expected'];
 | 
						|
      $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[$langcode][0][value]"])), t('Make sure the page has actually been created'));
 | 
						|
      // Action should have been fired.
 | 
						|
      $loaded_node = $this->drupalGetNodeByTitle($edit["title[$langcode][0][value]"]);;
 | 
						|
      $this->assertTrue($loaded_node->$info['property'] == $info['expected'], t('Make sure the @action action fired.', array('@action' => $info['name'])));
 | 
						|
      // Leave action assigned for next test
 | 
						|
 | 
						|
      // Test 2: There should be an error when the action is assigned to the trigger twice.
 | 
						|
      $test_user = $this->drupalCreateUser(array('administer actions'));
 | 
						|
      $this->drupalLogin($test_user);
 | 
						|
      $edit = array('aid' => $hash);
 | 
						|
      $this->drupalPost('admin/structure/trigger/node', $edit, t('Assign'));
 | 
						|
      $edit = array('aid' => $hash);
 | 
						|
      $this->drupalPost('admin/structure/trigger/node', $edit, t('Assign'));
 | 
						|
      $this->assertRaw(t('The action you chose 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->drupalPost('admin/structure/trigger/unassign/node/node_presave/' . $hash, array(), t('Unassign'));
 | 
						|
      $this->assertRaw(t('Action %action has been unassigned.', array('%action' => ucfirst($info['name']))), t('Check to make sure the @action action can be unassigned from the trigger.', array('@action' => $info['name'])));
 | 
						|
      $assigned = db_query("SELECT COUNT(*) FROM {trigger_assignments} WHERE aid IN (:keys)", array(':keys' => $content_actions))->fetchField();
 | 
						|
      $this->assertFalse($assigned, t('Check to make sure unassign worked properly at the database level.'));
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Helper function for testActionsContent(): returns some info about each of the content actions.
 | 
						|
   *
 | 
						|
   * @param $action
 | 
						|
   *   The name of the action to return info about.
 | 
						|
   * @return
 | 
						|
   *   An associative array of info about the action.
 | 
						|
   */
 | 
						|
  function actionInfo($action) {
 | 
						|
    $info = array(
 | 
						|
      'node_publish_action' => array(
 | 
						|
        'property' => 'status',
 | 
						|
        'expected' => 1,
 | 
						|
        'name' => t('publish content'),
 | 
						|
      ),
 | 
						|
      'node_unpublish_action' => array(
 | 
						|
        'property' => 'status',
 | 
						|
        'expected' => 0,
 | 
						|
        'name' => t('unpublish content'),
 | 
						|
      ),
 | 
						|
      'node_make_sticky_action' => array(
 | 
						|
        'property' => 'sticky',
 | 
						|
        'expected' => 1,
 | 
						|
        'name' => t('make content sticky'),
 | 
						|
      ),
 | 
						|
      'node_make_unsticky_action' => array(
 | 
						|
        'property' => 'sticky',
 | 
						|
        'expected' => 0,
 | 
						|
        'name' => t('make content unsticky'),
 | 
						|
      ),
 | 
						|
      'node_promote_action' => array(
 | 
						|
        'property' => 'promote',
 | 
						|
        'expected' => 1,
 | 
						|
        'name' => t('promote content to front page'),
 | 
						|
      ),
 | 
						|
      'node_unpromote_action' => array(
 | 
						|
        'property' => 'promote',
 | 
						|
        'expected' => 0,
 | 
						|
        'name' => t('remove content from front page'),
 | 
						|
      ),
 | 
						|
    );
 | 
						|
    return $info[$action];
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Test cron trigger.
 | 
						|
 */
 | 
						|
class TriggerCronTestCase extends DrupalWebTestCase {
 | 
						|
  public static function getInfo() {
 | 
						|
    return array(
 | 
						|
      'name' => 'Trigger cron (system) actions',
 | 
						|
      'description' => 'Perform various tests with cron trigger.' ,
 | 
						|
      'group' => 'Trigger',
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  function setUp() {
 | 
						|
    parent::setUp('trigger', 'trigger_test');
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Test assigning multiple actions to the cron trigger.
 | 
						|
   *
 | 
						|
   * This test ensures that both simple and multiple complex actions
 | 
						|
   * succeed properly. This is done in the cron trigger test because
 | 
						|
   * cron allows passing multiple actions in at once.
 | 
						|
   */
 | 
						|
  function testActionsCron() {
 | 
						|
    // Create an administrative user.
 | 
						|
    $test_user = $this->drupalCreateUser(array('administer actions'));
 | 
						|
    $this->drupalLogin($test_user);
 | 
						|
 | 
						|
    // Assign a non-configurable action to the cron run trigger.
 | 
						|
    $edit = array('aid' => md5('trigger_test_system_cron_action'));
 | 
						|
    $this->drupalPost('admin/structure/trigger/system', $edit, t('Assign'));
 | 
						|
 | 
						|
    // Assign a configurable action to the cron trigger.
 | 
						|
    $hash = md5('trigger_test_system_cron_conf_action');
 | 
						|
    $action_label = $this->randomName();
 | 
						|
    $edit = array(
 | 
						|
      'actions_label' => $action_label,
 | 
						|
      'subject' => $action_label,
 | 
						|
    );
 | 
						|
    $this->drupalPost('admin/config/system/actions/configure/' . $hash, $edit, t('Save'));
 | 
						|
    $aid = db_query('SELECT aid FROM {actions} WHERE callback = :callback', array(':callback' => 'trigger_test_system_cron_conf_action'))->fetchField();
 | 
						|
    // $aid is likely 3 but if we add more uses for the sequences table in
 | 
						|
    // core it might break, so it is easier to get the value from the database.
 | 
						|
    $edit = array('aid' => md5($aid));
 | 
						|
    $this->drupalPost('admin/structure/trigger/system', $edit, t('Assign'));
 | 
						|
 | 
						|
    // Add a second configurable action to the cron trigger.
 | 
						|
    $action_label = $this->randomName();
 | 
						|
    $edit = array(
 | 
						|
      'actions_label' => $action_label,
 | 
						|
      'subject' => $action_label,
 | 
						|
    );
 | 
						|
    $this->drupalPost('admin/config/system/actions/configure/' . $hash, $edit, t('Save'));
 | 
						|
    $edit = array('aid' => md5($aid + 1));
 | 
						|
    $this->drupalPost('admin/structure/trigger/system', $edit, t('Assign'));
 | 
						|
 | 
						|
    // Force a cron run.
 | 
						|
    $this->cronRun();
 | 
						|
 | 
						|
    // Make sure the non-configurable action has fired.
 | 
						|
    $action_run = variable_get('trigger_test_system_cron_action', FALSE);
 | 
						|
    $this->assertTrue($action_run, t('Check that the cron run triggered the test action.'));
 | 
						|
 | 
						|
    // Make sure that both configurable actions have fired.
 | 
						|
    $action_run = variable_get('trigger_test_system_cron_conf_action', 0) == 2;
 | 
						|
    $this->assertTrue($action_run, t('Check that the cron run triggered both complex actions.'));
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Test other triggers.
 | 
						|
 */
 | 
						|
class TriggerOtherTestCase extends DrupalWebTestCase {
 | 
						|
  var $_cleanup_roles = array();
 | 
						|
  var $_cleanup_users = array();
 | 
						|
 | 
						|
  public static function getInfo() {
 | 
						|
    return array(
 | 
						|
      'name' => 'Trigger other actions',
 | 
						|
      'description' => 'Test triggering of user, comment, taxonomy actions.' ,
 | 
						|
      'group' => 'Trigger',
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  function setUp() {
 | 
						|
    parent::setUp('trigger', 'trigger_test');
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Test triggering on user create.
 | 
						|
   */
 | 
						|
  function testActionsUser() {
 | 
						|
    // Assign an action to the create user trigger.
 | 
						|
    $test_user = $this->drupalCreateUser(array('administer actions'));
 | 
						|
    $this->drupalLogin($test_user);
 | 
						|
    $action_id = 'trigger_test_generic_action';
 | 
						|
    $hash = md5($action_id);
 | 
						|
    $edit = array('aid' => $hash);
 | 
						|
    $this->drupalPost('admin/structure/trigger/user', $edit, t('Assign'));
 | 
						|
 | 
						|
    // Set action variable to FALSE.
 | 
						|
    variable_set( $action_id, FALSE );
 | 
						|
 | 
						|
    // Create an unblocked user
 | 
						|
    $web_user = $this->drupalCreateUser(array('administer users'));
 | 
						|
    $this->drupalLogin($web_user);
 | 
						|
    $name = $this->randomName();
 | 
						|
    $pass = user_password();
 | 
						|
    $edit = array();
 | 
						|
    $edit['name'] = $name;
 | 
						|
    $edit['mail'] = $name . '@example.com';
 | 
						|
    $edit['pass[pass1]'] = $pass;
 | 
						|
    $edit['pass[pass2]'] = $pass;
 | 
						|
    $edit['status'] = 1;
 | 
						|
    $this->drupalPost('admin/people/create', $edit, t('Create new account'));
 | 
						|
 | 
						|
    // Verify that the action variable has been set.
 | 
						|
    $this->assertTrue(variable_get($action_id, FALSE), t('Check that creating a user triggered the test action.'));
 | 
						|
 | 
						|
    // Reset the action variable.
 | 
						|
    variable_set( $action_id, FALSE );
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Test triggering on comment save.
 | 
						|
   */
 | 
						|
  function testActionsComment() {
 | 
						|
    // Assign an action to the comment save trigger.
 | 
						|
    $test_user = $this->drupalCreateUser(array('administer actions'));
 | 
						|
    $this->drupalLogin($test_user);
 | 
						|
    $action_id = 'trigger_test_generic_action';
 | 
						|
    $hash = md5($action_id);
 | 
						|
    $edit = array('aid' => $hash);
 | 
						|
    $this->drupalPost('admin/structure/trigger/comment', $edit, t('Assign'));
 | 
						|
 | 
						|
    // Set action variable to FALSE.
 | 
						|
    variable_set( $action_id, FALSE );
 | 
						|
 | 
						|
    // Create a node and add a comment to it.
 | 
						|
    $web_user = $this->drupalCreateUser(array('create article content', 'access content', 'post comments without approval', 'post comments'));
 | 
						|
    $this->drupalLogin($web_user);
 | 
						|
    $node = $this->drupalCreateNode(array('type' => 'article', 'promote' => 1));
 | 
						|
    $edit = array();
 | 
						|
    $edit['subject'] = $this->randomName(10);
 | 
						|
    $edit['comment'] = $this->randomName(10) . ' ' . $this->randomName(10);
 | 
						|
    $this->drupalGet('comment/reply/' . $node->nid);
 | 
						|
    $this->drupalPost(NULL, $edit, t('Save'));
 | 
						|
 | 
						|
    // Verify that the action variable has been set.
 | 
						|
    $this->assertTrue(variable_get($action_id, FALSE), t('Check that creating a comment triggered the action.'));
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Test triggering on taxonomy new term.
 | 
						|
   */
 | 
						|
  function testActionsTaxonomy() {
 | 
						|
    // Assign an action to the taxonomy term save trigger.
 | 
						|
    $test_user = $this->drupalCreateUser(array('administer actions'));
 | 
						|
    $this->drupalLogin($test_user);
 | 
						|
    $action_id = 'trigger_test_generic_action';
 | 
						|
    $hash = md5($action_id);
 | 
						|
    $edit = array('aid' => $hash);
 | 
						|
    $this->drupalPost('admin/structure/trigger/taxonomy', $edit, t('Assign'));
 | 
						|
 | 
						|
    // Set action variable to FALSE.
 | 
						|
    variable_set( $action_id, FALSE );
 | 
						|
 | 
						|
    // Create a taxonomy vocabulary and add a term to it.
 | 
						|
 | 
						|
    // Create a vocabulary.
 | 
						|
    $vocabulary = new stdClass();
 | 
						|
    $vocabulary->name = $this->randomName();
 | 
						|
    $vocabulary->description = $this->randomName();
 | 
						|
    $vocabulary->machine_name = drupal_strtolower($this->randomName());
 | 
						|
    $vocabulary->help = '';
 | 
						|
    $vocabulary->nodes = array('article' => 'article');
 | 
						|
    $vocabulary->weight = mt_rand(0, 10);
 | 
						|
    taxonomy_vocabulary_save($vocabulary);
 | 
						|
 | 
						|
    $term = new stdClass();
 | 
						|
    $term->name = $this->randomName();
 | 
						|
    $term->vid = $vocabulary->vid;
 | 
						|
    taxonomy_term_save($term);
 | 
						|
 | 
						|
    // Verify that the action variable has been set.
 | 
						|
    $this->assertTrue(variable_get($action_id, FALSE), t('Check that creating a taxonomy term triggered the action.'));
 | 
						|
  }
 | 
						|
}
 |