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