/* * Copyright (c) 2007, Your Corporation. All Rights Reserved. */ package org.springmodules.email.dispatcher; import junit.framework.TestCase; import org.easymock.MockControl; import org.springframework.core.task.TaskExecutor; import org.springframework.mail.MailException; import org.springframework.mail.MailSender; import org.springmodules.email.Email; import org.springmodules.email.dispatcher.callback.DispatchingCallback; import org.springmodules.email.dispatcher.emailsender.EmailSender; import org.springmodules.email.dispatcher.errorhandler.DispatchingErrorHandler; /** * @author Uri Boness */ public class AsyncEmailDispatcherTests extends TestCase { private AsyncEmailDispatcher dispatcher; private MailSender mailSender; private MockControl mailSenderControl; private EmailSender emailSender; private MockControl emailSenderControl; private DispatchingErrorHandler errorHandler; private MockControl errorHandlerControl; private DispatchingCallback callback; private MockControl callbackControl; protected void setUp() throws Exception { mailSenderControl = MockControl.createControl(MailSender.class); mailSender = (MailSender)mailSenderControl.getMock(); emailSenderControl = MockControl.createControl(EmailSender.class); emailSender = (EmailSender)emailSenderControl.getMock(); errorHandlerControl = MockControl.createControl(DispatchingErrorHandler.class); errorHandler = (DispatchingErrorHandler)errorHandlerControl.getMock(); callbackControl = MockControl.createControl(DispatchingCallback.class); callback = (DispatchingCallback)callbackControl.getMock(); dispatcher = new AsyncEmailDispatcher(); dispatcher.setMailSender(mailSender); dispatcher.setEmailSender(emailSender); dispatcher.setErrorHandler(errorHandler); dispatcher.setDispachingCallback(callback); dispatcher.setEncoding("UTF-8"); } public void testSend() throws Exception { Email email = new Email(); TestExecutor executor = new TestExecutor(email); dispatcher.setTaskExecutor(executor); callback.emailDispatched(email, true); callbackControl.replay(); emailSender.send(mailSender, email, "UTF-8"); emailSenderControl.replay(); dispatcher.send(email); assertTrue(executor.wasCalled()); callbackControl.verify(); emailSenderControl.verify(); } public void testSend_WithError() throws Exception { Email email = new Email(); TestExecutor executor = new TestExecutor(email); dispatcher.setTaskExecutor(executor); MailException error = new MailException("Error") {}; errorHandler.handle(error, email); errorHandlerControl.replay(); callback.emailDispatched(email, false); callbackControl.replay(); emailSender.send(mailSender, email, "UTF-8"); emailSenderControl.setThrowable(error); emailSenderControl.replay(); dispatcher.send(email); callbackControl.verify(); emailSenderControl.verify(); errorHandlerControl.verify(); } //============================================== Inner Classes ===================================================== private class TestExecutor implements TaskExecutor { private Email expectedEmail; private boolean called; public TestExecutor(Email expectedEmail) { this.expectedEmail = expectedEmail; } public void execute(Runnable task) { assertTrue(task instanceof AsyncEmailDispatcher.EmailDispatchingTask); assertSame(expectedEmail, ((AsyncEmailDispatcher.EmailDispatchingTask)task).getEmail()); called = true; task.run(); } public boolean wasCalled() { return called; } } }