test: ExpenseService unit tests

This commit is contained in:
effe 2024-09-10 14:00:43 -04:00
parent 3b2fd229a5
commit 0377d15501
2 changed files with 95 additions and 4 deletions

View file

@ -192,17 +192,18 @@ public class ExpenseService {
totalExpenses.addAll(bothExpenses); // Include these regardless of isPaid status totalExpenses.addAll(bothExpenses); // Include these regardless of isPaid status
// Fetch expenses where you are the payer (you owe money), filtered by year // Fetch expenses where you are the payer (you owe money), filtered by year
List<Expense> payerExpenses = expenseRepository.findExpensesByPayerAndYear(loggedInPerson.getId(), yearValue); List<Expense> beneficiaryExpenses = expenseRepository.findExpensesByBeneficiaryAndYear(loggedInPerson.getId(), yearValue);
for (Expense expense : payerExpenses) { for (Expense expense : beneficiaryExpenses) {
if (!totalExpenses.contains(expense)) totalExpenses.add(expense); if (!totalExpenses.contains(expense)) totalExpenses.add(expense);
} }
// Fetch expenses where you are the beneficiary and not paid (amount owed to you), filtered by year // Fetch expenses where you are the beneficiary and not paid (amount owed to you), filtered by year
List<Expense> beneficiaryExpenses = expenseRepository.findExpensesByBeneficiaryAndYear(loggedInPerson.getId(), yearValue); List<Expense> payerExpenses = expenseRepository.findExpensesByPayerAndYear(loggedInPerson.getId(), yearValue);
for (Expense expense : beneficiaryExpenses) { for (Expense expense : payerExpenses) {
if (Boolean.FALSE.equals(expense.getIsPaid()) && !totalExpenses.contains(expense)) totalExpenses.add(expense); if (Boolean.FALSE.equals(expense.getIsPaid()) && !totalExpenses.contains(expense)) totalExpenses.add(expense);
} }
return totalExpenses; return totalExpenses;
} }
// ================================ // ================================
// Private methods // Private methods
// ================================ // ================================

View file

@ -0,0 +1,90 @@
package com.application.munera.services;
import com.application.munera.data.Expense;
import com.application.munera.data.Person;
import com.application.munera.repositories.ExpenseRepository;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;
import java.time.Year;
import java.util.ArrayList;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
@MockitoSettings(strictness = Strictness.LENIENT)
class ExpenseServiceTest {
@Mock
private ExpenseRepository expenseRepository;
@Mock
private Person loggedInPerson;
@InjectMocks
private ExpenseService expenseService;
private Year year;
@BeforeEach
public void setUp() {
year = Year.of(2023);
when(loggedInPerson.getId()).thenReturn(1L);
}
@Test
public void testFetchExpensesForDashboard_NoExpenses() {
when(expenseRepository.findExpensesByPayerAndBeneficiaryAndYear(loggedInPerson.getId(), year.getValue()))
.thenReturn(new ArrayList<>());
when(expenseRepository.findExpensesByBeneficiaryAndYear(loggedInPerson.getId(), year.getValue()))
.thenReturn(new ArrayList<>());
when(expenseRepository.findExpensesByPayerAndYear(loggedInPerson.getId(), year.getValue()))
.thenReturn(new ArrayList<>());
List<Expense> result = expenseService.fetchExpensesForDashboard(loggedInPerson, year);
assertEquals(0, result.size(), "Expected no expenses to be fetched");
}
@Test
void testFetchExpensesForDashboard_WithSelfExpenses() {
Expense selfExpense = new Expense(); // Create a dummy Expense object
List<Expense> bothExpenses = List.of(selfExpense);
when(expenseRepository.findExpensesByPayerAndBeneficiaryAndYear(loggedInPerson.getId(), year.getValue()))
.thenReturn(bothExpenses);
when(expenseRepository.findExpensesByBeneficiaryAndYear(loggedInPerson.getId(), year.getValue()))
.thenReturn(new ArrayList<>());
when(expenseRepository.findExpensesByPayerAndYear(loggedInPerson.getId(), year.getValue()))
.thenReturn(new ArrayList<>());
List<Expense> result = expenseService.fetchExpensesForDashboard(loggedInPerson, year);
assertEquals(1, result.size(), "Expected one self-expense to be fetched");
assertEquals(selfExpense, result.get(0), "Expected the self-expense to match");
}
@Test
void testFetchExpensesForDashboard_WithUnpaidExpenses() {
Expense unpaidExpense = new Expense();
unpaidExpense.setIsPaid(false);
when(expenseRepository.findExpensesByPayerAndBeneficiaryAndYear(loggedInPerson.getId(), year.getValue()))
.thenReturn(new ArrayList<>());
when(expenseRepository.findExpensesByBeneficiaryAndYear(loggedInPerson.getId(), year.getValue()))
.thenReturn(new ArrayList<>());
when(expenseRepository.findExpensesByPayerAndYear(loggedInPerson.getId(), year.getValue()))
.thenReturn(List.of(unpaidExpense));
List<Expense> result = expenseService.fetchExpensesForDashboard(loggedInPerson, year);
assertEquals(1, result.size(), "Expected one unpaid expense to be fetched");
assertEquals(unpaidExpense, result.getFirst(), "Expected the unpaid expense to match");
}
}