diff --git a/core/modules/trigger/tests/trigger_test.module b/core/modules/trigger/tests/trigger_test.module index 0e3f3f8..8152a06 100644 --- a/core/modules/trigger/tests/trigger_test.module +++ b/core/modules/trigger/tests/trigger_test.module @@ -57,7 +57,7 @@ function trigger_test_action_info() { function trigger_test_trigger_info() { // Register triggers that this module provides. The first is an additional // node trigger and the second is our own, which should create a new tab - // on the trigger assignment page. + // on the trigger assignment page. The last tests long trigger names. return array( 'node' => array( 'node_triggertest' => array( @@ -68,6 +68,9 @@ function trigger_test_trigger_info() { 'trigger_test_triggertest' => array( 'label' => t('Another test trigger is fired'), ), + 'trigger_test_in_the_day_we_sweat_it_out_in_the_streets_of_a_runaway_american_dream' => array( + 'label' => t('A test trigger with a name over 64 characters'), + ), ), ); } diff --git a/core/modules/trigger/trigger.install b/core/modules/trigger/trigger.install index 7dded60..ccba642 100644 --- a/core/modules/trigger/trigger.install +++ b/core/modules/trigger/trigger.install @@ -14,7 +14,7 @@ function trigger_schema() { 'fields' => array( 'hook' => array( 'type' => 'varchar', - 'length' => 32, + 'length' => 128, 'not null' => TRUE, 'default' => '', 'description' => 'Primary Key: The name of the internal Drupal hook; for example, node_insert.', @@ -51,3 +51,11 @@ function trigger_install() { // Do initial synchronization of actions in code and the database. actions_synchronize(); } + +/** + * Implements hook_update_N(). + */ +function trigger_update_8001() { + db_drop_primary_key('trigger_assignments'); + db_change_field('trigger_assignments', 'hook', 'hook', array('type' => 'varchar', 'length' => 128, 'not null' => TRUE, 'default' => '', 'description' => 'Primary Key: The name of the internal Drupal hook; for example, node_insert.', ), array('primary key' => array('hook', 'aid'))); +} diff --git a/core/modules/trigger/trigger.test b/core/modules/trigger/trigger.test index 9a9a4ba..f5a8962 100644 --- a/core/modules/trigger/trigger.test +++ b/core/modules/trigger/trigger.test @@ -738,3 +738,36 @@ class TriggerOrphanedActionsTestCase extends DrupalWebTestCase { $this->assertRaw(t('!post %title has been updated.', array('!post' => 'Basic page', '%title' => $edit["title"])), t('Make sure the Basic page can be updated with the missing trigger function.')); } } + +/** + * Tests the trigger assign form. + */ +class TriggerAssignFormTestCase extends DrupalWebTestCase { + public static function getInfo() { + return array( + 'name' => 'Trigger assignment form', + 'description' => 'Test assigning new triggers using the administration form.', + 'group' => 'Trigger', + ); + } + + function setUp() { + parent::setUp('trigger', 'trigger_test'); + } + + /** + * Tests submitting an action for a trigger with a long name. + */ + function testLongTrigger() { + $test_user = $this->drupalCreateUser(array('administer actions')); + $this->drupalLogin($test_user); + $action = 'trigger_test_generic_any_action'; + $hash = drupal_hash_base64($action); + + // Make sure a long hook name can be inserted. + $edit = array('aid' => $hash); + $this->drupalPost('admin/structure/trigger/trigger_test', $edit, t('Assign'), array(), array(), 'trigger-trigger-test-in-the-day-we-sweat-it-out-in-the-streets-of-a-runaway-american-dream-assign-form'); + + $this->assertText(t('Generic test action for any trigger')); + } +}