Support MimeMultipart messages when checking content

Signed-off-by: Paul Campbell <pcampbell@kemitix.net>
This commit is contained in:
Paul Campbell 2015-04-08 14:07:17 +01:00
parent d2f623f33c
commit f2a07079b8

View file

@ -1,10 +1,15 @@
package net.kemitix.wiser.assertions; package net.kemitix.wiser.assertions;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.util.List; import java.util.List;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.function.Supplier; import java.util.function.Supplier;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import org.subethamail.wiser.Wiser; import org.subethamail.wiser.Wiser;
import org.subethamail.wiser.WiserMessage; import org.subethamail.wiser.WiserMessage;
@ -53,7 +58,7 @@ public class WiserAssertions {
public WiserAssertions withContent(String content) { public WiserAssertions withContent(String content) {
findFirstOrElseThrow(m -> { findFirstOrElseThrow(m -> {
ThrowingSupplier<String> contentAsString ThrowingSupplier<String> contentAsString
= () -> ((String) getMimeMessage(m).getContent()).trim(); = () -> getMimeMessageBody(m).trim();
return content.equals(unchecked(contentAsString)); return content.equals(unchecked(contentAsString));
}, assertionError("No message with content [{0}] found!", content)); }, assertionError("No message with content [{0}] found!", content));
return this; return this;
@ -63,13 +68,24 @@ public class WiserAssertions {
StringBuilder messageContent = new StringBuilder(); StringBuilder messageContent = new StringBuilder();
findFirstOrElseThrow((WiserMessage m) -> { findFirstOrElseThrow((WiserMessage m) -> {
ThrowingSupplier<String> contentAsString ThrowingSupplier<String> contentAsString
= () -> ((String) getMimeMessage(m).getContent()).trim(); = () -> getMimeMessageBody(m).trim();
messageContent.append(unchecked(contentAsString)); messageContent.append(unchecked(contentAsString));
return unchecked(contentAsString).contains(content); return unchecked(contentAsString).contains(content);
}, assertionError("No message with content containing [{0}] found! Was {1}", content, messageContent)); }, assertionError("No message with content containing [{0}] found! Was {1}", content, messageContent));
return this; return this;
} }
private String getMimeMessageBody(WiserMessage m) throws IOException, MessagingException {
Object content = getMimeMessage(m).getContent();
if (content instanceof MimeMessage) {
return (String) content;
}
if (content instanceof MimeMultipart) {
return getMimeMultipartAsString((MimeMultipart) content);
}
throw new RuntimeException("Unexpected MimeMessage content");
}
private void findFirstOrElseThrow(Predicate<WiserMessage> predicate, Supplier<AssertionError> exceptionSupplier) { private void findFirstOrElseThrow(Predicate<WiserMessage> predicate, Supplier<AssertionError> exceptionSupplier) {
messages.stream().filter(predicate) messages.stream().filter(predicate)
.findFirst().orElseThrow(exceptionSupplier); .findFirst().orElseThrow(exceptionSupplier);
@ -91,6 +107,12 @@ public class WiserAssertions {
} }
} }
private String getMimeMultipartAsString(MimeMultipart mimeMultipart) throws MessagingException, IOException {
OutputStream os = new ByteArrayOutputStream();
mimeMultipart.writeTo(os);
return os.toString();
}
public interface ThrowingSupplier<T> { public interface ThrowingSupplier<T> {
T get() throws Throwable; T get() throws Throwable;