// Copyright � 2006-2007 ASERT. Released under the Canoo Webtest license.
package com.canoo.webtest.plugins.emailtest;
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.MessagingException;
import javax.mail.Message;
import javax.mail.Flags;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.NoSuchProviderException;
import com.canoo.webtest.steps.Step;
import com.canoo.webtest.self.ThrowAssert;
import com.canoo.webtest.self.TestBlock;
/**
* Test for {@link EmailHelper}.
*
* @author Paul King, ASERT
*/
public class EmailHelperTest extends BaseEmailTestCase
{
private static final boolean DELETE_ON_SERVER = true;
public void testLogout() throws Exception {
final EmailHelper helper = new EmailHelper();
final Folder folder = createMockFolder();
folder.close(DELETE_ON_SERVER);
startVerification();
helper.logout(folder, DELETE_ON_SERVER);
}
public void testLogoutMessagingException() throws Exception {
final EmailHelper helper = new EmailHelper();
final Folder folder = createMockFolder();
folder.close(DELETE_ON_SERVER);
modify().throwException(new MessagingException("Dummy Messaging Exception"));
startVerification();
helper.logout(folder, DELETE_ON_SERVER);
}
public void testLogoutNull() throws Exception {
final EmailHelper helper = new EmailHelper();
helper.logout(null, DELETE_ON_SERVER);
}
public void testMarkForDelete() throws MessagingException {
final EmailHelper helper = new EmailHelper();
final Message message = (Message) intercept(Message.class, "message");
message.setFlag(Flags.Flag.DELETED, true);
startVerification();
helper.markForDelete(message);
}
public void testGetMessages() throws MessagingException {
final EmailHelper helper = new EmailHelper();
final Folder folder = createMockFolder();
folder.getMessages();
modify().returnValue(new Message[]{});
startVerification();
helper.getMessages(folder);
}
public void testGetMessageNull() throws MessagingException {
final EmailHelper helper = new EmailHelper();
final Folder folder = createMockFolder();
folder.getMessages();
modify().returnValue(new Message[]{});
startVerification();
assertNull(helper.getMessage(0, folder));
}
public void testConfigInfo() {
assertEquals("a", MOCK_INFO.getServer());
assertEquals("b", MOCK_INFO.getType());
assertEquals("c", MOCK_INFO.getUsername());
assertEquals("d", MOCK_INFO.getPassword());
assertEquals("e", MOCK_INFO.getDelay());
}
public void testGetMessageNonNull() throws MessagingException {
final EmailHelper helper = new EmailHelper();
final Folder folder = createMockFolder();
final Message mockMessage1 = (Message) intercept(Message.class, "mockMessage1");
final Message mockMessage2 = (Message) intercept(Message.class, "mockMessage2");
mockMessage1.getMessageNumber();
modify().returnValue(35);
mockMessage2.getMessageNumber();
modify().returnValue(42);
folder.getMessages();
modify().returnValue(new Message[]{mockMessage1, mockMessage2});
startVerification();
assertNotNull(helper.getMessage(42, folder));
}
public void testGetInboxFolderBadDelay() throws MessagingException {
final EmailHelper helper = new EmailHelper();
ThrowAssert.assertThrows("Delay must be numeric, illegal value: e",
MessagingException.class,
new TestBlock()
{
public void call() throws Throwable {
helper.getInboxFolder(MOCK_INFO);
}
});
}
public void testGetInboxFolderBadPort() throws MessagingException {
final EmailHelper helper = new EmailHelper();
ThrowAssert.assertThrows("Port must be numeric, illegal value: x",
MessagingException.class,
new TestBlock()
{
public void call() throws Throwable {
helper.getInboxFolder(new EmailConfigInfo("a:x", null, null, null, null));
}
});
}
public void testGetInboxFolderNoDefaultFolder() throws MessagingException {
final EmailConfigInfo info = new EmailConfigInfo("a:25", "pop3", "c", "d", "0");
final Store mockStore = createMockStore();
mockStore.connect("a", 25, info.getUsername(), info.getPassword());
mockStore.getDefaultFolder();
modify().returnValue(null);
final EmailHelper helper = prepareHelper(mockStore);
startVerification();
ThrowAssert.assertThrows(MessagingException.class, "No default folder",
new TestBlock()
{
public void call() throws Throwable {
helper.getInboxFolder(info);
}
});
}
public void testGetInboxFolderNoInbox() throws MessagingException {
final EmailConfigInfo info = new EmailConfigInfo("a", "pop3", "c", "d", null);
final Store mockStore = createMockStore();
final Folder mockFolder = createMockFolder(mockStore);
mockFolder.getFolder("INBOX");
modify().returnValue(null);
mockStore.connect("a", -1, info.getUsername(), info.getPassword());
mockStore.getDefaultFolder();
modify().returnValue(mockFolder);
final EmailHelper helper = prepareHelper(mockStore);
startVerification();
ThrowAssert.assertThrows(MessagingException.class, "No INBOX",
new TestBlock()
{
public void call() throws Throwable {
helper.getInboxFolder(info);
}
});
}
public void testGetInboxFolder() throws MessagingException {
final EmailConfigInfo info = new EmailConfigInfo("a", "pop3", "c", "d", null);
final Store mockStore = createMockStore();
final Folder mockFolder = createMockFolder(mockStore);
mockFolder.getFolder("INBOX");
modify().returnValue(mockFolder);
mockFolder.open(Folder.READ_WRITE);
mockStore.connect("a", -1, info.getUsername(), info.getPassword());
mockStore.getDefaultFolder();
modify().returnValue(mockFolder);
final EmailHelper helper = prepareHelper(mockStore);
startVerification();
helper.getInboxFolder(info);
}
public void testHelperMethods() { // mainly for coverage
final EmailHelper helper = new EmailHelper();
ThrowAssert.assertThrows(NullPointerException.class, new TestBlock()
{
public void call() throws Throwable {
helper.getSessionInstance(null);
}
});
ThrowAssert.assertThrows(NullPointerException.class, new TestBlock()
{
public void call() throws Throwable {
helper.getStore(null, null);
}
});
}
private static EmailHelper prepareHelper(final Store store) {
return new EmailHelper()
{
protected Session getSessionInstance(final Properties properties) {
return null;
}
protected Store getStore(final Session session, final String type) throws NoSuchProviderException {
return store;
}
};
}
protected Step createStep() {
return new EmailSetConfig(); // any dummy step
}
}