diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionImportService.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionImportService.java
index 1b6e239237c99e3102d32efa3764985c1cd2daa2..eaf3ecde728f5917986fa62b246f26ab22b9fae6 100644
--- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionImportService.java
+++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionImportService.java
@@ -7,8 +7,6 @@ import de.deadlocker8.budgetmaster.services.HelpersService;
 import de.deadlocker8.budgetmaster.settings.SettingsService;
 import de.deadlocker8.budgetmaster.transactions.csvimport.*;
 import de.thecodelabs.utils.util.Localization;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -18,8 +16,6 @@ import java.util.Optional;
 @Service
 public class TransactionImportService
 {
-	private static final Logger LOGGER = LoggerFactory.getLogger(TransactionImportService.class);
-
 	private final HelpersService helpersService;
 	private final SettingsService settingsService;
 	private final CategoryService categoryService;
diff --git a/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionImportServiceTest.java b/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionImportServiceTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..d94dc12cab101a9f6eb63aa90823098a35039358
--- /dev/null
+++ b/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionImportServiceTest.java
@@ -0,0 +1,167 @@
+package de.deadlocker8.budgetmaster.unit;
+
+import de.deadlocker8.budgetmaster.accounts.Account;
+import de.deadlocker8.budgetmaster.accounts.AccountType;
+import de.deadlocker8.budgetmaster.categories.Category;
+import de.deadlocker8.budgetmaster.categories.CategoryService;
+import de.deadlocker8.budgetmaster.categories.CategoryType;
+import de.deadlocker8.budgetmaster.services.HelpersService;
+import de.deadlocker8.budgetmaster.settings.Settings;
+import de.deadlocker8.budgetmaster.settings.SettingsService;
+import de.deadlocker8.budgetmaster.transactions.Transaction;
+import de.deadlocker8.budgetmaster.transactions.TransactionImportService;
+import de.deadlocker8.budgetmaster.transactions.csvimport.*;
+import de.deadlocker8.budgetmaster.unit.helpers.LocalizedTest;
+import de.deadlocker8.budgetmaster.utils.LanguageType;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+
+import java.time.LocalDate;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+
+@ExtendWith(SpringExtension.class)
+@LocalizedTest
+class TransactionImportServiceTest
+{
+	private static final Category CATEGORY_NONE = new Category("No category", "#FFFFFF", CategoryType.NONE);
+	private static final Category CATEGORY_CUSTOM = new Category("CustomCategory", "#0F0F0F", CategoryType.CUSTOM);
+	private static final Account ACCOUNT = new Account("MyAccount", AccountType.CUSTOM);
+
+	@Mock
+	private HelpersService helpersService;
+
+	@Mock
+	private SettingsService settingsService;
+
+	@Mock
+	private CategoryService categoryService;
+
+	@InjectMocks
+	private TransactionImportService transactionImportService;
+
+	@Test
+	void test_createTransactionFromCsvTransaction_income()
+	{
+		final LocalDate date = LocalDate.of(2023, 1, 21);
+		final CsvTransaction csvTransaction = new CsvTransaction(date, "Awesome", 750, "Lorem Ipsum", CsvTransactionStatus.PENDING, CATEGORY_NONE);
+
+		final Transaction expectedTransaction = new Transaction();
+		expectedTransaction.setID(null);
+		expectedTransaction.setName("Awesome");
+		expectedTransaction.setAmount(750);
+		expectedTransaction.setCategory(CATEGORY_NONE);
+		expectedTransaction.setAccount(ACCOUNT);
+		expectedTransaction.setIsExpenditure(false);
+		expectedTransaction.setDate(date);
+		expectedTransaction.setDescription("Lorem Ipsum");
+
+		Mockito.when(helpersService.getCurrentAccountOrDefault()).thenReturn(ACCOUNT);
+
+		assertThat(transactionImportService.createTransactionFromCsvTransaction(csvTransaction))
+				.isEqualTo(expectedTransaction);
+	}
+
+	@Test
+	void test_createTransactionFromCsvTransaction_expenditure()
+	{
+		final LocalDate date = LocalDate.of(2023, 1, 21);
+		final CsvTransaction csvTransaction = new CsvTransaction(date, "Awesome", -1200, "Lorem Ipsum", CsvTransactionStatus.PENDING, CATEGORY_NONE);
+
+		final Transaction expectedTransaction = new Transaction();
+		expectedTransaction.setID(null);
+		expectedTransaction.setName("Awesome");
+		expectedTransaction.setAmount(-1200);
+		expectedTransaction.setCategory(CATEGORY_NONE);
+		expectedTransaction.setAccount(ACCOUNT);
+		expectedTransaction.setIsExpenditure(true);
+		expectedTransaction.setDate(date);
+		expectedTransaction.setDescription("Lorem Ipsum");
+
+		Mockito.when(helpersService.getCurrentAccountOrDefault()).thenReturn(ACCOUNT);
+
+		assertThat(transactionImportService.createTransactionFromCsvTransaction(csvTransaction))
+				.isEqualTo(expectedTransaction);
+	}
+
+	@Test
+	void test_updateCsvTransaction()
+	{
+		final LocalDate date = LocalDate.of(2023, 1, 21);
+		final CsvTransaction existingCsvTransaction = new CsvTransaction(date, "Awesome", -1200, "Lorem Ipsum", CsvTransactionStatus.IMPORTED, CATEGORY_NONE);
+		final CsvTransaction csvTransactionWithNewAttributes = new CsvTransaction(date, "Over 9000", -1200, "dolor sit amet", CsvTransactionStatus.PENDING, CATEGORY_CUSTOM);
+
+		final CsvTransaction expectedCsvTransaction = new CsvTransaction(date, "Over 9000", -1200, "dolor sit amet", CsvTransactionStatus.IMPORTED, CATEGORY_CUSTOM);
+
+		transactionImportService.updateCsvTransaction(existingCsvTransaction, csvTransactionWithNewAttributes);
+		assertThat(existingCsvTransaction)
+				.isEqualTo(expectedCsvTransaction);
+	}
+
+	@Test
+	void test_createCsvTransactionFromCsvRow() throws CsvTransactionParseException
+	{
+		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.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);
+		Mockito.when(categoryService.findByType(CategoryType.NONE)).thenReturn(CATEGORY_NONE);
+
+		final CsvTransaction csvTransaction = transactionImportService.createCsvTransactionFromCsvRow(csvRow, csvColumnSettings, 0);
+
+		assertThat(csvTransaction)
+				.isEqualTo(expectedCsvTransaction);
+	}
+
+	@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);
+		Mockito.when(categoryService.findByType(CategoryType.NONE)).thenReturn(CATEGORY_NONE);
+
+		assertThatThrownBy(() -> transactionImportService.createCsvTransactionFromCsvRow(csvRow, csvColumnSettings, 0))
+				.isInstanceOf(CsvTransactionParseException.class)
+				.hasMessageContaining("Error parsing the date in line 1");
+	}
+
+	@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);
+		Mockito.when(categoryService.findByType(CategoryType.NONE)).thenReturn(CATEGORY_NONE);
+
+		assertThatThrownBy(() -> transactionImportService.createCsvTransactionFromCsvRow(csvRow, csvColumnSettings, 0))
+				.isInstanceOf(CsvTransactionParseException.class)
+				.hasMessageContaining("Error parsing the amount in line 1");
+	}
+}