public function RerouteEmailContactTestCase::testBasicNotification in Reroute Email 7
Basic tests of email rerouting for emails sent through the Contact forms.
The Core Contact email form is submitted several times with different Email Rerouting settings: Rerouting enabled or disabled, Body injection enabled or disabled, several recipients with or without whitelist.
File
- ./reroute_email.test, line 181 
- Test the Reroute Email module.
Class
- RerouteEmailContactTestCase
- Tests email rerouting for the site-wide Core Contact form.
Code
public function testBasicNotification() {
  // Additional destination email address used for testing the whitelist.
  $additional_destination = "additional@example.com";
  // Configure to reroute normally to {$this->rerouteDestination}.
  $this
    ->configureRerouteEmail($this->rerouteDestination);
  // Configure the contact settings to send to $original_destination.
  $this
    ->drupalPost('admin/structure/contact/edit/1', array(
    'recipients' => $this->originalDestination,
  ), t('Save'));
  // Go to the contact page and send an email.
  $post = array(
    'subject' => "Test test test",
    'message' => 'This is a test',
  );
  $this
    ->drupalPost("contact", $post, t("Send message"));
  $this
    ->assertText(t("Your message has been sent"));
  $mails = $this
    ->drupalGetMails();
  $mail = end($mails);
  // Check status message is displayed to let users know email was rerouted.
  $this
    ->assertRaw(t('Submitted email, with ID: <em>@message_id</em>, was rerouted to configured address: <em>@reroute_target</em>. For more details please refer to Reroute Email settings.', array(
    '@message_id' => $mail['id'],
    '@reroute_target' => $this->rerouteDestination,
  )));
  $this
    ->assertMail('to', $this->rerouteDestination, format_string("Email was rerouted to @address", array(
    '@address' => $this->rerouteDestination,
  )));
  // Check if original destination email address is in rerouted email body.
  $this
    ->assertEmailOriginallyTo();
  $this
    ->assertTrue(strpos($mail['body'], 'Originally to') !== FALSE, 'Body does contain "Originally to"');
  // Now try sending to one of the additional email addresses that should
  // not be rerouted. Configure two email addresses in reroute form.
  // Body injection is still turned on.
  $this
    ->configureRerouteEmail($this->rerouteDestination, $additional_destination);
  // Configure the contact settings to point to the additional recipient.
  $this
    ->drupalPost('admin/structure/contact/edit/1', array(
    'recipients' => $additional_destination,
  ), t('Save'));
  // Go to the contact page and send an email.
  $post = array(
    'subject' => "Test test test",
    'message' => 'This is a test',
  );
  $this
    ->drupalPost("contact", $post, t("Send message"));
  $this
    ->assertText(t("Your message has been sent"));
  $this
    ->assertMail('to', $additional_destination, 'Email was not rerouted because destination was in whitelist');
  // Now change the configuration to disable reroute and set the original
  // email recipients.
  $this
    ->configureRerouteEmail(NULL, NULL, FALSE);
  // Set the contact form to send to original_destination.
  $this
    ->drupalPost('admin/structure/contact/edit/1', array(
    'recipients' => $this->originalDestination,
  ), t('Save'));
  // Go to the contact page and send an email.
  $post = array(
    'subject' => "Test test test",
    'message' => 'This is a test',
  );
  $this
    ->drupalPost("contact", $post, t("Send message"));
  $this
    ->assertText(t("Your message has been sent"));
  $mails = $this
    ->drupalGetMails();
  $mail = end($mails);
  // Check status message is not displayed because email was not rerouted.
  $this
    ->assertNoRaw(t('Submitted email, with ID: <em>@message_id</em>, was rerouted to configured address: <em>@reroute_target</em>. For more details please refer to Reroute Email settings.', array(
    '@message_id' => $mail['id'],
    '@reroute_target' => $this->rerouteDestination,
  )));
  // Mail should not be rerouted - should go to $original_destination.
  $this
    ->assertMail('to', $this->originalDestination, 'Mail not rerouted - sent to original destination.');
  $this
    ->verbose(t("Email 'to' was: <pre>@mail_to</pre>", array(
    '@mail_to' => $mail['to'],
  )));
  // Configure to reroute without body injection and without status message.
  $this
    ->configureRerouteEmail(NULL, NULL, TRUE, FALSE, FALSE);
  // Go to the contact page and send an email.
  $post = array(
    'subject' => "Test test test",
    'message' => 'This is a test',
  );
  $this
    ->drupalPost("contact", $post, t("Send message"));
  $this
    ->assertText(t("Your message has been sent"));
  $mails = $this
    ->drupalGetMails();
  $mail = end($mails);
  // Check status message is not displayed because it is disabled.
  $this
    ->assertNoRaw(t('Submitted email, with ID: <em>@message_id</em>, was rerouted to configured address: <em>@reroute_target</em>. For more details please refer to Reroute Email settings.', array(
    '@message_id' => $mail['id'],
    '@reroute_target' => $this->rerouteDestination,
  )));
  // There should be nothing in the body except the contact message - no
  // body injection like 'Originally to'.
  $this
    ->assertTrue(strpos($mail['body'], 'Originally to') === FALSE, 'Body does not contain "Originally to"');
  $this
    ->assertTrue($mail['headers']['X-Rerouted-Original-To'] == $this->originalDestination, 'X-Rerouted-Original-To is correctly set to the original destination email');
}