diff --git a/CHANGELOG b/CHANGELOG index 684456c..6e97675 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,11 @@ CHANGELOG ========= +0.3.0 +------ + +* Add support for nested multi-part emails [jonjo-manywho] [#1] + 0.2.0 ------ diff --git a/checkstyle.xml b/checkstyle.xml index 9706c65..ba1e682 100644 --- a/checkstyle.xml +++ b/checkstyle.xml @@ -78,15 +78,19 @@ - - - + + + + + - + + + - + @@ -113,12 +117,7 @@ - - - - - - + @@ -157,7 +156,11 @@ - + + + + + @@ -183,6 +186,7 @@ - + + diff --git a/pom.xml b/pom.xml index d6d8f01..a6080f7 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 net.kemitix wiser-assertions - 0.2.0 + 0.3.0 jar wiser-assertions @@ -30,8 +30,8 @@ net.kemitix - kemitix-spring-parent - 1.2.1 + kemitix-parent + 0.6.1 @@ -48,13 +48,20 @@ junit junit + 4.12 test org.mockito mockito-core + 1.10.19 + test + + + org.codemonkey.simplejavamail + simple-java-mail + 2.5.1 test - jar 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 891f608..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. @@ -209,7 +164,8 @@ public class WiserAssertionsTest { //given final String fragment = "foo"; //when - sendMimeMultipartMessage("from", "to", "subject " + fragment + " tail", "body"); + sendMimeMultipartMessage( + "from", "to", "subject " + fragment + " tail", "body"); //then getAssertions().withSubjectContains(fragment); }