// 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.Multipart; import javax.mail.Folder; import com.canoo.webtest.self.TestBlock; import com.canoo.webtest.steps.Step; /** * Test for {@link EmailStoreMessageType}. * * @author Paul King, ASERT */ public class EmailStoreMessageTypeTest extends BaseEmailTestCase { private static final String PROPERTY_NAME = "dummyProperty"; private static final String MESSAGE_ID = "123"; private static final boolean DELETE_ON_EXIT = false; protected Step createStep() { return new EmailStoreMessageType(); } public void testMandatoryParams() { final EmailStoreMessageType step = (EmailStoreMessageType) getStep(); step.getContext().put("EmailConfigInfo", null); assertStepRejectsNullParam("property", new TestBlock() { public void call() throws Throwable { executeStep(step); } }); } public void testInvalidMessageId() { final EmailStoreMessageType step = (EmailStoreMessageType) getStep(); step.getContext().put("EmailConfigInfo", null); step.setProperty(PROPERTY_NAME); step.setMessageId("non-integer"); assertErrorOnExecute(step, "invalid messageId", "Can't parse messageId parameter with value 'non-integer' as an integer."); } public void testSimple() throws Exception { final EmailStoreMessageType step = (EmailStoreMessageType) getStep(); final EmailHelper helper = prepareHelper(step); final Message mockMessage = setUpGetMessageExpectations(step, helper, DELETE_ON_EXIT); mockMessage.getContent(); modify().returnValue("Simple message will return a string"); setUpMessageOperationFinaliseExpectations(helper, DELETE_ON_EXIT); startVerification(); executeStep(step); assertEquals("Simple", step.getWebtestProperty(PROPERTY_NAME)); } public void testMultipart() throws Exception { final EmailStoreMessageType step = (EmailStoreMessageType) getStep(); final EmailHelper helper = prepareHelper(step); final Message mockMessage = setUpGetMessageExpectations(step, helper, DELETE_ON_EXIT); mockMessage.getContent(); modify().returnValue(setUpMultipart()); setUpMessageOperationFinaliseExpectations(helper, DELETE_ON_EXIT); startVerification(); executeStep(step); assertEquals("MultiPart", step.getWebtestProperty(PROPERTY_NAME)); } public void testIoException() throws Exception { final EmailStoreMessageType step = (EmailStoreMessageType) getStep(); final EmailHelper helper = prepareHelper(step); final Message mockMessage = setUpGetMessageExpectations(step, helper, DELETE_ON_EXIT); mockMessage.getContent(); modify().throwException(new IOException("dummyIoException")); setUpMessageOperationFinaliseExpectations(helper, DELETE_ON_EXIT); startVerification(); assertFailOnExecute(step, "expected to fail", "Error processing content: Error processing email message: dummyIoException"); } public void testNullMessage() throws Exception { final EmailStoreMessageType step = (EmailStoreMessageType) getStep(); final EmailHelper helper = prepareHelper(step); final Folder mockFolder = createMockFolder(); step.getContext().put("EmailConfigInfo", MOCK_INFO); final String mockMid = "99"; step.setMessageId(mockMid); helper.getInboxFolder(MOCK_INFO); modify().returnValue(mockFolder); helper.getMessage(Integer.parseInt(mockMid), mockFolder); modify().returnValue(null); setUpMessageOperationFinaliseExpectations(helper, DELETE_ON_EXIT); startVerification(); assertFailOnExecute(step, "expected to fail", "Could not find message with id '99' on server."); } private Multipart setUpMultipart() { return (Multipart) intercept(Multipart.class, "mockMultipart"); } private EmailHelper prepareHelper(final EmailStoreMessageType step) { step.setProperty(PROPERTY_NAME); step.setMessageId(MESSAGE_ID); final EmailHelper helper = (EmailHelper) mock(EmailHelper.class, "helper"); step.setHelper(helper); return helper; } }