// Copyright � 2006-2007 ASERT. Released under the Canoo Webtest license.
package com.canoo.webtest.plugins.emailtest;
import java.io.IOException;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.BodyPart;
import com.canoo.webtest.self.TestBlock;
import com.canoo.webtest.steps.Step;
/**
* Test for {@link EmailStoreHeader}.
*
* @author Paul King, ASERT
*/
public class EmailStoreHeaderTest extends BaseEmailTestCase
{
private static final int PART_INDEX = 0;
private static final String HEADER_NAME = "dummyHeaderName";
private static final String PROPERTY_NAME = "dummyProperty";
protected Step createStep() {
return new EmailStoreHeader();
}
public void testMandatoryParams() {
final EmailStoreHeader step = (EmailStoreHeader) getStep();
step.getContext().put("EmailConfigInfo", null);
assertStepRejectsNullParam("property", new TestBlock() {
public void call() throws Throwable {
executeStep(step);
}
});
step.setProperty(PROPERTY_NAME);
assertStepRejectsNullParam("headerName", new TestBlock() {
public void call() throws Throwable {
executeStep(step);
}
});
}
public void testInvalidPartIndex() {
final EmailStoreHeader step = (EmailStoreHeader) getStep();
step.getContext().put("EmailConfigInfo", null);
step.setProperty(PROPERTY_NAME);
step.setHeaderName(HEADER_NAME);
step.setPartIndex("dummyPartIndex");
assertErrorOnExecute(step, "invalid partIndex", "Can't parse partIndex parameter with value 'dummyPartIndex' as an integer.");
}
public void testNoPartIndex() throws Exception {
final EmailStoreHeader step = (EmailStoreHeader) getStep();
step.setProperty(PROPERTY_NAME);
step.setHeaderName(HEADER_NAME);
final EmailHelper helper = (EmailHelper) mock(EmailHelper.class, "helper");
step.setHelper(helper);
final boolean deleteOnExit = false;
final Message mockMessage = setUpGetMessageExpectations(step, helper, deleteOnExit);
mockMessage.getHeader(HEADER_NAME);
modify().returnValue(new String[]{"dummyHeaderValue"});
setUpMessageOperationFinaliseExpectations(helper, deleteOnExit);
startVerification();
executeStep(step);
assertEquals("dummyHeaderValue", step.getWebtestProperty(PROPERTY_NAME));
}
public void testHasPartIndexSimpleMessage() throws Exception {
final EmailStoreHeader step = (EmailStoreHeader) getStep();
final EmailHelper helper = (EmailHelper) mock(EmailHelper.class, "helper");
final boolean deleteOnExit = false;
final Message mockMessage = preparePartIndexMessage(step, helper, deleteOnExit);
mockMessage.getContent();
modify().returnValue("dummy simple message will be a string");
setUpMessageOperationFinaliseExpectations(helper, deleteOnExit);
startVerification();
assertFailOnExecute(step, "partIndex not for simple message",
"PartIndex supplied for a non-MultiPart message.");
}
public void testHasPartIndexIoException() throws Exception {
final EmailStoreHeader step = (EmailStoreHeader) getStep();
final EmailHelper helper = (EmailHelper) mock(EmailHelper.class, "helper");
final boolean deleteOnExit = false;
final Message mockMessage = preparePartIndexMessage(step, helper, deleteOnExit);
mockMessage.getContent();
modify().throwException(new IOException("dummyIoException"));
setUpMessageOperationFinaliseExpectations(helper, deleteOnExit);
startVerification();
assertFailOnExecute(step, "fails if message exception",
"Error processing content: Error processing email message: dummyIoException");
}
public void testHasPartIndexTooLarge() throws Exception {
final EmailStoreHeader step = (EmailStoreHeader) getStep();
final EmailHelper helper = (EmailHelper) mock(EmailHelper.class, "helper");
final boolean deleteOnExit = false;
final Message mockMessage = preparePartIndexMessage(step, helper, deleteOnExit);
final Multipart mockMultipart = setUpMultipart(-1);
mockMessage.getContent();
modify().returnValue(mockMultipart);
setUpMessageOperationFinaliseExpectations(helper, deleteOnExit);
startVerification();
assertFailOnExecute(step, "fails if partIndex too large", "PartIndex too large.");
}
public void testHasPartIndexMultiPart() throws Exception {
final EmailStoreHeader step = (EmailStoreHeader) getStep();
final EmailHelper helper = (EmailHelper) mock(EmailHelper.class, "helper");
final boolean deleteOnExit = false;
final Message mockMessage = preparePartIndexMessage(step, helper, deleteOnExit);
final BodyPart mockBodyPart = (BodyPart) mock(BodyPart.class, "mockBodyPart");
mockBodyPart.getHeader(HEADER_NAME);
modify().returnValue(new String[]{"dummyHeaderValue1", "dummyHeaderValue2"});
final Multipart mockMultipart = setUpMultipart(2);
mockMultipart.getBodyPart(PART_INDEX);
modify().returnValue(mockBodyPart);
mockMessage.getContent();
modify().returnValue(mockMultipart);
setUpMessageOperationFinaliseExpectations(helper, deleteOnExit);
startVerification();
executeStep(step);
assertEquals("dummyHeaderValue1, dummyHeaderValue2", step.getWebtestProperty(PROPERTY_NAME));
}
private Multipart setUpMultipart(final int partCount) throws MessagingException {
final Multipart mockMultipart = (Multipart) mock(Multipart.class, "mockMultipart");
mockMultipart.getCount();
modify().returnValue(partCount);
return mockMultipart;
}
private Message preparePartIndexMessage(final EmailStoreHeader step, final EmailHelper helper,
final boolean deleteOnExit) throws MessagingException {
step.setHelper(helper);
step.setProperty(PROPERTY_NAME);
final String partIndex = String.valueOf(PART_INDEX);
step.setPartIndex(partIndex);
step.setHeaderName(HEADER_NAME);
return setUpGetMessageExpectations(step, helper, deleteOnExit);
}
}