001: // Copyright © 2006-2007 ASERT. Released under the Canoo Webtest license.
002: package com.canoo.webtest.plugins.emailtest;
003:
004: import java.io.IOException;
005:
006: import javax.mail.Message;
007: import javax.mail.MessagingException;
008: import javax.mail.Multipart;
009: import javax.mail.BodyPart;
010:
011: import com.canoo.webtest.self.TestBlock;
012: import com.canoo.webtest.steps.Step;
013:
014: /**
015: * Test for {@link EmailStoreHeader}.
016: *
017: * @author Paul King, ASERT
018: */
019: public class EmailStoreHeaderTest extends BaseEmailTestCase {
020: private static final int PART_INDEX = 0;
021: private static final String HEADER_NAME = "dummyHeaderName";
022: private static final String PROPERTY_NAME = "dummyProperty";
023:
024: protected Step createStep() {
025: return new EmailStoreHeader();
026: }
027:
028: public void testMandatoryParams() {
029: final EmailStoreHeader step = (EmailStoreHeader) getStep();
030: step.getContext().put("EmailConfigInfo", null);
031: assertStepRejectsNullParam("property", new TestBlock() {
032: public void call() throws Throwable {
033: executeStep(step);
034: }
035: });
036: step.setProperty(PROPERTY_NAME);
037: assertStepRejectsNullParam("headerName", new TestBlock() {
038: public void call() throws Throwable {
039: executeStep(step);
040: }
041: });
042: }
043:
044: public void testInvalidPartIndex() {
045: final EmailStoreHeader step = (EmailStoreHeader) getStep();
046: step.getContext().put("EmailConfigInfo", null);
047: step.setProperty(PROPERTY_NAME);
048: step.setHeaderName(HEADER_NAME);
049: step.setPartIndex("dummyPartIndex");
050: assertErrorOnExecute(step, "invalid partIndex",
051: "Can't parse partIndex parameter with value 'dummyPartIndex' as an integer.");
052: }
053:
054: public void testNoPartIndex() throws Exception {
055: final EmailStoreHeader step = (EmailStoreHeader) getStep();
056: step.setProperty(PROPERTY_NAME);
057: step.setHeaderName(HEADER_NAME);
058: final EmailHelper helper = (EmailHelper) mock(
059: EmailHelper.class, "helper");
060: step.setHelper(helper);
061: final boolean deleteOnExit = false;
062: final Message mockMessage = setUpGetMessageExpectations(step,
063: helper, deleteOnExit);
064: mockMessage.getHeader(HEADER_NAME);
065: modify().returnValue(new String[] { "dummyHeaderValue" });
066: setUpMessageOperationFinaliseExpectations(helper, deleteOnExit);
067: startVerification();
068: executeStep(step);
069: assertEquals("dummyHeaderValue", step
070: .getWebtestProperty(PROPERTY_NAME));
071: }
072:
073: public void testHasPartIndexSimpleMessage() throws Exception {
074: final EmailStoreHeader step = (EmailStoreHeader) getStep();
075: final EmailHelper helper = (EmailHelper) mock(
076: EmailHelper.class, "helper");
077: final boolean deleteOnExit = false;
078: final Message mockMessage = preparePartIndexMessage(step,
079: helper, deleteOnExit);
080: mockMessage.getContent();
081: modify().returnValue("dummy simple message will be a string");
082: setUpMessageOperationFinaliseExpectations(helper, deleteOnExit);
083: startVerification();
084: assertFailOnExecute(step, "partIndex not for simple message",
085: "PartIndex supplied for a non-MultiPart message.");
086: }
087:
088: public void testHasPartIndexIoException() throws Exception {
089: final EmailStoreHeader step = (EmailStoreHeader) getStep();
090: final EmailHelper helper = (EmailHelper) mock(
091: EmailHelper.class, "helper");
092: final boolean deleteOnExit = false;
093: final Message mockMessage = preparePartIndexMessage(step,
094: helper, deleteOnExit);
095: mockMessage.getContent();
096: modify().throwException(new IOException("dummyIoException"));
097: setUpMessageOperationFinaliseExpectations(helper, deleteOnExit);
098: startVerification();
099: assertFailOnExecute(step, "fails if message exception",
100: "Error processing content: Error processing email message: dummyIoException");
101: }
102:
103: public void testHasPartIndexTooLarge() throws Exception {
104: final EmailStoreHeader step = (EmailStoreHeader) getStep();
105: final EmailHelper helper = (EmailHelper) mock(
106: EmailHelper.class, "helper");
107: final boolean deleteOnExit = false;
108: final Message mockMessage = preparePartIndexMessage(step,
109: helper, deleteOnExit);
110: final Multipart mockMultipart = setUpMultipart(-1);
111: mockMessage.getContent();
112: modify().returnValue(mockMultipart);
113: setUpMessageOperationFinaliseExpectations(helper, deleteOnExit);
114: startVerification();
115: assertFailOnExecute(step, "fails if partIndex too large",
116: "PartIndex too large.");
117: }
118:
119: public void testHasPartIndexMultiPart() throws Exception {
120: final EmailStoreHeader step = (EmailStoreHeader) getStep();
121: final EmailHelper helper = (EmailHelper) mock(
122: EmailHelper.class, "helper");
123: final boolean deleteOnExit = false;
124: final Message mockMessage = preparePartIndexMessage(step,
125: helper, deleteOnExit);
126: final BodyPart mockBodyPart = (BodyPart) mock(BodyPart.class,
127: "mockBodyPart");
128: mockBodyPart.getHeader(HEADER_NAME);
129: modify()
130: .returnValue(
131: new String[] { "dummyHeaderValue1",
132: "dummyHeaderValue2" });
133: final Multipart mockMultipart = setUpMultipart(2);
134: mockMultipart.getBodyPart(PART_INDEX);
135: modify().returnValue(mockBodyPart);
136: mockMessage.getContent();
137: modify().returnValue(mockMultipart);
138: setUpMessageOperationFinaliseExpectations(helper, deleteOnExit);
139: startVerification();
140: executeStep(step);
141: assertEquals("dummyHeaderValue1, dummyHeaderValue2", step
142: .getWebtestProperty(PROPERTY_NAME));
143: }
144:
145: private Multipart setUpMultipart(final int partCount)
146: throws MessagingException {
147: final Multipart mockMultipart = (Multipart) mock(
148: Multipart.class, "mockMultipart");
149: mockMultipart.getCount();
150: modify().returnValue(partCount);
151: return mockMultipart;
152: }
153:
154: private Message preparePartIndexMessage(
155: final EmailStoreHeader step, final EmailHelper helper,
156: final boolean deleteOnExit) throws MessagingException {
157: step.setHelper(helper);
158: step.setProperty(PROPERTY_NAME);
159: final String partIndex = String.valueOf(PART_INDEX);
160: step.setPartIndex(partIndex);
161: step.setHeaderName(HEADER_NAME);
162: return setUpGetMessageExpectations(step, helper, deleteOnExit);
163: }
164:
165: }
|