diff --git a/pom.xml b/pom.xml index e5c43e1..17c8d80 100644 --- a/pom.xml +++ b/pom.xml @@ -57,6 +57,12 @@ 1.10.19 test + + org.codemonkey.simplejavamail + simple-java-mail + 2.5.1 + test + diff --git a/src/main/java/net/kemitix/wiser/assertions/WiserAssertions.java b/src/main/java/net/kemitix/wiser/assertions/WiserAssertions.java index a2fc2b6..07d0c56 100644 --- a/src/main/java/net/kemitix/wiser/assertions/WiserAssertions.java +++ b/src/main/java/net/kemitix/wiser/assertions/WiserAssertions.java @@ -269,7 +269,12 @@ public final class WiserAssertions { throws MessagingException, IOException { final StringBuilder sb = new StringBuilder(); for (int i = 0; i < mimeMultipart.getCount(); i++) { - sb.append(mimeMultipart.getBodyPart(i).getContent()); + Object content = mimeMultipart.getBodyPart(i).getContent(); + if (content instanceof MimeMultipart) { + sb.append(getMimeMultipartAsString((MimeMultipart) content)); + } else { + sb.append(content); + } } return sb.toString(); } diff --git a/src/test/java/net/kemitix/wiser/assertions/AbstractWiserTest.java b/src/test/java/net/kemitix/wiser/assertions/AbstractWiserTest.java new file mode 100644 index 0000000..675bbfa --- /dev/null +++ b/src/test/java/net/kemitix/wiser/assertions/AbstractWiserTest.java @@ -0,0 +1,64 @@ +package net.kemitix.wiser.assertions; + +import org.junit.After; +import org.junit.Before; +import org.subethamail.wiser.Wiser; + +import java.util.Properties; + +import javax.mail.Session; + +/** + * Abstract base class for wiser tests. + * + * @author pcampbell + */ +public abstract class AbstractWiserTest { + + /** + * Test mail server port. + */ + protected static final int PORT = 12345; + + /** + * Test mail server. + */ + private Wiser wiser; + + /** + * Prepare each test. + */ + @Before + @SuppressWarnings("magicnumber") + public void setUp() { + wiser = new Wiser(PORT); + wiser.start(); + } + + /** + * Clean up after each test. + */ + @After + public void tearDown() { + wiser.stop(); + } + + /** + * Instantiates the WiserAssertions. + * + * @return the wiser assertions + */ + protected WiserAssertions getAssertions() { + return WiserAssertions.assertReceivedMessage(wiser); + } + + protected Session getSession() { + Properties properties = new Properties(); + properties.setProperty("mail.transport.protocol", "smtp"); + properties.setProperty("mail.smtp.host", "localhost"); + properties.setProperty("mail.smtp.port", "" + WiserAssertionsTest.PORT); + Session session = Session.getDefaultInstance(properties); + return session; + } + +} diff --git a/src/test/java/net/kemitix/wiser/assertions/Issue1Test.java b/src/test/java/net/kemitix/wiser/assertions/Issue1Test.java new file mode 100644 index 0000000..76cc6bb --- /dev/null +++ b/src/test/java/net/kemitix/wiser/assertions/Issue1Test.java @@ -0,0 +1,37 @@ +package net.kemitix.wiser.assertions; + +import org.codemonkey.simplejavamail.Email; +import org.codemonkey.simplejavamail.Mailer; +import org.junit.Test; + +import javax.mail.Message; + +/** + * Regression test for issue #1. + * + * @see https://github.com/kemitix/wiser-assertions/issues/1 + * @author pcampbell + */ +public class Issue1Test extends AbstractWiserTest { + + /** + * Test {@link WiserAssertions#withContentContains(String)} where the nested + * multi-part message contains the expected text. + */ + @Test + public void shouldParseNestedMultiPartEmails() { + //given + final Email email = new Email(); + email.addRecipient("Carl", "carl@b.com", + Message.RecipientType.TO); + email.setFromAddress("Bob", "bob@a.com"); + email.setSubject("Subject"); + email.setText("Hi Carl,\n\nA new message was just posted."); + Mailer mailer = new Mailer(getSession()); + //when + mailer.sendMail(email); + //then + getAssertions().withContentContains("Hi Carl"); + } + +} diff --git a/src/test/java/net/kemitix/wiser/assertions/WiserAssertionsTest.java b/src/test/java/net/kemitix/wiser/assertions/WiserAssertionsTest.java index ce9e22c..83d52f1 100644 --- a/src/test/java/net/kemitix/wiser/assertions/WiserAssertionsTest.java +++ b/src/test/java/net/kemitix/wiser/assertions/WiserAssertionsTest.java @@ -1,21 +1,17 @@ package net.kemitix.wiser.assertions; -import org.junit.After; -import org.junit.Before; import org.junit.Test; import org.subethamail.wiser.Wiser; import static org.junit.Assert.assertNotNull; import java.io.IOException; -import java.util.Properties; import java.util.logging.Level; import java.util.logging.Logger; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; -import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; @@ -27,7 +23,7 @@ import javax.mail.internet.MimeMultipart; * * @author pcampbell */ -public class WiserAssertionsTest { +public class WiserAssertionsTest extends AbstractWiserTest { /** * Logger. @@ -35,34 +31,6 @@ public class WiserAssertionsTest { private static final Logger LOG = Logger.getLogger(WiserAssertionsTest.class.getName()); - /** - * Test mail server. - */ - private Wiser wiser; - - /** - * Prepare each test. - */ - @Before - @SuppressWarnings("magicnumber") - public void setUp() { - wiser = new Wiser(PORT); - wiser.start(); - } - - /** - * Test mail server port. - */ - private static final int PORT = 12345; - - /** - * Clean up after each test. - */ - @After - public void tearDown() { - wiser.stop(); - } - /** * Sends a mime multipart message to the Wiser server. * @@ -76,12 +44,8 @@ public class WiserAssertionsTest { final String to, final String subject, final String body) { - Properties properties = new Properties(); - properties.setProperty("mail.smtp.host", "localhost"); - properties.setProperty("mail.smtp.port", "" + PORT); - Session session = Session.getDefaultInstance(properties); try { - MimeMessage message = new MimeMessage(session); + MimeMessage message = new MimeMessage(getSession()); message.setFrom(new InternetAddress(from)); message.setRecipients(Message.RecipientType.TO, to); message.setSubject(subject, "UTF-8"); @@ -96,15 +60,6 @@ public class WiserAssertionsTest { } } - /** - * Instantiates the WiserAssertions. - * - * @return the wiser assertions - */ - private WiserAssertions getAssertions() { - return WiserAssertions.assertReceivedMessage(wiser); - } - /** * Test {@link WiserAssertions#withContent(java.lang.String)} where the * content of the email matches.