package com.github.gaborfeher.grantmaster.logic.wrappers;
import com.github.gaborfeher.grantmaster.framework.utils.DatabaseSingleton;
import com.github.gaborfeher.grantmaster.logic.entities.BudgetCategory;
import com.github.gaborfeher.grantmaster.logic.entities.Currency;
import com.github.gaborfeher.grantmaster.logic.entities.Project;
import com.github.gaborfeher.grantmaster.logic.entities.ProjectReport;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.persistence.EntityManager;
import org.junit.After;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
import static com.github.gaborfeher.grantmaster.logic.wrappers.TestUtils.assertBigDecimalEquals;
public class GlobalBudgetCategoryWrapperTest extends TestBase {
Currency HUF;
Currency USD;
Currency EUR;
BudgetCategory INCOME_CAT1;
BudgetCategory INCOME_CAT2;
BudgetCategory PAYMENT_CAT1;
BudgetCategory PAYMENT_CAT2;
BudgetCategory PAYMENT_CAT3;
Project PROJECT1;
Project PROJECT2;
ProjectReport PROJECT1_REPORT1;
ProjectReport PROJECT1_REPORT2;
ProjectReport PROJECT2_REPORT1;
public GlobalBudgetCategoryWrapperTest() {
}
@Before
public void setUp() {
assertTrue(DatabaseSingleton.INSTANCE.connectToMemoryFileForTesting());
assertTrue(DatabaseSingleton.INSTANCE.transaction((EntityManager em) -> {
HUF = TestUtils.createCurrency(em, "HUF");
USD = TestUtils.createCurrency(em, "USD");
EUR = TestUtils.createCurrency(em, "EUR");
INCOME_CAT1 = new BudgetCategory(
BudgetCategory.Direction.INCOME, "group1", "income1");
em.persist(INCOME_CAT1);
INCOME_CAT2 = new BudgetCategory(
BudgetCategory.Direction.INCOME, "group2", "income2");
em.persist(INCOME_CAT2);
PAYMENT_CAT1 = new BudgetCategory(
BudgetCategory.Direction.PAYMENT, "group3", "payment1");
PAYMENT_CAT2 = new BudgetCategory(
BudgetCategory.Direction.PAYMENT, "group3", "payment2");
PAYMENT_CAT3 = new BudgetCategory(
BudgetCategory.Direction.PAYMENT, "group4", "payment3");
em.persist(PAYMENT_CAT1);
em.persist(PAYMENT_CAT2);
em.persist(PAYMENT_CAT3);
PROJECT1 = TestUtils.createProject(
em, "project1", USD, HUF, INCOME_CAT1, Project.ExpenseMode.NORMAL_AUTO_BY_SOURCE);
PROJECT2 = TestUtils.createProject(
em, "project2", USD, HUF, INCOME_CAT2, Project.ExpenseMode.NORMAL_AUTO_BY_SOURCE);
PROJECT1_REPORT1 = TestUtils.createProjectReport(
em, PROJECT1, LocalDate.of(2011, 4, 1));
PROJECT1_REPORT2 = TestUtils.createProjectReport(
em, PROJECT1, LocalDate.of(2011, 8, 1));
PROJECT2_REPORT1 = TestUtils.createProjectReport(
em, PROJECT2, LocalDate.of(2011, 4, 1));
// Sources and expenses.
TestUtils.createProjectSource(
em, PROJECT1, LocalDate.of(2015, 2, 1), PROJECT1_REPORT1, "100", "10000");
TestUtils.createProjectSource(
em, PROJECT1, LocalDate.of(2015, 2, 2), PROJECT1_REPORT1, "100", "10000");
TestUtils.createProjectSource(
em, PROJECT2, LocalDate.of(2015, 2, 1), PROJECT1_REPORT1, "100.5", "10000");
TestUtils.createProjectExpense(em, PROJECT1, PAYMENT_CAT1, LocalDate.of(2014, 12, 1), PROJECT1_REPORT1, "42", HUF, "1100000.1");
TestUtils.createProjectExpense(em, PROJECT2, PAYMENT_CAT1, LocalDate.of(2015, 12, 7), PROJECT1_REPORT1, "42", HUF, "1010000.1");
TestUtils.createProjectExpense(em, PROJECT1, PAYMENT_CAT1, LocalDate.of(2015, 12, 3), PROJECT1_REPORT2, "42", HUF, "1001000.1");
TestUtils.createProjectExpense(em, PROJECT1, PAYMENT_CAT2, LocalDate.of(2015, 12, 2), PROJECT1_REPORT2, "42", HUF, "1000010.1");
TestUtils.createProjectExpense(em, PROJECT1, PAYMENT_CAT3, LocalDate.of(2015, 12, 4), PROJECT1_REPORT2, "42", HUF, "1000001.1");
return true;
}));
}
@After
public void tearDown() {
DatabaseSingleton.INSTANCE.close();
}
@Test
public void testGetYearlyBudgetCategorySummaries() {
DatabaseSingleton.INSTANCE.query((EntityManager em) -> {
List<GlobalBudgetCategoryWrapper> incomes = new ArrayList<>();
List<GlobalBudgetCategoryWrapper> expenses = new ArrayList<>();
Set<String> columnNames = new HashSet<>();
GlobalBudgetCategoryWrapper.getYearlyBudgetCategorySummaries(
em,
expenses,
incomes,
columnNames);
// Columns.
assertEquals(2, columnNames.size());
assertTrue(columnNames.contains("2014 (HUF)"));
assertTrue(columnNames.contains("2015 (HUF)"));
// Expenses.
assertBigDecimalEquals(
"2011000.2",
TestUtils.findByBudgetCategory(expenses, PAYMENT_CAT1).getProperty("2015 (HUF)"));
assertBigDecimalEquals(
"1100000.1",
TestUtils.findByBudgetCategory(expenses, PAYMENT_CAT1).getProperty("2014 (HUF)"));
assertBigDecimalEquals(
"1000001.1",
TestUtils.findByBudgetCategory(expenses, PAYMENT_CAT3).getProperty("2015 (HUF)"));
// Incomes.
assertBigDecimalEquals(
"2000000",
TestUtils.findByBudgetCategory(incomes, INCOME_CAT1).getProperty("2015 (HUF)"));
assertBigDecimalEquals(
"1005000",
TestUtils.findByBudgetCategory(incomes, INCOME_CAT2).getProperty("2015 (HUF)"));
return true;
});
}
}