// Copyright � 2006-2007 ASERT. Released under the Canoo Webtest license.
package com.canoo.webtest.plugins.emailtest;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import com.canoo.webtest.steps.Step;
/**
* Test for {@link EmailStoreMessageCount}.
*
* @author Paul King, ASERT
*/
public class EmailStoreMessageCountTest extends BaseEmailTestCase
{
private static final String PROPERTY_NAME = "dummyPropertyName";
private static final String DEFAULT_FROM_ADDRESS = "dummyFrom@host";
private static final String SELECTED_FROM_ADDRESS = "selectedFrom@host";
private static final String DEFAULT_SUBJECT = "default dummy subject";
private static final String SELECTED_SUBJECT = "selected subject";
private static final String REGEX_SUBJECT = "/sel.*ject/";
private static final String DEFAULT_REPLYTO_ADDRESS = "dummyReplyTo@host";
private static final String SELECTED_REPLYTO_ADDRESS1 = "dummyReplyTo@host";
private static final String SELECTED_REPLYTO_ADDRESS2 = "selectedReplyTo@host";
private static final String SELECTED_REPLYTO_ADDRESSES =
SELECTED_REPLYTO_ADDRESS1 + "," + SELECTED_REPLYTO_ADDRESS2;
private static final String DEFAULT_CC_ADDRESS = "dummyCc@host";
private static final String SELECTED_CC_ADDRESS = "selectedCc@host";
protected Step createStep() {
return new EmailStoreMessageCount();
}
public void testNoHeaders() throws Exception {
final EmailStoreMessageCount step = (EmailStoreMessageCount) getStep();
step.setProperty(PROPERTY_NAME);
final EmailHelper helper = (EmailHelper) mock(EmailHelper.class, "helper");
step.setHelper(helper);
final boolean deleteOnExit = false;
final int numMessages = 4;
setUpGetMessagesExpectations(step, helper, numMessages);
setUpMessageOperationFinaliseExpectations(helper, deleteOnExit);
startVerification();
executeStep(step);
assertEquals(numMessages, Integer.parseInt(step.getWebtestProperty(PROPERTY_NAME)));
}
public void testHeaders1() throws Exception {
final EmailStoreMessageCount step = (EmailStoreMessageCount) getStep();
step.setProperty(PROPERTY_NAME);
step.setFrom(SELECTED_FROM_ADDRESS);
step.setSubject(SELECTED_SUBJECT);
step.setReplyTo(SELECTED_REPLYTO_ADDRESSES);
step.setCc(SELECTED_CC_ADDRESS);
final EmailHelper helper = (EmailHelper) mock(EmailHelper.class, "helper");
step.setHelper(helper);
final boolean deleteOnExit = false;
final int numMessages = 4;
final boolean[] fromFlags = {false, true, true, true};
final boolean[] subjectFlags = {false, false, true, true};
final boolean[] replyToFlags = {false, false, false, true};
final boolean[] ccFlags = {false, false, false, true};
final Message[] messages = setUpGetMessagesExpectations(step, helper, numMessages);
setUpMessageHeaderExpectations(messages, fromFlags, subjectFlags,
replyToFlags, ccFlags);
setUpMessageOperationFinaliseExpectations(helper, deleteOnExit);
startVerification();
executeStep(step);
assertEquals(1, Integer.parseInt(step.getWebtestProperty(PROPERTY_NAME)));
}
public void testHeaders2() throws Exception {
final EmailStoreMessageCount step = (EmailStoreMessageCount) getStep();
step.setProperty(PROPERTY_NAME);
step.setSubject(REGEX_SUBJECT);
step.setReplyTo(SELECTED_REPLYTO_ADDRESSES);
step.setCc(SELECTED_CC_ADDRESS);
final EmailHelper helper = (EmailHelper) mock(EmailHelper.class, "helper");
step.setHelper(helper);
final boolean deleteOnExit = false;
final int numMessages = 4;
final boolean[] fromFlags = {true, true, true, true};
final boolean[] subjectFlags = {false, false, true, true};
final boolean[] replyToFlags = {false, false, false, true};
final boolean[] ccFlags = {false, false, false, false};
final Message[] messages = setUpGetMessagesExpectations(step, helper, numMessages);
setUpMessageHeaderExpectations(messages, fromFlags, subjectFlags,
replyToFlags, ccFlags);
setUpMessageOperationFinaliseExpectations(helper, deleteOnExit);
startVerification();
executeStep(step);
assertEquals(0, Integer.parseInt(step.getWebtestProperty(PROPERTY_NAME)));
}
private void setUpMessageHeaderExpectations(final Message[] messages, final boolean[] fromFlags,
final boolean[] subjectFlags, final boolean[] replyToFlags, final boolean[] ccFlags
) throws MessagingException {
for (int i = 0; i < messages.length; i++) {
messages[i].getFrom();
if (!fromFlags[i]) {
modify().returnValue(new Address[]{new InternetAddress(DEFAULT_FROM_ADDRESS)});
} else {
modify().returnValue(new Address[]{new InternetAddress(SELECTED_FROM_ADDRESS)});
messages[i].getSubject();
if (!subjectFlags[i]) {
modify().returnValue(DEFAULT_SUBJECT);
} else {
modify().returnValue(SELECTED_SUBJECT);
messages[i].getReplyTo();
if (!replyToFlags[i]) {
modify().returnValue(new Address[]{new InternetAddress(DEFAULT_REPLYTO_ADDRESS)});
} else {
modify().returnValue(new Address[]{
new InternetAddress(SELECTED_REPLYTO_ADDRESS1),
new InternetAddress(SELECTED_REPLYTO_ADDRESS2)});
messages[i].getRecipients(MimeMessage.RecipientType.CC);
if (!ccFlags[i]) {
modify().returnValue(new Address[]{new InternetAddress(DEFAULT_CC_ADDRESS)});
} else {
modify().returnValue(new Address[]{new InternetAddress(SELECTED_CC_ADDRESS)});
messages[i].getRecipients(MimeMessage.RecipientType.TO);
modify().returnValue(new Address[]{new InternetAddress("dummyTo@host")});
}
}
}
}
}
}
}