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 0c78d09c8bd2fd2edac66efa9259c292e1e1b899..c81841c19c08a9f7d82ea3f4ad7d5fc3c053dbe9 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 d94dc12cab101a9f6eb63aa90823098a35039358..4bd90cea90b2df76a1a67f955ecfbab3fb131a24 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 0000000000000000000000000000000000000000..5c330431b05a66fc97512e762f3c86ac1fdc7319 --- /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(); + } +}