}
}
+ /**
+ * This is a basic test of the token processor (currently testing TokenCompatSubscriber)
+ * and makes sure that greeting + contact tokens are replaced.
+ * This is a good example to copy/expand when creating additional tests for token processor
+ * in "real" situations.
+ *
+ * @throws \CRM_Core_Exception
+ */
+ public function testTokenProcessor() {
+ $params['contact_id'] = $this->individualCreate();
+
+ // Prepare the processor and general context.
+ $tokenProc = new \Civi\Token\TokenProcessor(\Civi::dispatcher(), [
+ // Unique(ish) identifier for our controller/use-case.
+ 'controller' => 'civicrm_tokentest',
+
+ // Provide hints about what data will be available for each row.
+ // Ex: 'schema' => ['contactId', 'activityId', 'caseId'],
+ 'schema' => ['contactId'],
+
+ // Whether to enable Smarty evaluation.
+ 'smarty' => (defined('CIVICRM_MAIL_SMARTY') && CIVICRM_MAIL_SMARTY),
+ ]);
+
+ // Define message templates.
+ $tokenProc->addMessage('body_html', 'Good morning, <p>{contact.email_greeting} {contact.display_name}</p>. {custom.foobar} Bye!', 'text/html');
+ $tokenProc->addMessage('body_text', 'Good morning, {contact.email_greeting} {contact.display_name} Bye!', 'text/plain');
+
+ $expect[$params['contact_id']]['html'] = 'Good morning, <p>Dear Anthony Mr. Anthony Anderson II</p>. Bye!';
+ $expect[$params['contact_id']]['text'] = 'Good morning, Dear Anthony Mr. Anthony Anderson II Bye!';
+
+ // Define row data.
+ foreach (explode(',', $params['contact_id']) as $contactId) {
+ $context = ['contactId' => $contactId];
+ $tokenProc->addRow()->context($context);
+ }
+
+ $tokenProc->evaluate();
+
+ foreach ($tokenProc->getRows() as $tokenRow) {
+ /** @var \Civi\Token\TokenRow $tokenRow */
+ $html = $tokenRow->render('body_html');
+ $text = $tokenRow->render('body_text');
+ $this->assertEquals($expect[$params['contact_id']]['html'], $html);
+ $this->assertEquals($expect[$params['contact_id']]['text'], $text);
+ }
+ }
+
}