function NotificationsTemplatesTests::testNotificationsTemplates in Notifications 7
Same name and namespace in other branches
- 6.4 tests/notifications_templates.test \NotificationsTemplatesTests::testNotificationsTemplates()
- 6 tests/notifications_templates.test \NotificationsTemplatesTests::testNotificationsTemplates()
- 6.2 tests/notifications_templates.test \NotificationsTemplatesTests::testNotificationsTemplates()
- 6.3 tests/notifications_templates.test \NotificationsTemplatesTests::testNotificationsTemplates()
Play with creating, retrieving, deleting a pair subscriptions
File
- tests/
notifications_templates.test, line 29
Class
- NotificationsTemplatesTests
- Class for testing notifications templates and message composition.
Code
function testNotificationsTemplates() {
global $language;
// Create user to subscribe and get notifications
$user = $this
->drupalCreateUser();
$send_method = 'simple';
$destination = messaging_account_build_destination($user, $send_method);
$site_name = 'Test Site';
// Create content types for test nodes
$ctype1 = $this
->drupalCreateContentType();
$ctype2 = $this
->drupalCreateContentType();
// Author and node for testing, will be admin
$author = $this
->drupalCreateUser();
$node1 = $this
->drupalCreateNode(array(
'title' => 'Title 1',
'body' => 'Body 1',
'type' => $ctype1->type,
'uid' => $author->uid,
'status' => 1,
));
$node2 = $this
->drupalCreateNode(array(
'title' => 'Title 2',
'body' => 'Body 2',
'type' => $ctype2->type,
'uid' => $author->uid,
'status' => 1,
));
// Add name to nodes to avoid annoying notifices
$node1->name = $node2->name = $author->name;
// Build some fake objects
$event1 = $this
->notificationsCreateNodeEvent('insert', $node1);
$event2 = $this
->notificationsCreateNodeEvent('update', $node2);
// Basic api, text parts and info functions
$interval_nodigest = 0;
$interval_short = 1;
$interval_long = 2;
variable_set('notifications_digest_methods', array(
$interval_short => 'short',
$interval_long => 'long',
));
$digest = notifications_build_method(1);
$this
->assertEqual($digest['type'], 'short', 'Get information about intervals and digest methods.');
$info = $event1
->get_type();
$this
->assertEqual($info['digest'], array(
'node',
'type',
), 'Get event information about digest fields');
$info = notifications_digest_event_info($event1);
$this
->assertEqual($info, array(
'type' => 'node',
'field' => 'type',
'value' => $node1->type,
'object' => $node1,
'module' => 'notifications',
), 'Get digest information for first event.');
//$this->printObject('digest information', $info);
$info = notifications_digest_event_info($event2);
$this
->assertEqual($info, array(
'type' => 'node',
'field' => 'nid',
'value' => $node2->nid,
'object' => $node2,
'module' => 'notifications',
), 'Get digest information for second event.');
//$this->printObject('digest information', $info);
// Text parts, text replacement, etc...
$event1->text['test'] = 'Text part';
$digest_line = 'type key [type-name] [title] [site-name]';
$event1->text['digest'] = $digest_line;
$part = $event1
->message_part('test', 'test', $language);
$this
->assertEqual($part, 'Text part', 'Retrieved message part from event');
$digest_info = notifications_digest_event_info($event1);
// Fields will be type, action
// function notifications_digest_message_part($key, $method, $type, $field, $module = 'notifications')
$part = notifications_digest_line($event1, 'test', $language);
$this
->assertEqual($part, $digest_line, 'Retrieved testing message part: ' . $part);
$text = messaging_template_text_replace('[title] [type-name] [site-name]', array(
'node' => $node1,
));
$this
->assertEqual($text, "{$node1->title} {$node1->type} Test Site", 'Text replacement for node object');
// Now lets get into the scary part, events and event digesting
$text = array(
'subject' => 'Subject [title]',
'header' => 'Update for [type-name] [title]',
'main' => 'The body is [node-body-raw]',
'footer' => 'My site is [site-name]',
'digest' => 'Digest line [title]',
);
$target = array(
'subject' => "Subject {$node1->title}",
'body' => array(
'header' => "Update for {$ctype1->name} {$node1->title}",
'event' => "The body is {$node1->body}",
'footer' => 'My site is Test Site',
),
'language' => $language->language,
);
$event1->text = $event2->text = $text;
// Build event and subscriptions array
$event_list = array(
$event1->eid => $event1,
);
$subscriptions[$event1->eid] = array();
$subscriptions[$event2->eid] = array();
$messages = notifications_queue()
->process_compose($send_method, $destination, $event_list, $subscriptions, $interval_nodigest);
$message = current($messages);
$result = array(
'subject' => $message->subject,
'body' => $message->body,
'language' => $message->language,
);
$this
->assertEqual($result, $target, 'Message composition for single event' . $this
->compareTexts($result, $target));
// Test digesting, prepare events and build event list
$node3 = $this
->drupalCreateNode(array(
'title' => 'Title 3',
'body' => 'Body 3',
'type' => $ctype1->type,
'uid' => $author->uid,
'status' => 1,
));
$node3->name = $author->name;
// This should be digested by node type with the first one
$event3 = $this
->notificationsCreateNodeEvent('insert', $node3);
// This should be digested by node with the second one, it's the same node update
$event4 = $this
->notificationsCreateNodeEvent('update', $node2);
$subscriptions[$event3->eid] = array();
$subscriptions[$event4->eid] = array();
// Set known event texts
$event3->text = $event4->text = $text;
$event_list = array(
$event1->eid => $event1,
$event2->eid => $event2,
$event3->eid => $event3,
$event4->eid => $event4,
);
// This should produce a short digest, build the target to compare
$items = array();
$items['subject'] = "[site-name] subscription update for [user]";
$items['header'] = "Greetings, [user].\n\nThese are your messages";
$items['footer'] = "This is an automatic message from [site-name]\nTo manage your subscriptions, browse to [subscriptions-manage]";
$objects = array(
'user' => $user,
'subscription' => NULL,
);
$texts = messaging_template_text_replace($items, $objects);
// Node post events are digested by node type
$lines = array();
$lines['node'][$ctype1->type] = array(
'group' => array(
'title' => "New content of type {$ctype1->name} has been submitted",
'footer' => "",
),
'line' => array(
1 => "Digest line {$node1->title}",
//"$node1->title\nRead more " . url('node/' . $node1->nid, array('absolute' => TRUE)),
2 => "Digest line {$node3->title}",
),
);
// Node updates and comments are digested by nid
$lines['node'][2] = array(
'group' => array(
'title' => "Updates for {$ctype2->name}: {$node2->title}",
'footer' => "Read more " . url('node/' . $node2->nid, array(
'absolute' => TRUE,
)),
),
'line' => array(
1 => "Digest line {$node2->title}",
//"$node2->title\nRead more " . url('node/' . $node2->nid, array('absolute' => TRUE)),
2 => "Digest line {$node2->title}",
),
);
$target = array(
'subject' => $texts['subject'],
'body' => theme('notifications_digest_short_body', $texts, $lines),
);
$digest = notifications_queue()
->process_compose($send_method, $destination, $event_list, $subscriptions, $interval_short);
$message = array(
'subject' => $digest[0]->subject,
'body' => $digest[0]->body,
);
$this
->assertEqual($message, $target, 'Message composition for short digest.' . $this
->compareTexts($message, $target));
//$this->printObject($target, 'Target');
//$this->printObject($message, 'Message');
// This should be a long digest, interval 2, build target to compare
$event_list = array(
$event1->eid => $event1,
$event2->eid => $event2,
);
$body = array(
"Subject {$node1->title}",
"The body is {$node1->body}",
"Subject {$node2->title}",
"The body is {$node2->body}",
);
$target = array(
'subject' => $texts['subject'],
'body' => theme('notifications_digest_long_body', $texts['header'], $body, $texts['footer']),
);
$digest = notifications_queue()
->process_compose($send_method, $destination, $event_list, $subscriptions, $interval_long);
$message = array(
'subject' => $digest[0]->subject,
'body' => $digest[0]->body,
);
$this
->assertEqual($message, $target, 'Message composition for long digest.' . $this
->compareTexts($message, $target));
//$this->printObject($target, 'Target');
//$this->printObject($message, 'Message');
}