@Test
  public void shouldSendNonThreadedEmail() throws Exception {
    configure();
    EmailMessage emailMessage =
        new EmailMessage().setTo("user@nowhere").setSubject("Foo").setMessage("Bar");
    channel.deliver(emailMessage);

    List<WiserMessage> messages = server.getMessages();
    assertThat(messages).hasSize(1);

    MimeMessage email = messages.get(0).getMimeMessage();

    assertThat(email.getHeader("Content-Type", null)).isEqualTo("text/plain; charset=UTF-8");

    assertThat(email.getHeader("In-Reply-To", null)).isNull();
    assertThat(email.getHeader("References", null)).isNull();

    assertThat(email.getHeader("List-ID", null))
        .isEqualTo("SonarQube <sonar.nemo.sonarsource.org>");
    assertThat(email.getHeader("List-Archive", null)).isEqualTo("http://nemo.sonarsource.org");

    assertThat(email.getHeader("From", null)).isEqualTo("SonarQube <server@nowhere>");
    assertThat(email.getHeader("To", null)).isEqualTo("<user@nowhere>");
    assertThat(email.getHeader("Subject", null)).isEqualTo("[SONARQUBE] Foo");
    assertThat((String) email.getContent()).startsWith("Bar");
  }
  @Test
  public void shouldSendThreadedEmail() throws Exception {
    configure();
    EmailMessage emailMessage =
        new EmailMessage()
            .setMessageId("reviews/view/1")
            .setFrom("Full Username")
            .setTo("user@nowhere")
            .setSubject("Review #3")
            .setMessage("I'll take care of this violation.");
    channel.deliver(emailMessage);

    List<WiserMessage> messages = server.getMessages();
    assertThat(messages).hasSize(1);

    MimeMessage email = messages.get(0).getMimeMessage();

    assertThat(email.getHeader("Content-Type", null)).isEqualTo("text/plain; charset=UTF-8");

    assertThat(email.getHeader("In-Reply-To", null))
        .isEqualTo("<reviews/view/[email protected]>");
    assertThat(email.getHeader("References", null))
        .isEqualTo("<reviews/view/[email protected]>");

    assertThat(email.getHeader("List-ID", null))
        .isEqualTo("SonarQube <sonar.nemo.sonarsource.org>");
    assertThat(email.getHeader("List-Archive", null)).isEqualTo("http://nemo.sonarsource.org");

    assertThat(email.getHeader("From", ","))
        .isEqualTo("\"Full Username (SonarQube)\" <server@nowhere>");
    assertThat(email.getHeader("To", null)).isEqualTo("<user@nowhere>");
    assertThat(email.getHeader("Subject", null)).isEqualTo("[SONARQUBE] Review #3");
    assertThat((String) email.getContent()).startsWith("I'll take care of this violation.");
  }
 @Test
 public void shouldNotSendEmailWhenHostnameNotConfigured() throws Exception {
   EmailMessage emailMessage =
       new EmailMessage().setTo("user@nowhere").setSubject("Foo").setMessage("Bar");
   channel.deliver(emailMessage);
   assertThat(server.getMessages()).isEmpty();
 }
  @Test
  public void shouldNotThrowAnExceptionWhenUnableToSendEmail() throws Exception {
    configure();
    server.stop();

    EmailMessage emailMessage =
        new EmailMessage().setTo("user@nowhere").setSubject("Foo").setMessage("Bar");
    channel.deliver(emailMessage);
  }
  @Test
  public void shouldThrowAnExceptionWhenUnableToSendTestEmail() throws Exception {
    configure();
    server.stop();

    try {
      channel.sendTestEmail(
          "user@nowhere", "Test Message from SonarQube", "This is a test message from SonarQube.");
      fail();
    } catch (EmailException e) {
      // expected
    }
  }
  @Test
  public void shouldSendTestEmail() throws Exception {
    configure();
    channel.sendTestEmail(
        "user@nowhere", "Test Message from SonarQube", "This is a test message from SonarQube.");

    List<WiserMessage> messages = server.getMessages();
    assertThat(messages).hasSize(1);

    MimeMessage email = messages.get(0).getMimeMessage();
    assertThat(email.getHeader("Content-Type", null)).isEqualTo("text/plain; charset=UTF-8");
    assertThat(email.getHeader("From", ",")).isEqualTo("SonarQube <server@nowhere>");
    assertThat(email.getHeader("To", null)).isEqualTo("<user@nowhere>");
    assertThat(email.getHeader("Subject", null))
        .isEqualTo("[SONARQUBE] Test Message from SonarQube");
    assertThat((String) email.getContent()).startsWith("This is a test message from SonarQube.");
  }