001: // Copyright © 2006-2007 ASERT. Released under the Canoo Webtest license.
002: package com.canoo.webtest.plugins.emailtest;
003:
004: import java.util.Properties;
005:
006: import javax.mail.Folder;
007: import javax.mail.MessagingException;
008: import javax.mail.Message;
009: import javax.mail.Flags;
010: import javax.mail.Session;
011: import javax.mail.Store;
012: import javax.mail.NoSuchProviderException;
013:
014: import com.canoo.webtest.steps.Step;
015: import com.canoo.webtest.self.ThrowAssert;
016: import com.canoo.webtest.self.TestBlock;
017:
018: /**
019: * Test for {@link EmailHelper}.
020: *
021: * @author Paul King, ASERT
022: */
023: public class EmailHelperTest extends BaseEmailTestCase {
024: private static final boolean DELETE_ON_SERVER = true;
025:
026: public void testLogout() throws Exception {
027: final EmailHelper helper = new EmailHelper();
028: final Folder folder = createMockFolder();
029: folder.close(DELETE_ON_SERVER);
030: startVerification();
031: helper.logout(folder, DELETE_ON_SERVER);
032: }
033:
034: public void testLogoutMessagingException() throws Exception {
035: final EmailHelper helper = new EmailHelper();
036: final Folder folder = createMockFolder();
037: folder.close(DELETE_ON_SERVER);
038: modify().throwException(
039: new MessagingException("Dummy Messaging Exception"));
040: startVerification();
041: helper.logout(folder, DELETE_ON_SERVER);
042: }
043:
044: public void testLogoutNull() throws Exception {
045: final EmailHelper helper = new EmailHelper();
046: helper.logout(null, DELETE_ON_SERVER);
047: }
048:
049: public void testMarkForDelete() throws MessagingException {
050: final EmailHelper helper = new EmailHelper();
051: final Message message = (Message) intercept(Message.class,
052: "message");
053: message.setFlag(Flags.Flag.DELETED, true);
054: startVerification();
055: helper.markForDelete(message);
056: }
057:
058: public void testGetMessages() throws MessagingException {
059: final EmailHelper helper = new EmailHelper();
060: final Folder folder = createMockFolder();
061: folder.getMessages();
062: modify().returnValue(new Message[] {});
063: startVerification();
064: helper.getMessages(folder);
065: }
066:
067: public void testGetMessageNull() throws MessagingException {
068: final EmailHelper helper = new EmailHelper();
069: final Folder folder = createMockFolder();
070: folder.getMessages();
071: modify().returnValue(new Message[] {});
072: startVerification();
073: assertNull(helper.getMessage(0, folder));
074: }
075:
076: public void testConfigInfo() {
077: assertEquals("a", MOCK_INFO.getServer());
078: assertEquals("b", MOCK_INFO.getType());
079: assertEquals("c", MOCK_INFO.getUsername());
080: assertEquals("d", MOCK_INFO.getPassword());
081: assertEquals("e", MOCK_INFO.getDelay());
082: }
083:
084: public void testGetMessageNonNull() throws MessagingException {
085: final EmailHelper helper = new EmailHelper();
086: final Folder folder = createMockFolder();
087: final Message mockMessage1 = (Message) intercept(Message.class,
088: "mockMessage1");
089: final Message mockMessage2 = (Message) intercept(Message.class,
090: "mockMessage2");
091: mockMessage1.getMessageNumber();
092: modify().returnValue(35);
093: mockMessage2.getMessageNumber();
094: modify().returnValue(42);
095: folder.getMessages();
096: modify().returnValue(
097: new Message[] { mockMessage1, mockMessage2 });
098: startVerification();
099: assertNotNull(helper.getMessage(42, folder));
100: }
101:
102: public void testGetInboxFolderBadDelay() throws MessagingException {
103: final EmailHelper helper = new EmailHelper();
104: ThrowAssert.assertThrows(
105: "Delay must be numeric, illegal value: e",
106: MessagingException.class, new TestBlock() {
107: public void call() throws Throwable {
108: helper.getInboxFolder(MOCK_INFO);
109: }
110: });
111: }
112:
113: public void testGetInboxFolderBadPort() throws MessagingException {
114: final EmailHelper helper = new EmailHelper();
115: ThrowAssert.assertThrows(
116: "Port must be numeric, illegal value: x",
117: MessagingException.class, new TestBlock() {
118: public void call() throws Throwable {
119: helper.getInboxFolder(new EmailConfigInfo(
120: "a:x", null, null, null, null));
121: }
122: });
123: }
124:
125: public void testGetInboxFolderNoDefaultFolder()
126: throws MessagingException {
127: final EmailConfigInfo info = new EmailConfigInfo("a:25",
128: "pop3", "c", "d", "0");
129: final Store mockStore = createMockStore();
130: mockStore.connect("a", 25, info.getUsername(), info
131: .getPassword());
132: mockStore.getDefaultFolder();
133: modify().returnValue(null);
134: final EmailHelper helper = prepareHelper(mockStore);
135: startVerification();
136: ThrowAssert.assertThrows(MessagingException.class,
137: "No default folder", new TestBlock() {
138: public void call() throws Throwable {
139: helper.getInboxFolder(info);
140: }
141: });
142: }
143:
144: public void testGetInboxFolderNoInbox() throws MessagingException {
145: final EmailConfigInfo info = new EmailConfigInfo("a", "pop3",
146: "c", "d", null);
147: final Store mockStore = createMockStore();
148: final Folder mockFolder = createMockFolder(mockStore);
149: mockFolder.getFolder("INBOX");
150: modify().returnValue(null);
151: mockStore.connect("a", -1, info.getUsername(), info
152: .getPassword());
153: mockStore.getDefaultFolder();
154: modify().returnValue(mockFolder);
155: final EmailHelper helper = prepareHelper(mockStore);
156: startVerification();
157: ThrowAssert.assertThrows(MessagingException.class, "No INBOX",
158: new TestBlock() {
159: public void call() throws Throwable {
160: helper.getInboxFolder(info);
161: }
162: });
163: }
164:
165: public void testGetInboxFolder() throws MessagingException {
166: final EmailConfigInfo info = new EmailConfigInfo("a", "pop3",
167: "c", "d", null);
168: final Store mockStore = createMockStore();
169: final Folder mockFolder = createMockFolder(mockStore);
170: mockFolder.getFolder("INBOX");
171: modify().returnValue(mockFolder);
172: mockFolder.open(Folder.READ_WRITE);
173: mockStore.connect("a", -1, info.getUsername(), info
174: .getPassword());
175: mockStore.getDefaultFolder();
176: modify().returnValue(mockFolder);
177: final EmailHelper helper = prepareHelper(mockStore);
178: startVerification();
179: helper.getInboxFolder(info);
180: }
181:
182: public void testHelperMethods() { // mainly for coverage
183: final EmailHelper helper = new EmailHelper();
184: ThrowAssert.assertThrows(NullPointerException.class,
185: new TestBlock() {
186: public void call() throws Throwable {
187: helper.getSessionInstance(null);
188: }
189: });
190: ThrowAssert.assertThrows(NullPointerException.class,
191: new TestBlock() {
192: public void call() throws Throwable {
193: helper.getStore(null, null);
194: }
195: });
196: }
197:
198: private static EmailHelper prepareHelper(final Store store) {
199: return new EmailHelper() {
200: protected Session getSessionInstance(
201: final Properties properties) {
202: return null;
203: }
204:
205: protected Store getStore(final Session session,
206: final String type) throws NoSuchProviderException {
207: return store;
208: }
209: };
210: }
211:
212: protected Step createStep() {
213: return new EmailSetConfig(); // any dummy step
214: }
215: }
|