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 d35d7ceacb0a1d7ac9463e4062a1f6bce4c31e72..b4907d6c2fcafd310a964c49cc51db7eac4d5071 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 088e0778db02b09d263368a18d9db5e010603b7f..2315d8ae21af618cec0439c4ab4651d6d7406d3b 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