/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.component.execution.internal; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import org.easymock.Capture; import org.easymock.EasyMock; import org.junit.Test; import de.rcenvironment.core.component.execution.api.ComponentEventAnnouncement; import de.rcenvironment.core.component.execution.api.ComponentEventAnnouncement.WorkflowEventType; import de.rcenvironment.core.mail.Mail; import de.rcenvironment.core.mail.MailDispatchResult; import de.rcenvironment.core.mail.MailDispatchResultListener; import de.rcenvironment.core.mail.MailService; import de.rcenvironment.toolkit.utils.text.TextLinesReceiver; /** * Test cases for {@link ComponentEventAnnouncementDispatcherImpl}. * * @author Doreen Seider */ public class ComponentEventAnnouncementDispatcherImplTest { /** * Tests if dispatching event via mail fails gracefully in case no recipients are passed. */ @Test public void testDispatchingEventViaEmailNoRecipients() { // no recipients TextLinesReceiver textLinesReceiverMock = EasyMock.createStrictMock(TextLinesReceiver.class); Capture<String> lineCapture = new Capture<>(); textLinesReceiverMock.addLine(EasyMock.capture(lineCapture)); EasyMock.expectLastCall(); EasyMock.replay(textLinesReceiverMock); ComponentEventAnnouncementDispatcherImpl eventDispatcher = new ComponentEventAnnouncementDispatcherImpl(); assertFalse( eventDispatcher.dispatchWorkflowEventAnnouncementViaMail(new String[0], createEventAnnouncement(), textLinesReceiverMock)); EasyMock.verify(textLinesReceiverMock); assertTrue(lineCapture.hasCaptured()); } /** * Tests if dispatching mails succeeded on proper parameter passed and if information are forwarded to actual mail service properly. * * @throws ExecutionException on unexpected error * @throws InterruptedException on unexpected error */ @Test public void testDispatchingEventViaEmailForSuccess() throws InterruptedException, ExecutionException { TextLinesReceiver textLinesReceiverMock = EasyMock.createStrictMock(TextLinesReceiver.class); EasyMock.replay(textLinesReceiverMock); testDispatchingEventViaEmail(true, textLinesReceiverMock); } /** * Tests if dispatching mails indicates a failure if mail service stated that delivering failed. * * @throws ExecutionException on unexpected error * @throws InterruptedException on unexpected error */ @Test public void testDispatchingEventViaEmailForFailure() throws InterruptedException, ExecutionException { TextLinesReceiver textLinesReceiverMock = EasyMock.createStrictMock(TextLinesReceiver.class); textLinesReceiverMock.addLine(EasyMock.anyObject(String.class)); EasyMock.expectLastCall(); EasyMock.replay(textLinesReceiverMock); testDispatchingEventViaEmail(false, textLinesReceiverMock); } private void testDispatchingEventViaEmail(final boolean forSuccess, TextLinesReceiver textLinesReceiverMock) throws InterruptedException, ExecutionException { final Future<?> futureMock = EasyMock.createStrictMock(Future.class); EasyMock.expect(futureMock.get()).andReturn(null); EasyMock.replay(futureMock); MailService mailServiceStub = new MailService() { @Override public Future<?> sendMail(Mail mail, MailDispatchResultListener listener) { if (forSuccess) { listener.receiveResult(MailDispatchResult.SUCCESS, null); } else { listener.receiveResult(MailDispatchResult.FAILURE, null); } return futureMock; } @Override public boolean isConfigured() { return true; } }; ComponentEventAnnouncementDispatcherImpl eventDispatcher = new ComponentEventAnnouncementDispatcherImpl(); eventDispatcher.bindMailService(mailServiceStub); boolean result = eventDispatcher.dispatchWorkflowEventAnnouncementViaMail(new String[] { "john.doe@mail.de" }, createEventAnnouncement(), textLinesReceiverMock); if (forSuccess) { assertTrue(result); } else { assertFalse(result); } EasyMock.verify(futureMock); EasyMock.verify(textLinesReceiverMock); } private ComponentEventAnnouncement createEventAnnouncement() { ComponentEventAnnouncement eventAnnouncementMock = EasyMock.createStrictMock(ComponentEventAnnouncement.class); EasyMock.expect(eventAnnouncementMock.hasSubject()).andStubReturn(true); EasyMock.expect(eventAnnouncementMock.getSubject()).andStubReturn("some subject"); EasyMock.expect(eventAnnouncementMock.getBody()).andStubReturn("some body"); EasyMock.expect(eventAnnouncementMock.getWorkflowEventType()).andStubReturn(WorkflowEventType.REQUEST_FOR_OUTPUT_APPROVAL); EasyMock.replay(eventAnnouncementMock); return eventAnnouncementMock; } }