From 5335a6a17d28fa7d80f953836d0a4371c50a651a Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sun, 16 Oct 2022 11:05:40 +0200
Subject: [PATCH] #721 - filter search results by date range

---
 .../TransactionSearchSpecifications.java          | 11 ++++++++++-
 .../unit/TransactionSearchSpecificationsTest.java | 15 +++++++++++++--
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSearchSpecifications.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSearchSpecifications.java
index d35d7ceac..b4907d6c2 100644
--- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSearchSpecifications.java
+++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSearchSpecifications.java
@@ -89,7 +89,16 @@ public class TransactionSearchSpecifications
 
 			query.orderBy(builder.desc(transaction.get(Transaction_.date)));
 			query.distinct(true);
-			return builder.and(accountStatePredicate, predicatesCombined);
+
+			final Predicate allPredicates = builder.and(accountStatePredicate, predicatesCombined);
+
+			if(search.getStartDate() != null && search.getEndDate() != null)
+			{
+				final Predicate dateConstraint = builder.between(transaction.get(Transaction_.date), search.getStartDate(), search.getEndDate());
+				return builder.and(dateConstraint, allPredicates);
+			}
+
+			return allPredicates;
 		};
 	}
 
diff --git a/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionSearchSpecificationsTest.java b/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionSearchSpecificationsTest.java
index 088e0778d..2315d8ae2 100644
--- a/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionSearchSpecificationsTest.java
+++ b/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionSearchSpecificationsTest.java
@@ -105,7 +105,7 @@ class TransactionSearchSpecificationsTest
 		transaction1.setName("Test");
 		transaction1.setAmount(200);
 		transaction1.setDescription("Random Whatever");
-		transaction1.setDate(LocalDate.of(2018, 10, 3));
+		transaction1.setDate(LocalDate.of(2017, 10, 3));
 		transaction1.setCategory(category1);
 		transaction1.setAccount(account);
 		ArrayList<Tag> tags = new ArrayList<>();
@@ -161,7 +161,7 @@ class TransactionSearchSpecificationsTest
 		transactionWithMultipleTags = new Transaction();
 		transactionWithMultipleTags.setName("I am the TagMaster");
 		transactionWithMultipleTags.setAmount(-525);
-		transactionWithMultipleTags.setDate(LocalDate.of(2018, 11, 3));
+		transactionWithMultipleTags.setDate(LocalDate.of(2022, 11, 3));
 		transactionWithMultipleTags.setCategory(category1);
 		transactionWithMultipleTags.setAccount(account);
 		transactionWithMultipleTags.setTags(List.of(tag1, tag2));
@@ -335,4 +335,15 @@ class TransactionSearchSpecificationsTest
 		assertThat(results).hasSize(1)
 				.contains(transactionWithMultipleTags);
 	}
+
+	@Test
+	void getMatches_OnlyInDateRange()
+	{
+		Search search = new Search("", true, true, true, true, true, 0, LocalDate.of(2018, 1, 1), LocalDate.of(2019, 1, 1));
+		Specification spec = TransactionSearchSpecifications.withDynamicQuery(search);
+
+		List<Transaction> results = transactionRepository.findAll(spec);
+		assertThat(results).hasSize(4)
+				.contains(transaction2, transferTransaction, repeatingTransaction, transactionFromHiddenAccount);
+	}
 }
\ No newline at end of file
-- 
GitLab