Search in sources :

Example 16 with EmailMessage

use of org.sonar.server.issue.notification.EmailMessage in project sonarqube by SonarSource.

the class EmailNotificationChannelTest method deliverAll_returns_count_of_request_for_which_at_least_one_formatter_accept_it.

@Test
public void deliverAll_returns_count_of_request_for_which_at_least_one_formatter_accept_it() throws MessagingException, IOException {
    String recipientEmail = "foo@donut";
    configure();
    Notification notification1 = mock(Notification.class);
    Notification notification2 = mock(Notification.class);
    Notification notification3 = mock(Notification.class);
    EmailTemplate template1 = mock(EmailTemplate.class);
    EmailTemplate template3 = mock(EmailTemplate.class);
    EmailMessage emailMessage1 = new EmailMessage().setTo(recipientEmail).setSubject("sub11").setPlainTextMessage("msg11");
    EmailMessage emailMessage3 = new EmailMessage().setTo(recipientEmail).setSubject("sub3").setPlainTextMessage("msg3");
    when(template1.format(notification1)).thenReturn(emailMessage1);
    when(template3.format(notification3)).thenReturn(emailMessage3);
    Set<EmailDeliveryRequest> requests = Stream.of(notification1, notification2, notification3).map(t -> new EmailDeliveryRequest(recipientEmail, t)).collect(toSet());
    EmailNotificationChannel underTest = new EmailNotificationChannel(configuration, new EmailTemplate[] { template1, template3 }, null);
    int count = underTest.deliverAll(requests);
    assertThat(count).isEqualTo(2);
    assertThat(smtpServer.getMessages()).hasSize(2);
    Map<String, MimeMessage> messagesBySubject = smtpServer.getMessages().stream().map(t -> {
        try {
            return t.getMimeMessage();
        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }
    }).collect(toMap(t -> {
        try {
            return t.getSubject();
        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }
    }, t -> t));
    assertThat((String) messagesBySubject.get(SUBJECT_PREFIX + " " + emailMessage1.getSubject()).getContent()).contains(emailMessage1.getMessage());
    assertThat((String) messagesBySubject.get(SUBJECT_PREFIX + " " + emailMessage3.getSubject()).getContent()).contains(emailMessage3.getMessage());
}
Also used : IntStream(java.util.stream.IntStream) Assert.fail(junit.framework.Assert.fail) EmailTemplate(org.sonar.server.issue.notification.EmailTemplate) Wiser(org.subethamail.wiser.Wiser) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) RunWith(org.junit.runner.RunWith) MessagingException(javax.mail.MessagingException) Random(java.util.Random) DataProvider(com.tngtech.java.junit.dataprovider.DataProvider) DataProviderRunner(com.tngtech.java.junit.dataprovider.DataProviderRunner) Mockito.verifyZeroInteractions(org.mockito.Mockito.verifyZeroInteractions) EmailDeliveryRequest(org.sonar.server.notification.email.EmailNotificationChannel.EmailDeliveryRequest) EmailSettings(org.sonar.api.config.EmailSettings) Collectors.toMap(java.util.stream.Collectors.toMap) EmailMessage(org.sonar.server.issue.notification.EmailMessage) Mockito.verifyNoMoreInteractions(org.mockito.Mockito.verifyNoMoreInteractions) Map(java.util.Map) After(org.junit.After) RandomStringUtils.random(org.apache.commons.lang.RandomStringUtils.random) Collectors.toSet(java.util.stream.Collectors.toSet) Before(org.junit.Before) Notification(org.sonar.api.notifications.Notification) UseDataProvider(com.tngtech.java.junit.dataprovider.UseDataProvider) Set(java.util.Set) WiserMessage(org.subethamail.wiser.WiserMessage) IOException(java.io.IOException) Test(org.junit.Test) MimeMessage(javax.mail.internet.MimeMessage) Mockito.when(org.mockito.Mockito.when) Mockito.verify(org.mockito.Mockito.verify) List(java.util.List) Stream(java.util.stream.Stream) EmailException(org.apache.commons.mail.EmailException) Collections(java.util.Collections) Mockito.mock(org.mockito.Mockito.mock) EmailMessage(org.sonar.server.issue.notification.EmailMessage) MessagingException(javax.mail.MessagingException) Notification(org.sonar.api.notifications.Notification) MimeMessage(javax.mail.internet.MimeMessage) EmailTemplate(org.sonar.server.issue.notification.EmailTemplate) EmailDeliveryRequest(org.sonar.server.notification.email.EmailNotificationChannel.EmailDeliveryRequest) Test(org.junit.Test)

Example 17 with EmailMessage

use of org.sonar.server.issue.notification.EmailMessage in project sonarqube by SonarSource.

the class EmailNotificationChannelTest method shouldNotSendEmailWhenHostnameNotConfigured.

@Test
public void shouldNotSendEmailWhenHostnameNotConfigured() {
    EmailMessage emailMessage = new EmailMessage().setTo("user@nowhere").setSubject("Foo").setPlainTextMessage("Bar");
    boolean delivered = underTest.deliver(emailMessage);
    assertThat(smtpServer.getMessages()).isEmpty();
    assertThat(delivered).isFalse();
}
Also used : EmailMessage(org.sonar.server.issue.notification.EmailMessage) Test(org.junit.Test)

