package com.github.gaborfeher.grantmaster.logic.wrappers; import com.github.gaborfeher.grantmaster.framework.base.RowEditState; import com.github.gaborfeher.grantmaster.framework.utils.Utils; import com.github.gaborfeher.grantmaster.logic.entities.BudgetCategory; import com.github.gaborfeher.grantmaster.logic.entities.Currency; import com.github.gaborfeher.grantmaster.logic.entities.CurrencyPair; import com.github.gaborfeher.grantmaster.logic.entities.ExchangeRateItem; import com.github.gaborfeher.grantmaster.logic.entities.Project; import com.github.gaborfeher.grantmaster.logic.entities.ProjectBudgetLimit; import com.github.gaborfeher.grantmaster.logic.entities.ProjectNote; import com.github.gaborfeher.grantmaster.logic.entities.ProjectReport; import com.github.gaborfeher.grantmaster.logic.entities.ProjectSource; import java.math.BigDecimal; import java.sql.Timestamp; import java.time.LocalDate; import java.util.List; import java.util.Objects; import javax.persistence.EntityManager; import static org.junit.Assert.assertEquals; public class TestUtils { public static Project createProject( EntityManager em, String name, Currency income, Currency expense, BudgetCategory incomeCategory, Project.ExpenseMode expenseMode) { Project project = new Project(); project.setName(name); project.setAccountCurrency(expense); project.setGrantCurrency(income); project.setIncomeType(incomeCategory); project.setExpenseMode(expenseMode); em.persist(project); return project; } public static ProjectSource createProjectSource( EntityManager em, Project project, LocalDate date, ProjectReport report, String exchangeRate, String accountingCurrencyAmount) { ProjectSource projectSource = new ProjectSource(); projectSource.setProject(project); projectSource.setReport(report); projectSource.setAvailabilityDate(date); projectSource.setExchangeRate(new BigDecimal(exchangeRate, Utils.MC)); projectSource.setGrantCurrencyAmount( new BigDecimal(accountingCurrencyAmount, Utils.MC)); em.persist(projectSource); return projectSource; } static ProjectExpenseWrapper createProjectExpense( EntityManager em, Project project, BudgetCategory budgetCategory, LocalDate date, ProjectReport report, String originalAmount, Currency originalCurrency, String accountingCurrencyAmount) { ProjectExpenseWrapper newWrapper = ProjectExpenseWrapper.createNew(em, project); newWrapper.setState(RowEditState.EDITING_NEW); newWrapper.setProperty("originalCurrency", originalCurrency, Currency.class); newWrapper.setProperty("paymentDate", date, LocalDate.class); newWrapper.setProperty( "budgetCategory", budgetCategory, BudgetCategory.class); newWrapper.setProperty( "originalAmount", new BigDecimal(originalAmount, Utils.MC), BigDecimal.class); newWrapper.setProperty( "accountingCurrencyAmount", new BigDecimal(accountingCurrencyAmount, Utils.MC), BigDecimal.class); newWrapper.setProperty("report", report, ProjectReport.class); if (newWrapper.save(em)) { return newWrapper; } else { return null; } } static void createProjectNote( EntityManager em, Project project, Timestamp entryTime, String note) { ProjectNote projectNote = new ProjectNote(); projectNote.setEntryTime(entryTime); projectNote.setNote(note); projectNote.setProject(project); em.persist(projectNote); } static ProjectReport createProjectReport( EntityManager em, Project project, LocalDate reportDate) { ProjectReport report = new ProjectReport(); report.setProject(project); report.setReportDate(reportDate); em.persist(report); return report; } static void createProjectBudgetLimit( EntityManager em, Project project, BudgetCategory budgetCategory, String percentage, String budget) { ProjectBudgetLimit limit = new ProjectBudgetLimit(); limit.setProject(project); limit.setBudgetCategory(budgetCategory); if (percentage != null) { limit.setBudgetPercentage(new BigDecimal(percentage, Utils.MC)); } if (budget != null) { limit.setBudgetGrantCurrency(new BigDecimal(budget, Utils.MC)); } } static Currency createCurrency(EntityManager em, String code) { Currency currency = new Currency(); currency.setCode(code); em.persist(currency); return currency; } static CurrencyPair createCurrencyPair( EntityManager em, Currency fromCurrency, Currency toCurrency) { CurrencyPair currencyPair = new CurrencyPair(); currencyPair.setFromCurrency(fromCurrency); currencyPair.setToCurrency(toCurrency); em.persist(currencyPair); return currencyPair; } static void createExchangeRate( EntityManager em, CurrencyPair currencyPair, LocalDate rateDate, String rate) { ExchangeRateItem exchangeRateItem = new ExchangeRateItem(); exchangeRateItem.setCurrencies(currencyPair); exchangeRateItem.setRateDate(rateDate); exchangeRateItem.setRate(new BigDecimal(rate, Utils.MC)); em.persist(exchangeRateItem); } static ProjectWrapper findProjectByName( EntityManager em, String name) { for (ProjectWrapper project : ProjectWrapper.getProjects(em)) { if (name.equals(project.getEntity().getName())) { return project; } } return null; } static ProjectExpenseWrapper findExpenseById( EntityManager em, Project project, Long id) { for (ProjectExpenseWrapper expense : ProjectExpenseWrapper.getProjectExpenseList(em, project)) { if (Objects.equals(expense.getId(), id)) { return expense; } } return null; } static BudgetCategoryWrapperBase findByBudgetCategory( List list, BudgetCategory filter) { BudgetCategoryWrapperBase result = null; for (Object curObj : list) { BudgetCategoryWrapperBase cur = (BudgetCategoryWrapperBase)curObj; if (cur.getBudgetCategory().getId().equals(filter.getId())) { if (result != null) { throw new RuntimeException("Multiple matches."); } else { result = cur; } } } return result; } static void assertBigDecimalEquals(BigDecimal expected, Object tested) { assertEquals(0, expected.compareTo((BigDecimal)tested)); } static void assertBigDecimalEquals(String expected, Object tested) { assertBigDecimalEquals(new BigDecimal(expected, Utils.MC), tested); } }