function SimplenewsI18nTest::testNewsletterIssueTranslation in Simplenews 8
File
- src/
Tests/ SimplenewsI18nTest.php, line 95
Class
- SimplenewsI18nTest
- Translation of newsletters and issues.
Namespace
Drupal\simplenews\TestsCode
function testNewsletterIssueTranslation() {
// Sign up three users, one in english and two in spanish.
$english_mail = $this
->randomEmail();
$spanish_mail = $this
->randomEmail();
$spanish_mail2 = $this
->randomEmail();
$newsletter_id = $this
->getRandomNewsletter();
/** @var \Drupal\simplenews\Subscription\SubscriptionManagerInterface $subscription_manager */
$subscription_manager = \Drupal::service('simplenews.subscription_manager');
$subscription_manager
->subscribe($english_mail, $newsletter_id, FALSE, 'english', 'en');
$subscription_manager
->subscribe($spanish_mail, $newsletter_id, FALSE, 'spanish', 'es');
$subscription_manager
->subscribe($spanish_mail2, $newsletter_id, FALSE, 'spanish', 'es');
// Enable translation for newsletters.
$edit = array(
'language_configuration[content_translation]' => TRUE,
);
$this
->drupalPostForm('admin/structure/types/manage/simplenews_issue', $edit, t('Save content type'));
// Create a Newsletter including a translation.
$newsletter_id = $this
->getRandomNewsletter();
$english = array(
'title[0][value]' => $this
->randomMachineName(),
'simplenews_issue' => $newsletter_id,
'body[0][value]' => 'Link to node: [node:url]',
);
$this
->drupalPostForm('node/add/simplenews_issue', $english, 'Save');
$this
->assertTrue(preg_match('|node/(\\d+)$|', $this
->getUrl(), $matches), 'Node created');
$node = Node::load($matches[1]);
$this
->clickLink(t('Translate'));
$this
->clickLink(t('Add'));
$spanish = array(
'title[0][value]' => $this
->randomMachineName(),
'body[0][value]' => 'Link to node: [node:url] ES',
);
$this
->drupalPostForm(NULL, $spanish, t('Save (this translation)'));
\Drupal::entityTypeManager()
->getStorage('node')
->resetCache(array(
$node
->id(),
));
$node = Node::load($node
->id());
$translation = $node
->getTranslation($this->secondaryLanguage);
// Send newsletter.
$this
->clickLink(t('Newsletter'));
$this
->drupalPostForm(NULL, array(), t('Send now'));
$this
->cronRun();
//simplenews_cron();
$this
->assertEqual(3, count($this
->drupalGetMails()));
$newsletter = Newsletter::load($newsletter_id);
foreach ($this
->drupalGetMails() as $mail) {
if ($mail['to'] == $english_mail) {
$this
->assertEqual('en', $mail['langcode']);
$this
->assertEqual('[' . $newsletter
->label() . '] ' . $node
->getTitle(), $mail['subject']);
$node_url = $node
->toUrl('canonical', [
'absolute' => TRUE,
])
->toString();
$title = $node
->getTitle();
}
elseif ($mail['to'] == $spanish_mail || $mail['to'] == $spanish_mail2) {
$this
->assertEqual('es', $mail['langcode']);
// @todo: Verify newsletter translation once supported again.
$this
->assertEqual('[' . $newsletter->name . '] ' . $translation
->label(), $mail['subject']);
$node_url = $translation
->toUrl('canonical', [
'absolute' => TRUE,
'language' => $translation
->language(),
])
->toString();
$title = $translation
->getTitle();
}
else {
$this
->fail(t('Mail not sent to expected recipient'));
}
// Verify that the link is in the correct language.
$this
->assertTrue(strpos($mail['body'], $node_url) !== FALSE);
// The <h1> tag is converted to uppercase characters.
$this
->assertTrue(strpos($mail['body'], mb_strtoupper($title)) !== FALSE);
}
// Verify sent subscriber count for each node.
\Drupal::entityTypeManager()
->getStorage('node')
->resetCache(array(
$node
->id(),
));
$node = Node::load($node
->id());
$translation = $node
->getTranslation($this->secondaryLanguage);
$this
->assertEqual(1, $node->simplenews_issue->sent_count, 'subscriber count is correct for english');
$this
->assertEqual(2, $translation->simplenews_issue->sent_count, 'subscriber count is correct for spanish');
// Make sure the language of a node can be changed.
$english = array(
'title[0][value]' => $this
->randomMachineName(),
'langcode[0][value]' => 'en',
'body[0][value]' => 'Link to node: [node:url]',
);
$this
->drupalPostForm('node/add/simplenews_issue', $english, 'Save');
$this
->clickLink(t('Edit'));
$edit = array(
'langcode[0][value]' => 'es',
);
$this
->drupalPostForm(NULL, $edit, t('Save'));
}