package fr.sii.ogham.assertion.email; import static fr.sii.ogham.assertion.AssertionHelper.assertThat; import java.util.Collection; import java.util.List; import javax.mail.Message; import org.hamcrest.Matcher; public class ReceivedEmailsAssert { /** * List of received messages */ private final List<? extends Message> actual; public ReceivedEmailsAssert(List<? extends Message> actual) { this.actual = actual; } /** * Access fluent API to write assertions on a particular received message. * * If you want to make assertions on several messages, you may prefer using: * * <pre> * .receivedMessages().message(0) * .subject(is("foobar")) * .and() * .message(1) * .subject(is("bar")) * </pre> * * @param index * the index of the received message * @return the fluent API for assertions on the particular message */ public EmailAssert<ReceivedEmailsAssert> receivedMessage(int index) { return new EmailAssert<ReceivedEmailsAssert>(actual.get(index), this); } /** * Fluent API to write assertions on received messages. * * You can write assertions for all messages or a particular message. * * For example, for writing assertion on a single message, you can write: * * <pre> * .receivedMessages().message(0) * .subject(is("foobar")) * </pre> * * For writing assertions that are applied on every received message, you * can write: * * <pre> * .receivedMessages().forEach() * .subject(is("foobar")) * </pre> * * Will check that subject of every message is "foobar". * * <p> * You can use this method to factorize several assertions on a message and * then make dedicated assertions on some messages: * * <pre> * .receivedMessages().forEach() * .subject(is("foobar")) * .and() * .message(0) * .body().contentAsString(is("toto")) * </pre> * * Will check that subject of every message is "foobar" and that body of * first received message is "toto". * * @return the fluent API for assertions on messages */ public EmailsAssert<ReceivedEmailsAssert> receivedMessages() { return new EmailsAssert<ReceivedEmailsAssert>(actual, this); } public <E extends Message> EmailsAssert<ReceivedEmailsAssert> receivedMessages(Matcher<Collection<? extends Message>> matcher) { assertThat(actual, matcher); return receivedMessages(); } }