From aeb87458ec6273f40b98f4b93c7eb97fac387b87 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Sat, 21 Jan 2023 12:13:09 +0100 Subject: [PATCH] #724 - added tests for CsvParser --- .../transactions/csvimport/CsvRow.java | 16 ++++++ .../unit/TransactionImportServiceTest.java | 8 --- .../transaction/csvimport/CsvParserTest.java | 57 +++++++++++++++++++ 3 files changed, 73 insertions(+), 8 deletions(-) create mode 100644 BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/transaction/csvimport/CsvParserTest.java diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/csvimport/CsvRow.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/csvimport/CsvRow.java index 0c78d09c8..c81841c19 100644 --- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/csvimport/CsvRow.java +++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/csvimport/CsvRow.java @@ -1,6 +1,7 @@ package de.deadlocker8.budgetmaster.transactions.csvimport; import java.util.List; +import java.util.Objects; public class CsvRow { @@ -21,6 +22,21 @@ public class CsvRow return columns; } + @Override + public boolean equals(Object o) + { + if(this == o) return true; + if(o == null || getClass() != o.getClass()) return false; + CsvRow csvRow = (CsvRow) o; + return Objects.equals(columns, csvRow.columns); + } + + @Override + public int hashCode() + { + return Objects.hash(columns); + } + @Override public String toString() { diff --git a/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionImportServiceTest.java b/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionImportServiceTest.java index d94dc12ca..4bd90cea9 100644 --- a/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionImportServiceTest.java +++ b/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionImportServiceTest.java @@ -128,13 +128,9 @@ class TransactionImportServiceTest @Test void test_createCsvTransactionFromCsvRow_dateParseException() { - final LocalDate date = LocalDate.of(2023, 1, 21); - final CsvRow csvRow = new CsvRow("21.01.2023", "Groceries", "-12.00", "dolor sit amet"); final CsvColumnSettings csvColumnSettings = new CsvColumnSettings(1, "dd.MM.", 2, 3, 4); - final CsvTransaction expectedCsvTransaction = new CsvTransaction(date, "Groceries", -1200, "dolor sit amet", CsvTransactionStatus.PENDING, CATEGORY_NONE); - final Settings settings = new Settings(); settings.setLanguage(LanguageType.ENGLISH); Mockito.when(settingsService.getSettings()).thenReturn(settings); @@ -148,13 +144,9 @@ class TransactionImportServiceTest @Test void test_createCsvTransactionFromCsvRow_amountParseException() { - final LocalDate date = LocalDate.of(2023, 1, 21); - final CsvRow csvRow = new CsvRow("21.01.2023", "Groceries", "non_amount", "dolor sit amet"); final CsvColumnSettings csvColumnSettings = new CsvColumnSettings(1, "dd.MM.yyyy", 2, 3, 4); - final CsvTransaction expectedCsvTransaction = new CsvTransaction(date, "Groceries", -1200, "dolor sit amet", CsvTransactionStatus.PENDING, CATEGORY_NONE); - final Settings settings = new Settings(); settings.setLanguage(LanguageType.ENGLISH); Mockito.when(settingsService.getSettings()).thenReturn(settings); diff --git a/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/transaction/csvimport/CsvParserTest.java b/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/transaction/csvimport/CsvParserTest.java new file mode 100644 index 000000000..5c330431b --- /dev/null +++ b/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/transaction/csvimport/CsvParserTest.java @@ -0,0 +1,57 @@ +package de.deadlocker8.budgetmaster.unit.transaction.csvimport; + +import com.opencsv.exceptions.CsvValidationException; +import de.deadlocker8.budgetmaster.transactions.csvimport.CsvParser; +import de.deadlocker8.budgetmaster.transactions.csvimport.CsvRow; +import org.junit.jupiter.api.Test; + +import java.io.IOException; + +import static org.assertj.core.api.Assertions.assertThat; + +class CsvParserTest +{ + private static final String VALID_CSV = "Date;Title;Amount\n" + + "03.01.2023;Lorem;50.00\n" + + "05.01.2023;Ipsum;-8.37\n" + + "08.01.2023;dolor sit amet;-12.00"; + + @Test + void test_parseCsv_emptyFile() throws CsvValidationException, IOException + { + assertThat(CsvParser.parseCsv("", ';', 0)) + .isEmpty(); + } + + @Test + void test_parseCsv_separatorNotPresent() throws CsvValidationException, IOException + { + assertThat(CsvParser.parseCsv("abc,17", ';', 0)) + .containsExactly(new CsvRow("abc,17")); + } + + @Test + void test_parseCsv() throws CsvValidationException, IOException + { + assertThat(CsvParser.parseCsv(VALID_CSV, ';', 0)). + containsExactly(new CsvRow("Date", "Title", "Amount"), + new CsvRow("03.01.2023", "Lorem", "50.00"), + new CsvRow("05.01.2023", "Ipsum", "-8.37"), + new CsvRow("08.01.2023", "dolor sit amet", "-12.00")); + } + + @Test + void test_parseCsv_skipLines() throws CsvValidationException, IOException + { + assertThat(CsvParser.parseCsv(VALID_CSV, ';', 2)). + containsExactly(new CsvRow("05.01.2023", "Ipsum", "-8.37"), + new CsvRow("08.01.2023", "dolor sit amet", "-12.00")); + } + + @Test + void test_parseCsv_skipLines_moreThanExisting() throws CsvValidationException, IOException + { + assertThat(CsvParser.parseCsv(VALID_CSV, ';', 999)) + .isEmpty(); + } +} -- GitLab