Polish JavaMailSenderTests

This commit is contained in:
Sam Brannen 2023-05-24 14:26:52 +02:00
parent 7f9349b7ae
commit 6dfd330fa5
2 changed files with 84 additions and 134 deletions

View File

@ -200,7 +200,7 @@ public class JavaMailSenderImpl implements JavaMailSender {
* Set the mail server port. * Set the mail server port.
* <p>Default is {@link #DEFAULT_PORT}, letting JavaMail use the default * <p>Default is {@link #DEFAULT_PORT}, letting JavaMail use the default
* SMTP port (25). * SMTP port (25).
*/ */
public void setPort(int port) { public void setPort(int port) {
this.port = port; this.port = port;
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2022 the original author or authors. * Copyright 2002-2023 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -16,17 +16,18 @@
package org.springframework.mail.javamail; package org.springframework.mail.javamail;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date; import java.util.Date;
import java.util.GregorianCalendar; import java.util.GregorianCalendar;
import java.util.List; import java.util.List;
import java.util.Properties; import java.util.Properties;
import java.util.stream.Stream;
import jakarta.activation.FileTypeMap; import jakarta.activation.FileTypeMap;
import jakarta.mail.Address; import jakarta.mail.Address;
import jakarta.mail.Message; import jakarta.mail.Message;
import jakarta.mail.Message.RecipientType;
import jakarta.mail.MessagingException; import jakarta.mail.MessagingException;
import jakarta.mail.NoSuchProviderException; import jakarta.mail.NoSuchProviderException;
import jakarta.mail.Session; import jakarta.mail.Session;
@ -44,18 +45,22 @@ import org.springframework.util.ObjectUtils;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
import static org.assertj.core.api.Assertions.assertThatNoException;
import static org.assertj.core.api.Assertions.entry; import static org.assertj.core.api.Assertions.entry;
/** /**
* @author Juergen Hoeller * @author Juergen Hoeller
* @author Stephane Nicoll * @author Stephane Nicoll
* @author Sam Brannen
* @since 09.10.2004 * @since 09.10.2004
*/ */
public class JavaMailSenderTests { class JavaMailSenderTests {
private final MockJavaMailSender sender = new MockJavaMailSender();
@Test @Test
public void javaMailSenderWithSimpleMessage() throws MessagingException, IOException { void javaMailSenderWithSimpleMessage() throws Exception {
MockJavaMailSender sender = new MockJavaMailSender();
sender.setHost("host"); sender.setHost("host");
sender.setPort(30); sender.setPort(30);
sender.setUsername("username"); sender.setUsername("username");
@ -81,30 +86,19 @@ public class JavaMailSenderTests {
assertThat(sender.transport.getSentMessages()).hasSize(1); assertThat(sender.transport.getSentMessages()).hasSize(1);
MimeMessage sentMessage = sender.transport.getSentMessage(0); MimeMessage sentMessage = sender.transport.getSentMessage(0);
List<Address> froms = Arrays.asList(sentMessage.getFrom()); assertThat(addresses(sentMessage.getFrom())).containsExactly("me@mail.org");
assertThat(froms).hasSize(1); assertThat(addresses(sentMessage.getReplyTo())).containsExactly("reply@mail.org");
assertThat(((InternetAddress) froms.get(0)).getAddress()).isEqualTo("me@mail.org"); assertThat(addresses(sentMessage.getRecipients(RecipientType.TO))).containsExactly("you@mail.org");
List<Address> replyTos = Arrays.asList(sentMessage.getReplyTo()); assertThat(addresses(sentMessage.getRecipients(RecipientType.CC))).containsExactly("he@mail.org", "she@mail.org");
assertThat(((InternetAddress) replyTos.get(0)).getAddress()).isEqualTo("reply@mail.org"); assertThat(addresses(sentMessage.getRecipients(RecipientType.BCC))).containsExactly("us@mail.org", "them@mail.org");
List<Address> tos = Arrays.asList(sentMessage.getRecipients(Message.RecipientType.TO));
assertThat(tos).hasSize(1);
assertThat(((InternetAddress) tos.get(0)).getAddress()).isEqualTo("you@mail.org");
List<Address> ccs = Arrays.asList(sentMessage.getRecipients(Message.RecipientType.CC));
assertThat(ccs).hasSize(2);
assertThat(((InternetAddress) ccs.get(0)).getAddress()).isEqualTo("he@mail.org");
assertThat(((InternetAddress) ccs.get(1)).getAddress()).isEqualTo("she@mail.org");
List<Address> bccs = Arrays.asList(sentMessage.getRecipients(Message.RecipientType.BCC));
assertThat(bccs).hasSize(2);
assertThat(((InternetAddress) bccs.get(0)).getAddress()).isEqualTo("us@mail.org");
assertThat(((InternetAddress) bccs.get(1)).getAddress()).isEqualTo("them@mail.org");
assertThat(sentMessage.getSentDate().getTime()).isEqualTo(sentDate.getTime()); assertThat(sentMessage.getSentDate().getTime()).isEqualTo(sentDate.getTime());
assertThat(sentMessage.getSubject()).isEqualTo("my subject"); assertThat(sentMessage.getSubject()).isEqualTo("my subject");
assertThat(sentMessage.getContent()).isEqualTo("my text"); assertThat(sentMessage.getContent()).isEqualTo("my text");
} }
@Test @Test
public void javaMailSenderWithSimpleMessages() throws MessagingException { void javaMailSenderWithSimpleMessages() throws Exception {
MockJavaMailSender sender = new MockJavaMailSender();
sender.setHost("host"); sender.setHost("host");
sender.setUsername("username"); sender.setUsername("username");
sender.setPassword("password"); sender.setPassword("password");
@ -122,59 +116,49 @@ public class JavaMailSenderTests {
assertThat(sender.transport.getSentMessages()).hasSize(2); assertThat(sender.transport.getSentMessages()).hasSize(2);
MimeMessage sentMessage1 = sender.transport.getSentMessage(0); MimeMessage sentMessage1 = sender.transport.getSentMessage(0);
List<Address> tos1 = Arrays.asList(sentMessage1.getRecipients(Message.RecipientType.TO));
assertThat(tos1).hasSize(1);
assertThat(((InternetAddress) tos1.get(0)).getAddress()).isEqualTo("he@mail.org");
MimeMessage sentMessage2 = sender.transport.getSentMessage(1); MimeMessage sentMessage2 = sender.transport.getSentMessage(1);
List<Address> tos2 = Arrays.asList(sentMessage2.getRecipients(Message.RecipientType.TO)); assertThat(addresses(sentMessage1.getRecipients(RecipientType.TO))).containsExactly("he@mail.org");
assertThat(tos2).hasSize(1); assertThat(addresses(sentMessage2.getRecipients(RecipientType.TO))).containsExactly("she@mail.org");
assertThat(((InternetAddress) tos2.get(0)).getAddress()).isEqualTo("she@mail.org");
} }
@Test @Test
public void javaMailSenderWithMimeMessage() throws MessagingException { void javaMailSenderWithMimeMessage() throws Exception {
MockJavaMailSender sender = new MockJavaMailSender();
sender.setHost("host"); sender.setHost("host");
sender.setUsername("username"); sender.setUsername("username");
sender.setPassword("password"); sender.setPassword("password");
MimeMessage mimeMessage = sender.createMimeMessage(); MimeMessage mimeMessage = sender.createMimeMessage();
mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress("you@mail.org")); mimeMessage.setRecipient(RecipientType.TO, new InternetAddress("you@mail.org"));
sender.send(mimeMessage); sender.send(mimeMessage);
assertThat(sender.transport.getConnectedHost()).isEqualTo("host"); assertThat(sender.transport.getConnectedHost()).isEqualTo("host");
assertThat(sender.transport.getConnectedUsername()).isEqualTo("username"); assertThat(sender.transport.getConnectedUsername()).isEqualTo("username");
assertThat(sender.transport.getConnectedPassword()).isEqualTo("password"); assertThat(sender.transport.getConnectedPassword()).isEqualTo("password");
assertThat(sender.transport.isCloseCalled()).isTrue(); assertThat(sender.transport.isCloseCalled()).isTrue();
assertThat(sender.transport.getSentMessages()).hasSize(1); assertThat(sender.transport.getSentMessages()).containsExactly(mimeMessage);
assertThat(sender.transport.getSentMessage(0)).isEqualTo(mimeMessage);
} }
@Test @Test
public void javaMailSenderWithMimeMessages() throws MessagingException { void javaMailSenderWithMimeMessages() throws Exception {
MockJavaMailSender sender = new MockJavaMailSender();
sender.setHost("host"); sender.setHost("host");
sender.setUsername("username"); sender.setUsername("username");
sender.setPassword("password"); sender.setPassword("password");
MimeMessage mimeMessage1 = sender.createMimeMessage(); MimeMessage mimeMessage1 = sender.createMimeMessage();
mimeMessage1.setRecipient(Message.RecipientType.TO, new InternetAddress("he@mail.org")); mimeMessage1.setRecipient(RecipientType.TO, new InternetAddress("he@mail.org"));
MimeMessage mimeMessage2 = sender.createMimeMessage(); MimeMessage mimeMessage2 = sender.createMimeMessage();
mimeMessage2.setRecipient(Message.RecipientType.TO, new InternetAddress("she@mail.org")); mimeMessage2.setRecipient(RecipientType.TO, new InternetAddress("she@mail.org"));
sender.send(mimeMessage1, mimeMessage2); sender.send(mimeMessage1, mimeMessage2);
assertThat(sender.transport.getConnectedHost()).isEqualTo("host"); assertThat(sender.transport.getConnectedHost()).isEqualTo("host");
assertThat(sender.transport.getConnectedUsername()).isEqualTo("username"); assertThat(sender.transport.getConnectedUsername()).isEqualTo("username");
assertThat(sender.transport.getConnectedPassword()).isEqualTo("password"); assertThat(sender.transport.getConnectedPassword()).isEqualTo("password");
assertThat(sender.transport.isCloseCalled()).isTrue(); assertThat(sender.transport.isCloseCalled()).isTrue();
assertThat(sender.transport.getSentMessages()).hasSize(2); assertThat(sender.transport.getSentMessages()).containsExactly(mimeMessage1, mimeMessage2);
assertThat(sender.transport.getSentMessage(0)).isEqualTo(mimeMessage1);
assertThat(sender.transport.getSentMessage(1)).isEqualTo(mimeMessage2);
} }
@Test @Test
public void javaMailSenderWithMimeMessagePreparator() { void javaMailSenderWithMimeMessagePreparator() {
MockJavaMailSender sender = new MockJavaMailSender();
sender.setHost("host"); sender.setHost("host");
sender.setUsername("username"); sender.setUsername("username");
sender.setPassword("password"); sender.setPassword("password");
@ -182,7 +166,7 @@ public class JavaMailSenderTests {
final List<Message> messages = new ArrayList<>(); final List<Message> messages = new ArrayList<>();
MimeMessagePreparator preparator = mimeMessage -> { MimeMessagePreparator preparator = mimeMessage -> {
mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress("you@mail.org")); mimeMessage.setRecipient(RecipientType.TO, new InternetAddress("you@mail.org"));
messages.add(mimeMessage); messages.add(mimeMessage);
}; };
sender.send(preparator); sender.send(preparator);
@ -191,13 +175,11 @@ public class JavaMailSenderTests {
assertThat(sender.transport.getConnectedUsername()).isEqualTo("username"); assertThat(sender.transport.getConnectedUsername()).isEqualTo("username");
assertThat(sender.transport.getConnectedPassword()).isEqualTo("password"); assertThat(sender.transport.getConnectedPassword()).isEqualTo("password");
assertThat(sender.transport.isCloseCalled()).isTrue(); assertThat(sender.transport.isCloseCalled()).isTrue();
assertThat(sender.transport.getSentMessages()).hasSize(1); assertThat(sender.transport.getSentMessages()).containsExactly(messages.get(0));
assertThat(sender.transport.getSentMessage(0)).isEqualTo(messages.get(0));
} }
@Test @Test
public void javaMailSenderWithMimeMessagePreparators() { void javaMailSenderWithMimeMessagePreparators() {
MockJavaMailSender sender = new MockJavaMailSender();
sender.setHost("host"); sender.setHost("host");
sender.setUsername("username"); sender.setUsername("username");
sender.setPassword("password"); sender.setPassword("password");
@ -205,11 +187,11 @@ public class JavaMailSenderTests {
final List<Message> messages = new ArrayList<>(); final List<Message> messages = new ArrayList<>();
MimeMessagePreparator preparator1 = mimeMessage -> { MimeMessagePreparator preparator1 = mimeMessage -> {
mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress("he@mail.org")); mimeMessage.setRecipient(RecipientType.TO, new InternetAddress("he@mail.org"));
messages.add(mimeMessage); messages.add(mimeMessage);
}; };
MimeMessagePreparator preparator2 = mimeMessage -> { MimeMessagePreparator preparator2 = mimeMessage -> {
mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress("she@mail.org")); mimeMessage.setRecipient(RecipientType.TO, new InternetAddress("she@mail.org"));
messages.add(mimeMessage); messages.add(mimeMessage);
}; };
sender.send(preparator1, preparator2); sender.send(preparator1, preparator2);
@ -218,22 +200,19 @@ public class JavaMailSenderTests {
assertThat(sender.transport.getConnectedUsername()).isEqualTo("username"); assertThat(sender.transport.getConnectedUsername()).isEqualTo("username");
assertThat(sender.transport.getConnectedPassword()).isEqualTo("password"); assertThat(sender.transport.getConnectedPassword()).isEqualTo("password");
assertThat(sender.transport.isCloseCalled()).isTrue(); assertThat(sender.transport.isCloseCalled()).isTrue();
assertThat(sender.transport.getSentMessages()).hasSize(2); assertThat(messages).hasSize(2);
assertThat(sender.transport.getSentMessage(0)).isEqualTo(messages.get(0)); assertThat(sender.transport.getSentMessages()).containsExactlyElementsOf(messages);
assertThat(sender.transport.getSentMessage(1)).isEqualTo(messages.get(1));
} }
@Test @Test
public void javaMailSenderWithMimeMessageHelper() throws MessagingException { void javaMailSenderWithMimeMessageHelper() throws Exception {
MockJavaMailSender sender = new MockJavaMailSender();
sender.setHost("host"); sender.setHost("host");
sender.setUsername("username"); sender.setUsername("username");
sender.setPassword("password"); sender.setPassword("password");
MimeMessageHelper message = new MimeMessageHelper(sender.createMimeMessage()); MimeMessageHelper message = new MimeMessageHelper(sender.createMimeMessage());
assertThat(message.getEncoding()).isNull(); assertThat(message.getEncoding()).isNull();
boolean condition = message.getFileTypeMap() instanceof ConfigurableMimeFileTypeMap; assertThat(message.getFileTypeMap()).isInstanceOf(ConfigurableMimeFileTypeMap.class);
assertThat(condition).isTrue();
message.setTo("you@mail.org"); message.setTo("you@mail.org");
sender.send(message.getMimeMessage()); sender.send(message.getMimeMessage());
@ -242,13 +221,11 @@ public class JavaMailSenderTests {
assertThat(sender.transport.getConnectedUsername()).isEqualTo("username"); assertThat(sender.transport.getConnectedUsername()).isEqualTo("username");
assertThat(sender.transport.getConnectedPassword()).isEqualTo("password"); assertThat(sender.transport.getConnectedPassword()).isEqualTo("password");
assertThat(sender.transport.isCloseCalled()).isTrue(); assertThat(sender.transport.isCloseCalled()).isTrue();
assertThat(sender.transport.getSentMessages()).hasSize(1); assertThat(sender.transport.getSentMessages()).containsExactly(message.getMimeMessage());
assertThat(sender.transport.getSentMessage(0)).isEqualTo(message.getMimeMessage());
} }
@Test @Test
public void javaMailSenderWithMimeMessageHelperAndSpecificEncoding() throws MessagingException { void javaMailSenderWithMimeMessageHelperAndSpecificEncoding() throws Exception {
MockJavaMailSender sender = new MockJavaMailSender();
sender.setHost("host"); sender.setHost("host");
sender.setUsername("username"); sender.setUsername("username");
sender.setPassword("password"); sender.setPassword("password");
@ -266,13 +243,11 @@ public class JavaMailSenderTests {
assertThat(sender.transport.getConnectedUsername()).isEqualTo("username"); assertThat(sender.transport.getConnectedUsername()).isEqualTo("username");
assertThat(sender.transport.getConnectedPassword()).isEqualTo("password"); assertThat(sender.transport.getConnectedPassword()).isEqualTo("password");
assertThat(sender.transport.isCloseCalled()).isTrue(); assertThat(sender.transport.isCloseCalled()).isTrue();
assertThat(sender.transport.getSentMessages()).hasSize(1); assertThat(sender.transport.getSentMessages()).containsExactly(message.getMimeMessage());
assertThat(sender.transport.getSentMessage(0)).isEqualTo(message.getMimeMessage());
} }
@Test @Test
public void javaMailSenderWithMimeMessageHelperAndDefaultEncoding() throws MessagingException { void javaMailSenderWithMimeMessageHelperAndDefaultEncoding() throws Exception {
MockJavaMailSender sender = new MockJavaMailSender();
sender.setHost("host"); sender.setHost("host");
sender.setUsername("username"); sender.setUsername("username");
sender.setPassword("password"); sender.setPassword("password");
@ -291,41 +266,29 @@ public class JavaMailSenderTests {
assertThat(sender.transport.getConnectedUsername()).isEqualTo("username"); assertThat(sender.transport.getConnectedUsername()).isEqualTo("username");
assertThat(sender.transport.getConnectedPassword()).isEqualTo("password"); assertThat(sender.transport.getConnectedPassword()).isEqualTo("password");
assertThat(sender.transport.isCloseCalled()).isTrue(); assertThat(sender.transport.isCloseCalled()).isTrue();
assertThat(sender.transport.getSentMessages()).hasSize(1); assertThat(sender.transport.getSentMessages()).containsExactly(message.getMimeMessage());
assertThat(sender.transport.getSentMessage(0)).isEqualTo(message.getMimeMessage());
} }
@Test @Test
public void javaMailSenderWithParseExceptionOnSimpleMessage() { void javaMailSenderWithParseExceptionOnSimpleMessage() {
MockJavaMailSender sender = new MockJavaMailSender();
SimpleMailMessage simpleMessage = new SimpleMailMessage(); SimpleMailMessage simpleMessage = new SimpleMailMessage();
simpleMessage.setFrom(""); simpleMessage.setFrom("");
try {
sender.send(simpleMessage); assertThatExceptionOfType(MailParseException.class)
} .isThrownBy(() -> sender.send(simpleMessage))
catch (MailParseException ex) { .withCauseInstanceOf(AddressException.class);
// expected
boolean condition = ex.getCause() instanceof AddressException;
assertThat(condition).isTrue();
}
} }
@Test @Test
public void javaMailSenderWithParseExceptionOnMimeMessagePreparator() { void javaMailSenderWithParseExceptionOnMimeMessagePreparator() {
MockJavaMailSender sender = new MockJavaMailSender();
MimeMessagePreparator preparator = mimeMessage -> mimeMessage.setFrom(new InternetAddress("")); MimeMessagePreparator preparator = mimeMessage -> mimeMessage.setFrom(new InternetAddress(""));
try { assertThatExceptionOfType(MailParseException.class)
sender.send(preparator); .isThrownBy(() -> sender.send(preparator))
} .withCauseInstanceOf(AddressException.class);
catch (MailParseException ex) {
// expected
boolean condition = ex.getCause() instanceof AddressException;
assertThat(condition).isTrue();
}
} }
@Test @Test
public void javaMailSenderWithCustomSession() throws MessagingException { void javaMailSenderWithCustomSession() throws Exception {
final Session session = Session.getInstance(new Properties()); final Session session = Session.getInstance(new Properties());
MockJavaMailSender sender = new MockJavaMailSender() { MockJavaMailSender sender = new MockJavaMailSender() {
@Override @Override
@ -341,7 +304,7 @@ public class JavaMailSenderTests {
MimeMessage mimeMessage = sender.createMimeMessage(); MimeMessage mimeMessage = sender.createMimeMessage();
mimeMessage.setSubject("custom"); mimeMessage.setSubject("custom");
mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress("you@mail.org")); mimeMessage.setRecipient(RecipientType.TO, new InternetAddress("you@mail.org"));
mimeMessage.setSentDate(new GregorianCalendar(2005, 3, 1).getTime()); mimeMessage.setSentDate(new GregorianCalendar(2005, 3, 1).getTime());
sender.send(mimeMessage); sender.send(mimeMessage);
@ -349,12 +312,11 @@ public class JavaMailSenderTests {
assertThat(sender.transport.getConnectedUsername()).isEqualTo("username"); assertThat(sender.transport.getConnectedUsername()).isEqualTo("username");
assertThat(sender.transport.getConnectedPassword()).isEqualTo("password"); assertThat(sender.transport.getConnectedPassword()).isEqualTo("password");
assertThat(sender.transport.isCloseCalled()).isTrue(); assertThat(sender.transport.isCloseCalled()).isTrue();
assertThat(sender.transport.getSentMessages()).hasSize(1); assertThat(sender.transport.getSentMessages()).containsExactly(mimeMessage);
assertThat(sender.transport.getSentMessage(0)).isEqualTo(mimeMessage);
} }
@Test @Test
public void javaMailProperties() throws MessagingException { void javaMailProperties() throws Exception {
Properties props = new Properties(); Properties props = new Properties();
props.setProperty("bogusKey", "bogusValue"); props.setProperty("bogusKey", "bogusValue");
MockJavaMailSender sender = new MockJavaMailSender() { MockJavaMailSender sender = new MockJavaMailSender() {
@ -370,44 +332,40 @@ public class JavaMailSenderTests {
sender.setPassword("password"); sender.setPassword("password");
MimeMessage mimeMessage = sender.createMimeMessage(); MimeMessage mimeMessage = sender.createMimeMessage();
mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress("you@mail.org")); mimeMessage.setRecipient(RecipientType.TO, new InternetAddress("you@mail.org"));
sender.send(mimeMessage); sender.send(mimeMessage);
assertThat(sender.transport.getConnectedHost()).isEqualTo("host"); assertThat(sender.transport.getConnectedHost()).isEqualTo("host");
assertThat(sender.transport.getConnectedUsername()).isEqualTo("username"); assertThat(sender.transport.getConnectedUsername()).isEqualTo("username");
assertThat(sender.transport.getConnectedPassword()).isEqualTo("password"); assertThat(sender.transport.getConnectedPassword()).isEqualTo("password");
assertThat(sender.transport.isCloseCalled()).isTrue(); assertThat(sender.transport.isCloseCalled()).isTrue();
assertThat(sender.transport.getSentMessages()).hasSize(1); assertThat(sender.transport.getSentMessages()).containsExactly(mimeMessage);
assertThat(sender.transport.getSentMessage(0)).isEqualTo(mimeMessage);
} }
@Test @Test
public void failedMailServerConnect() { void failedMailServerConnect() {
MockJavaMailSender sender = new MockJavaMailSender();
sender.setHost(null); sender.setHost(null);
sender.setUsername("username"); sender.setUsername("username");
sender.setPassword("password"); sender.setPassword("password");
SimpleMailMessage simpleMessage1 = new SimpleMailMessage(); SimpleMailMessage simpleMessage1 = new SimpleMailMessage();
assertThatExceptionOfType(MailSendException.class).isThrownBy(() -> assertThatExceptionOfType(MailSendException.class)
sender.send(simpleMessage1)) .isThrownBy(() -> sender.send(simpleMessage1))
.satisfies(ex -> assertThat(ex.getFailedMessages()).containsExactly(entry(simpleMessage1, (Exception) ex.getCause()))); .satisfies(ex -> assertThat(ex.getFailedMessages()).containsExactly(entry(simpleMessage1, (Exception) ex.getCause())));
} }
@Test @Test
public void failedMailServerClose() { void failedMailServerClose() {
MockJavaMailSender sender = new MockJavaMailSender();
sender.setHost(""); sender.setHost("");
sender.setUsername("username"); sender.setUsername("username");
sender.setPassword("password"); sender.setPassword("password");
SimpleMailMessage simpleMessage1 = new SimpleMailMessage(); SimpleMailMessage simpleMessage1 = new SimpleMailMessage();
assertThatExceptionOfType(MailSendException.class).isThrownBy(() -> assertThatExceptionOfType(MailSendException.class)
sender.send(simpleMessage1)) .isThrownBy(() -> sender.send(simpleMessage1))
.satisfies(ex -> assertThat(ex.getFailedMessages()).isEmpty()); .satisfies(ex -> assertThat(ex.getFailedMessages()).isEmpty());
} }
@Test @Test
public void failedSimpleMessage() throws MessagingException { void failedSimpleMessage() throws Exception {
MockJavaMailSender sender = new MockJavaMailSender();
sender.setHost("host"); sender.setHost("host");
sender.setUsername("username"); sender.setUsername("username");
sender.setPassword("password"); sender.setPassword("password");
@ -422,68 +380,60 @@ public class JavaMailSenderTests {
sender.send(simpleMessage1, simpleMessage2); sender.send(simpleMessage1, simpleMessage2);
} }
catch (MailSendException ex) { catch (MailSendException ex) {
ex.printStackTrace();
assertThat(sender.transport.getConnectedHost()).isEqualTo("host"); assertThat(sender.transport.getConnectedHost()).isEqualTo("host");
assertThat(sender.transport.getConnectedUsername()).isEqualTo("username"); assertThat(sender.transport.getConnectedUsername()).isEqualTo("username");
assertThat(sender.transport.getConnectedPassword()).isEqualTo("password"); assertThat(sender.transport.getConnectedPassword()).isEqualTo("password");
assertThat(sender.transport.isCloseCalled()).isTrue(); assertThat(sender.transport.isCloseCalled()).isTrue();
assertThat(sender.transport.getSentMessages()).hasSize(1); assertThat(sender.transport.getSentMessages()).hasSize(1);
assertThat(sender.transport.getSentMessage(0).getAllRecipients()[0]).isEqualTo(new InternetAddress("she@mail.org")); assertThat(sender.transport.getSentMessage(0).getAllRecipients()[0]).isEqualTo(new InternetAddress("she@mail.org"));
assertThat(ex.getFailedMessages()).hasSize(1); assertThat(ex.getFailedMessages().keySet()).containsExactly(simpleMessage1);
assertThat(ex.getFailedMessages().keySet().iterator().next()).isEqualTo(simpleMessage1); Exception subEx = ex.getFailedMessages().values().iterator().next();
Object subEx = ex.getFailedMessages().values().iterator().next(); assertThat(subEx).isInstanceOf(MessagingException.class).hasMessage("failed");
boolean condition = subEx instanceof MessagingException;
assertThat(condition).isTrue();
assertThat(((MessagingException) subEx).getMessage()).isEqualTo("failed");
} }
} }
@Test @Test
public void failedMimeMessage() throws MessagingException { void failedMimeMessage() throws Exception {
MockJavaMailSender sender = new MockJavaMailSender();
sender.setHost("host"); sender.setHost("host");
sender.setUsername("username"); sender.setUsername("username");
sender.setPassword("password"); sender.setPassword("password");
MimeMessage mimeMessage1 = sender.createMimeMessage(); MimeMessage mimeMessage1 = sender.createMimeMessage();
mimeMessage1.setRecipient(Message.RecipientType.TO, new InternetAddress("he@mail.org")); mimeMessage1.setRecipient(RecipientType.TO, new InternetAddress("he@mail.org"));
mimeMessage1.setSubject("fail"); mimeMessage1.setSubject("fail");
MimeMessage mimeMessage2 = sender.createMimeMessage(); MimeMessage mimeMessage2 = sender.createMimeMessage();
mimeMessage2.setRecipient(Message.RecipientType.TO, new InternetAddress("she@mail.org")); mimeMessage2.setRecipient(RecipientType.TO, new InternetAddress("she@mail.org"));
try { try {
sender.send(mimeMessage1, mimeMessage2); sender.send(mimeMessage1, mimeMessage2);
} }
catch (MailSendException ex) { catch (MailSendException ex) {
ex.printStackTrace();
assertThat(sender.transport.getConnectedHost()).isEqualTo("host"); assertThat(sender.transport.getConnectedHost()).isEqualTo("host");
assertThat(sender.transport.getConnectedUsername()).isEqualTo("username"); assertThat(sender.transport.getConnectedUsername()).isEqualTo("username");
assertThat(sender.transport.getConnectedPassword()).isEqualTo("password"); assertThat(sender.transport.getConnectedPassword()).isEqualTo("password");
assertThat(sender.transport.isCloseCalled()).isTrue(); assertThat(sender.transport.isCloseCalled()).isTrue();
assertThat(sender.transport.getSentMessages()).hasSize(1); assertThat(sender.transport.getSentMessages()).containsExactly(mimeMessage2);
assertThat(sender.transport.getSentMessage(0)).isEqualTo(mimeMessage2); assertThat(ex.getFailedMessages().keySet()).containsExactly(mimeMessage1);
assertThat(ex.getFailedMessages()).hasSize(1); Exception subEx = ex.getFailedMessages().values().iterator().next();
assertThat(ex.getFailedMessages().keySet().iterator().next()).isEqualTo(mimeMessage1); assertThat(subEx).isInstanceOf(MessagingException.class).hasMessage("failed");
Object subEx = ex.getFailedMessages().values().iterator().next();
boolean condition = subEx instanceof MessagingException;
assertThat(condition).isTrue();
assertThat(((MessagingException) subEx).getMessage()).isEqualTo("failed");
} }
} }
@Test @Test
public void testConnection() throws MessagingException { void testConnection() {
MockJavaMailSender sender = new MockJavaMailSender();
sender.setHost("host"); sender.setHost("host");
sender.testConnection(); assertThatNoException().isThrownBy(sender::testConnection);
} }
@Test @Test
public void testConnectionWithFailure() throws MessagingException { void testConnectionWithFailure() {
MockJavaMailSender sender = new MockJavaMailSender();
sender.setHost(null); sender.setHost(null);
assertThatExceptionOfType(MessagingException.class).isThrownBy( assertThatExceptionOfType(MessagingException.class).isThrownBy(sender::testConnection);
sender::testConnection); }
private static Stream<String> addresses(Address[] addresses) {
return Arrays.stream(addresses).map(InternetAddress.class::cast).map(InternetAddress::getAddress);
} }