package com.piggymetrics.notification.service;
import com.piggymetrics.notification.domain.NotificationType;
import com.piggymetrics.notification.domain.Recipient;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.springframework.core.env.Environment;
import org.springframework.mail.javamail.JavaMailSender;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.internet.MimeMessage;
import java.io.IOException;
import java.util.Properties;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks;
public class EmailServiceImplTest {
@InjectMocks
private EmailServiceImpl emailService;
@Mock
private JavaMailSender mailSender;
@Mock
private Environment env;
@Captor
private ArgumentCaptor<MimeMessage> captor;
@Before
public void setup() {
initMocks(this);
when(mailSender.createMimeMessage())
.thenReturn(new MimeMessage(Session.getDefaultInstance(new Properties())));
}
@Test
public void shouldSendBackupEmail() throws MessagingException, IOException {
final String subject = "subject";
final String text = "text";
final String attachment = "attachment.json";
Recipient recipient = new Recipient();
recipient.setAccountName("test");
recipient.setEmail("test@test.com");
when(env.getProperty(NotificationType.BACKUP.getSubject())).thenReturn(subject);
when(env.getProperty(NotificationType.BACKUP.getText())).thenReturn(text);
when(env.getProperty(NotificationType.BACKUP.getAttachment())).thenReturn(attachment);
emailService.send(NotificationType.BACKUP, recipient, "{\"name\":\"test\"");
verify(mailSender).send(captor.capture());
MimeMessage message = captor.getValue();
assertEquals(subject, message.getSubject());
// TODO check other fields
}
@Test
public void shouldSendRemindEmail() throws MessagingException, IOException {
final String subject = "subject";
final String text = "text";
Recipient recipient = new Recipient();
recipient.setAccountName("test");
recipient.setEmail("test@test.com");
when(env.getProperty(NotificationType.REMIND.getSubject())).thenReturn(subject);
when(env.getProperty(NotificationType.REMIND.getText())).thenReturn(text);
emailService.send(NotificationType.REMIND, recipient, null);
verify(mailSender).send(captor.capture());
MimeMessage message = captor.getValue();
assertEquals(subject, message.getSubject());
// TODO check other fields
}
}