package br.uff.sti.hermes.service.email;
import br.uff.sti.hermes.ApplicationConstants;
import br.uff.sti.hermes.model.SendTask;
import br.uff.sti.hermes.service.SendTaskService;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import static org.mockito.Mockito.*;
/**
*
* @author dancastellani
*/
public class EmailSenderJobUnitTest {
private EmailSenderJob emailSender;
private SendTaskService sendTaskServiceMock;
private EmailService emailServiceMock;
private ApplicationConstants applicationConstants;
@Before
public void setup() {
emailSender = new EmailSenderJob();
sendTaskServiceMock = mock(SendTaskService.class);
emailSender.setSendTaskService(sendTaskServiceMock);
emailServiceMock = mock(EmailService.class);
emailSender.setEmailService(emailServiceMock);
applicationConstants = new ApplicationConstants();
emailSender.setApplicationConstants(null);
}
@Test
public void whenJobRunsShouldGetEmailsWithStatusTodo() {
List<SendTask> emptyList = new ArrayList<SendTask>(0);
when(sendTaskServiceMock.getByStatus(any(SendTask.Status.class))).thenReturn(emptyList);
emailSender.processSendTasks();
verify(sendTaskServiceMock).getByStatus(SendTask.Status.TODO);
}
@Test
public void whenJobRunsAndHasSendTasksToProcessShouldCallEmailServiceToSendTheEmails() {
List<SendTask> taskList = new ArrayList<SendTask>(1);
taskList.add(mock(SendTask.class));
when(sendTaskServiceMock.getByStatus(any(SendTask.Status.class))).thenReturn(taskList);
emailSender.processSendTasks();
verify(emailServiceMock).sendMail(any(SendTask.class));
}
@Test
public void whenJobRunsAndHasSendTasksToProcessShouldChangeTasksStatus() {
List<SendTask> taskList = new ArrayList<SendTask>(1);
SendTask mockedTask = mock(SendTask.class);
taskList.add(mockedTask);
when(sendTaskServiceMock.getByStatus(any(SendTask.Status.class))).thenReturn(taskList);
emailSender = spy(emailSender);
emailSender.processSendTasks();
verify(emailSender).updateSendTaskStatus(mockedTask, SendTask.Status.DONE);
}
@Test
public void whenUpdateStatusOnEmailSenderJobIsCalledByItselfShouldCallSendTaskServiceToUpdateSendTask() {
emailSender.updateSendTaskStatus(mock(SendTask.class), any(SendTask.Status.class));
verify(sendTaskServiceMock).save(any(SendTask.class));
}
}