View source
<?php
require_once drupal_get_path('module', 'notifications') . '/tests/notifications_test_case.inc';
class NotificationsTemplatesTests extends NotificationsTestCase {
function getInfo() {
return array(
'name' => 'Notifications Templates',
'group' => 'Notifications',
'description' => 'Notifications templates and message composition',
);
}
function setUp() {
parent::setUp('token', 'autoload', 'messaging', 'messaging_debug', 'messaging_template', 'notifications', 'notifications_content', 'notifications_digest');
variable_set('notifications_default_send_interval', 0);
variable_set('notifications_default_send_method', 'debug');
variable_set('site_name', 'Test Site');
require_once drupal_get_path('module', 'notifications') . '/notifications.cron.inc';
}
function testNotificationsTemplates() {
$user = $this
->drupalCreateUser();
$send_method = 'debug';
$site_name = 'Test Site';
$ctype1 = $this
->drupalCreateContentType();
$ctype2 = $this
->drupalCreateContentType();
$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,
));
$node1->name = $node2->name = $author->name;
$event1 = $this
->notificationsCreateNodeEvent('insert', $node1);
$event2 = $this
->notificationsCreateNodeEvent('update', $node2);
variable_set('notifications_build_methods', array(
1 => 'short',
2 => 'long',
));
$digest = notifications_build_method(1);
$this
->assertEqual($digest['type'], 'short', 'Get information about intervals and digest methods.');
$info = notifications_event_types($event1->type, $event1->action);
$this
->assertEqual($info['digest'], array(
'node',
'type',
), 'Get event information about digest fields');
$info = nofitications_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.');
$info = nofitications_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.');
$event1->text['test'] = 'Text part';
$event1->text['body'] = '[title] [type-name] [site-name]';
$template = Notifications_Template::create_event_template($event1, 'test');
$template
->add_part('test');
$template
->add_part('body');
$template
->set_object('node', $node1);
$part = $template
->get_text('test');
$this
->assertEqual($part, 'Text part', 'Retrieved message part from event');
$part = $template
->get_text('body');
$this
->assertEqual($part, 'type key [type-name] [title] [site-name]', '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');
$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',
),
);
$event1->text = $event2->text = $text;
$event_list = array(
$event1,
);
$subscriptions = array_fill(1, count($event_list), array());
$messages = notifications_process_compose(NULL, $event_list, $subscriptions, 'test', 0);
unset($messages[0]['notifications']);
$this
->assertEqual($messages[0], $target, 'Message composition for single event' . $this
->compareTexts($messages[0], $target));
$node3 = $this
->drupalCreateNode(array(
'title' => 'Title 3',
'body' => 'Body 3',
'type' => $ctype1->type,
'uid' => $author->uid,
'status' => 1,
));
$node3->name = $author->name;
$event3 = $this
->notificationsCreateNodeEvent('insert', $node3);
$event4 = $this
->notificationsCreateNodeEvent('update', $node2);
$event3->text = $event4->text = $text;
$event_list = array(
1 => $event1,
2 => $event2,
3 => $event3,
4 => $event4,
);
$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);
$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}",
2 => "Digest line {$node3->title}",
),
);
$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}",
2 => "Digest line {$node2->title}",
),
);
$target = array(
'subject' => $texts['subject'],
'body' => theme('notifications_digest_short_body', $texts, $lines),
);
$subscriptions = array_fill(1, count($event_list), array());
$params = new Stdclass();
$params->account = $user;
$params->events = $event_list;
$params->subscriptions = $subscriptions;
$params->send_method = $send_method;
$params->send_interval = 1;
$digest = notifications_digest_build_short($params);
$message = array(
'subject' => $digest[0]->subject,
'body' => $digest[0]->body,
);
$this
->assertEqual($message, $target, 'Message composition for short digest.' . $this
->compareTexts($message, $target));
$event_list = array(
1 => $event1,
2 => $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']),
);
$subscriptions = array_fill(1, count($event_list), array());
$digest = notifications_process_compose($user, $event_list, $subscriptions, $send_method, 2);
$message = array(
'subject' => $digest[0]['subject'],
'body' => $digest[0]['body'],
);
$this
->assertEqual($message, $target, 'Message composition for long digest.' . $this
->compareTexts($message, $target));
}
function notificationsCreateNodeEvent($action, $node) {
static $eid = 0;
return (object) array(
'eid' => ++$eid,
'type' => 'node',
'action' => $action,
'node' => $node,
'params' => array(
'nid' => $node->nid,
),
'objects' => array(
'node' => $node,
),
);
}
function compareTexts($text1, $text2) {
if ($diff = $this
->diffTexts($text1, $text2)) {
return theme('table', array(), $diff);
}
else {
return '';
}
}
function diffTexts($text1, $text2) {
$diff = array();
foreach ($text1 as $key => $value) {
if (!isset($text2[$key])) {
$diff[] = array(
$key,
str_replace("\n", '\\n', $value),
'--',
);
}
elseif (is_array($value)) {
if ($compare = $this
->compareTexts($value, $text2[$key])) {
$diff[] = array(
$key,
array(
'data' => $compare,
'colspan' => 2,
),
);
}
}
elseif ($value != $text2[$key]) {
$diff[] = array(
$key,
str_replace("\n", '\\n', $value),
str_replace("\n", '\\n', $text2[$key]),
);
}
}
return $diff;
}
function printDebug($data) {
$string = is_array($data) || is_object($data) ? print_r($data, TRUE) : $data;
$this
->assertTrue(TRUE, 'DEBUG: ' . $string);
}
}