Tests logic around orphaned actions.

File

modules/trigger/trigger.test, line 707
Tests for trigger.module.

Class

TriggerOrphanedActionsTestCase
Tests that orphaned actions are properly handled.

Code

function testActionsOrphaned() {
  $action = 'trigger_test_generic_any_action';
  $hash = drupal_hash_base64($action);

  // Assign an action from a disable-able module 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'), array(), array(), 'trigger-node-presave-assign-form');

  // Create an unpublished node.
  $web_user = $this
    ->drupalCreateUser(array(
    'create page content',
    'edit own page content',
    'access content',
    'administer nodes',
  ));
  $this
    ->drupalLogin($web_user);
  $edit = array();
  $langcode = LANGUAGE_NONE;
  $edit["title"] = '!SimpleTest test node! ' . $this
    ->randomName(10);
  $edit["body[{$langcode}][0][value]"] = '!SimpleTest test body! ' . $this
    ->randomName(32) . ' ' . $this
    ->randomName(32);
  $this
    ->drupalPost('node/add/page', $edit, t('Save'));
  $this
    ->assertRaw(t('!post %title has been created.', array(
    '!post' => 'Basic page',
    '%title' => $edit["title"],
  )), 'Make sure the Basic page has actually been created');

  // Action should have been fired.
  $this
    ->assertTrue(variable_get('trigger_test_generic_any_action', FALSE), 'Trigger test action successfully fired.');

  // Disable the module that provides the action and make sure the trigger
  // doesn't white screen.
  module_disable(array(
    'trigger_test',
  ));
  $loaded_node = $this
    ->drupalGetNodeByTitle($edit["title"]);
  $edit["body[{$langcode}][0][value]"] = '!SimpleTest test body! ' . $this
    ->randomName(32) . ' ' . $this
    ->randomName(32);
  $this
    ->drupalPost("node/{$loaded_node->nid}/edit", $edit, t('Save'));

  // If the node body was updated successfully we have dealt with the
  // unavailable action.
  $this
    ->assertRaw(t('!post %title has been updated.', array(
    '!post' => 'Basic page',
    '%title' => $edit["title"],
  )), 'Make sure the Basic page can be updated with the missing trigger function.');
}