From d528f285460e63e47a1b98ff2fdd9b5b775aabd6 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sun, 19 Jul 2020 20:28:41 +0200
Subject: [PATCH] #531 - added simple integration tests for repeating
 transactions

---
 .../de/deadlocker8/budgetmaster/Main.java     |  2 -
 .../utils/DatabaseConfiguration.java          |  2 +
 .../integration/DateRepairTest.java           | 79 +++++++++++++++++++
 3 files changed, 81 insertions(+), 2 deletions(-)
 create mode 100644 src/test/java/de/deadlocker8/budgetmaster/integration/DateRepairTest.java

diff --git a/src/main/java/de/deadlocker8/budgetmaster/Main.java b/src/main/java/de/deadlocker8/budgetmaster/Main.java
index c9b0949a9..1ec0c1ab7 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/Main.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/Main.java
@@ -132,8 +132,6 @@ public class Main extends SpringBootServletInitializer implements ApplicationRun
 				LOGGER.info("Mode not supported! Starting in NORMAL Mode");
 				return baseFolder;
 		}
-
-
 	}
 
 	public static void main(String[] args)
diff --git a/src/main/java/de/deadlocker8/budgetmaster/utils/DatabaseConfiguration.java b/src/main/java/de/deadlocker8/budgetmaster/utils/DatabaseConfiguration.java
index 4ed2efc64..0938019d8 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/utils/DatabaseConfiguration.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/utils/DatabaseConfiguration.java
@@ -5,11 +5,13 @@ import org.springframework.boot.jdbc.DataSourceBuilder;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Primary;
+import org.springframework.context.annotation.Profile;
 
 import javax.sql.DataSource;
 import java.nio.file.Path;
 
 @Configuration
+@Profile("!test")
 public class DatabaseConfiguration
 {
 	@Bean
diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/DateRepairTest.java b/src/test/java/de/deadlocker8/budgetmaster/integration/DateRepairTest.java
new file mode 100644
index 000000000..74a1d91d6
--- /dev/null
+++ b/src/test/java/de/deadlocker8/budgetmaster/integration/DateRepairTest.java
@@ -0,0 +1,79 @@
+package de.deadlocker8.budgetmaster.integration;
+
+import de.deadlocker8.budgetmaster.Main;
+import de.deadlocker8.budgetmaster.tags.Tag;
+import de.deadlocker8.budgetmaster.transactions.Transaction;
+import de.deadlocker8.budgetmaster.transactions.TransactionRepository;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.jdbc.DataSourceBuilder;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.context.TestConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Import;
+import org.springframework.context.annotation.Primary;
+import org.springframework.core.io.Resource;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = Main.class)
+@Import(DateRepairTest.TestDatabaseConfiguration.class)
+@ActiveProfiles("test")
+@Transactional
+public class DateRepairTest
+{
+	@TestConfiguration
+	static class TestDatabaseConfiguration
+	{
+		@Value("classpath:repeating_with_tags.mv.db")
+		private Resource databaseResource;
+
+		@Bean
+		@Primary
+		public DataSource dataSource() throws IOException
+		{
+			final String folderName = databaseResource.getFile().getAbsolutePath().replace(".mv.db", "");
+			String jdbcString = "jdbc:h2:/" + folderName + ";DB_CLOSE_ON_EXIT=TRUE";
+			return DataSourceBuilder.create().username("sa").password("").url(jdbcString).driverClassName("org.h2.Driver").build();
+		}
+	}
+
+	@Autowired
+	private TransactionRepository transactionRepository;
+
+	@Test
+	public void test_Repeating_WithTags()
+	{
+		final List<Transaction> transactions = transactionRepository.findAll();
+		assertThat(transactions).hasSize(4);
+
+		assertThat(transactions.stream()
+				.map(t -> t.getTags().stream()
+						.map(Tag::getName).toArray(String[]::new))
+				.toArray(String[][]::new))
+				.containsOnly(new String[]{"0815", "abc"});
+	}
+
+	@Test
+	public void test_Repeating()
+	{
+		final List<Transaction> transactions = transactionRepository.findAll();
+		assertThat(transactions).hasSize(4);
+
+		assertThat(transactions.stream()
+				.map(t -> t.getDate().getHourOfDay())
+				.collect(Collectors.toList()))
+				.containsOnly(0);
+	}
+}
-- 
GitLab