package de.financer.task; import de.financer.config.FinancerConfig; import de.financer.model.Account; import de.financer.model.RecurringTransaction; import de.financer.service.RecurringTransactionService; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @RunWith(MockitoJUnitRunner.class) public class SendRecurringTransactionReminderTaskTest { @InjectMocks private SendRecurringTransactionReminderTask classUnderTest; @Mock private RecurringTransactionService recurringTransactionService; @Mock private JavaMailSender mailSender; @Mock private FinancerConfig financerConfig; @Test public void test_sendReminder() { // Arrange final Collection recurringTransactions = Arrays.asList( createRecurringTransaction("Test booking 1", "Income", "accounts.bank", Long.valueOf(250000), true), createRecurringTransaction("Test booking 2", "Bank", "accounts.rent", Long.valueOf(41500), true), createRecurringTransaction("Test booking 3", "Bank", "accounts.cash", Long.valueOf(5000), true), createRecurringTransaction("Test booking 4", "Car", "accounts.car", Long.valueOf(1234), false) ); Mockito.when(this.recurringTransactionService.getAllDueToday()).thenReturn(recurringTransactions); Mockito.when(this.financerConfig.getMailRecipients()).thenReturn(Collections.singletonList("test@test.com")); // Act this.classUnderTest.sendReminder(); // Assert Mockito.verify(this.mailSender, Mockito.times(1)).send(Mockito.any(SimpleMailMessage.class)); } private RecurringTransaction createRecurringTransaction(String description, String fromAccountKey, String toAccountKey, Long amount, boolean remind) { final RecurringTransaction recurringTransaction = new RecurringTransaction(); recurringTransaction.setDescription(description); recurringTransaction.setFromAccount(createAccount(fromAccountKey)); recurringTransaction.setToAccount(createAccount(toAccountKey)); recurringTransaction.setAmount(amount); recurringTransaction.setRemind(remind); return recurringTransaction; } private Account createAccount(String key) { final Account account = new Account(); account.setKey(key); return account; } }