Example 18 with EmailMessage

use of org.sonar.server.issue.notification.EmailMessage in project sonarqube by SonarSource.

the class EmailNotificationChannelTest method shouldSendNonThreadedEmail.

@Test
public void shouldSendNonThreadedEmail() throws Exception {
    configure();
    EmailMessage emailMessage = new EmailMessage().setTo("user@nowhere").setSubject("Foo").setPlainTextMessage("Bar");
    boolean delivered = underTest.deliver(emailMessage);
    List<WiserMessage> messages = smtpServer.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 from NoWhere <server@nowhere>");
    assertThat(email.getHeader("To", null)).isEqualTo("<user@nowhere>");
    assertThat(email.getHeader("Subject", null)).isEqualTo("[SONARQUBE] Foo");
    assertThat((String) email.getContent()).startsWith("Bar");
    assertThat(delivered).isTrue();
}
Also used : EmailMessage(org.sonar.server.issue.notification.EmailMessage) MimeMessage(javax.mail.internet.MimeMessage) WiserMessage(org.subethamail.wiser.WiserMessage) Test(org.junit.Test)

Example 19 with EmailMessage

use of org.sonar.server.issue.notification.EmailMessage in project sonarqube by SonarSource.

the class EmailNotificationChannelTest method shouldSendThreadedEmail.

@Test
public void shouldSendThreadedEmail() throws Exception {
    configure();
    EmailMessage emailMessage = new EmailMessage().setMessageId("reviews/view/1").setFrom("Full Username").setTo("user@nowhere").setSubject("Review #3").setPlainTextMessage("I'll take care of this violation.");
    boolean delivered = underTest.deliver(emailMessage);
    List<WiserMessage> messages = smtpServer.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/1@nemo.sonarsource.org>");
    assertThat(email.getHeader("References", null)).isEqualTo("<reviews/view/1@nemo.sonarsource.org>");
    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 from NoWhere)\" <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.");
    assertThat(delivered).isTrue();
}
Also used : EmailMessage(org.sonar.server.issue.notification.EmailMessage) MimeMessage(javax.mail.internet.MimeMessage) WiserMessage(org.subethamail.wiser.WiserMessage) Test(org.junit.Test)

Example 20 with EmailMessage

use of org.sonar.server.issue.notification.EmailMessage in project sonarqube by SonarSource.

the class QGChangeEmailTemplate method format.

@Override
@CheckForNull
public EmailMessage format(Notification notification) {
    if (!"alerts".equals(notification.getType())) {
        return null;
    }
    // Retrieve useful values
    String projectId = notification.getFieldValue("projectId");
    String projectKey = notification.getFieldValue("projectKey");
    String projectName = notification.getFieldValue("projectName");
    String projectVersion = notification.getFieldValue("projectVersion");
    String branchName = notification.getFieldValue("branch");
    String alertName = notification.getFieldValue("alertName");
    String alertText = notification.getFieldValue("alertText");
    String alertLevel = notification.getFieldValue("alertLevel");
    String ratingMetricsInOneString = notification.getFieldValue("ratingMetrics");
    boolean isNewAlert = Boolean.parseBoolean(notification.getFieldValue("isNewAlert"));
    String fullProjectName = computeFullProjectName(projectName, branchName);
    // Generate text
    String subject = generateSubject(fullProjectName, alertLevel, isNewAlert);
    String messageBody = generateMessageBody(projectName, projectKey, projectVersion, branchName, alertName, alertText, isNewAlert, ratingMetricsInOneString);
    // And finally return the email that will be sent
    return new EmailMessage().setMessageId("alerts/" + projectId).setSubject(subject).setPlainTextMessage(messageBody);
}
Also used : EmailMessage(org.sonar.server.issue.notification.EmailMessage) CheckForNull(javax.annotation.CheckForNull)

Aggregations

EmailMessage (org.sonar.server.issue.notification.EmailMessage)32 Test (org.junit.Test)27 Notification (org.sonar.api.notifications.Notification)13 CheckForNull (javax.annotation.CheckForNull)3 MimeMessage (javax.mail.internet.MimeMessage)3 WiserMessage (org.subethamail.wiser.WiserMessage)3 UseDataProvider (com.tngtech.java.junit.dataprovider.UseDataProvider)2 Date (java.util.Date)2 EmailException (org.apache.commons.mail.EmailException)2 DateUtils.formatDate (org.sonar.api.utils.DateUtils.formatDate)2 EmailTemplate (org.sonar.server.issue.notification.EmailTemplate)2 EmailDeliveryRequest (org.sonar.server.notification.email.EmailNotificationChannel.EmailDeliveryRequest)2 DataProvider (com.tngtech.java.junit.dataprovider.DataProvider)1 DataProviderRunner (com.tngtech.java.junit.dataprovider.DataProviderRunner)1 IOException (java.io.IOException)1 Collections (java.util.Collections)1 List (java.util.List)1 Map (java.util.Map)1 Random (java.util.Random)1 Set (java.util.Set)1