Package org.springmodules.email.dispatcher

Source Code of org.springmodules.email.dispatcher.AsyncEmailDispatcherTests$TestExecutor

/*
* 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;
        }
    }

}
TOP

Related Classes of org.springmodules.email.dispatcher.AsyncEmailDispatcherTests$TestExecutor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.