package com.piggymetrics.notification.service; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.piggymetrics.notification.domain.Frequency; import com.piggymetrics.notification.domain.NotificationSettings; import com.piggymetrics.notification.domain.NotificationType; import com.piggymetrics.notification.domain.Recipient; import com.piggymetrics.notification.repository.RecipientRepository; import org.junit.Before; import org.junit.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import java.util.Date; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.initMocks; public class RecipientServiceImplTest { @InjectMocks private RecipientServiceImpl recipientService; @Mock private RecipientRepository repository; @Before public void setup() { initMocks(this); } @Test public void shouldFindByAccountName() { Recipient recipient = new Recipient(); recipient.setAccountName("test"); when(repository.findByAccountName(recipient.getAccountName())).thenReturn(recipient); Recipient found = recipientService.findByAccountName(recipient.getAccountName()); assertEquals(recipient, found); } @Test(expected = IllegalArgumentException.class) public void shouldFailToFindRecipientWhenAccountNameIsEmpty() { recipientService.findByAccountName(""); } @Test public void shouldSaveRecipient() { NotificationSettings remind = new NotificationSettings(); remind.setActive(true); remind.setFrequency(Frequency.WEEKLY); remind.setLastNotified(null); NotificationSettings backup = new NotificationSettings(); backup.setActive(false); backup.setFrequency(Frequency.MONTHLY); backup.setLastNotified(new Date()); Recipient recipient = new Recipient(); recipient.setEmail("test@test.com"); recipient.setScheduledNotifications(ImmutableMap.of( NotificationType.BACKUP, backup, NotificationType.REMIND, remind )); Recipient saved = recipientService.save("test", recipient); verify(repository).save(recipient); assertNotNull(saved.getScheduledNotifications().get(NotificationType.REMIND).getLastNotified()); assertEquals("test", saved.getAccountName()); } @Test public void shouldFindReadyToNotifyWhenNotificationTypeIsBackup() { final List<Recipient> recipients = ImmutableList.of(new Recipient()); when(repository.findReadyForBackup()).thenReturn(recipients); List<Recipient> found = recipientService.findReadyToNotify(NotificationType.BACKUP); assertEquals(recipients, found); } @Test public void shouldFindReadyToNotifyWhenNotificationTypeIsRemind() { final List<Recipient> recipients = ImmutableList.of(new Recipient()); when(repository.findReadyForRemind()).thenReturn(recipients); List<Recipient> found = recipientService.findReadyToNotify(NotificationType.REMIND); assertEquals(recipients, found); } @Test public void shouldMarkAsNotified() { NotificationSettings remind = new NotificationSettings(); remind.setActive(true); remind.setFrequency(Frequency.WEEKLY); remind.setLastNotified(null); Recipient recipient = new Recipient(); recipient.setAccountName("test"); recipient.setEmail("test@test.com"); recipient.setScheduledNotifications(ImmutableMap.of( NotificationType.REMIND, remind )); recipientService.markNotified(NotificationType.REMIND, recipient); assertNotNull(recipient.getScheduledNotifications().get(NotificationType.REMIND).getLastNotified()); verify(repository).save(recipient); } }