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.