// 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.Session;
import javax.mail.Store;
import javax.mail.URLName;
import javax.mail.Message;
import com.canoo.webtest.steps.BaseStepTestCase;
/**
* @author Paul King, ASERT
*/
public abstract class BaseEmailTestCase extends BaseStepTestCase
{
private Folder fMockFolder;
static final EmailConfigInfo MOCK_INFO = new EmailConfigInfo("a", "b", "c", "d", "e");
protected Message setUpGetMessageExpectations(final ISingleMessageStep step, final EmailHelper helper,
final boolean closeOnExit) throws MessagingException {
createMockFolder();
final Message mockMessage = (Message) intercept(Message.class, "mockMessage");
step.getContext().put("EmailConfigInfo", MOCK_INFO);
final String mockMid = "99";
step.setMessageId(mockMid);
helper.getInboxFolder(MOCK_INFO);
modify().returnValue(fMockFolder);
helper.getMessage(Integer.parseInt(mockMid), fMockFolder);
modify().returnValue(mockMessage);
return mockMessage;
}
protected Message[] setUpGetMessagesExpectations(final AbstractSelectStep step, final EmailHelper helper,
final int numMessages) throws MessagingException {
createMockFolder();
final Message[] messages = new Message[numMessages];
for (int i = 0; i < numMessages; i++) {
messages[i] = (Message) intercept(Message.class, "mockMessage[" + i + "]");
}
step.getContext().put("EmailConfigInfo", MOCK_INFO);
helper.getInboxFolder(MOCK_INFO);
modify().returnValue(fMockFolder);
helper.getMessages(fMockFolder);
modify().returnValue(messages);
return messages;
}
protected void setUpMessageOperationFinaliseExpectations(final EmailHelper helper, final boolean deleteOnServer) {
helper.logout(fMockFolder, deleteOnServer);
}
protected Folder createMockFolder() throws MessagingException {
return createMockFolder(createMockStore());
}
protected Folder createMockFolder(final Store store) throws MessagingException {
fMockFolder = (Folder) intercept(Folder.class, new Object[]{store}, "folder");
fMockFolder.getFullName();
modify().multiplicity(expect.from(0)).returnValue("folder"); // helps rmock debug trace
return fMockFolder;
}
protected Store createMockStore() {
return (Store) intercept(Store.class,
new Object[]{createSessionStub(), createUrlNameStub()}, "store");
}
private static URLName createUrlNameStub() {
return new URLName("dummy url");
}
private static Session createSessionStub() {
final Properties properties = new Properties();
return Session.getDefaultInstance(properties);
}
}