Skip to content
Snippets Groups Projects
Commit 63bd429b authored by Robert Goldmann's avatar Robert Goldmann
Browse files

Fixed #647 - prevent duplicated search results if search text is found in name and tags

parent a98a423f
Branches
Tags
No related merge requests found
...@@ -44,7 +44,7 @@ public class TransactionSearchSpecifications ...@@ -44,7 +44,7 @@ public class TransactionSearchSpecifications
if(search.isSearchTags()) if(search.isSearchTags())
{ {
final Join<Transaction, Tag> tagJoin = transaction.join(Transaction_.tags, JoinType.LEFT); Join<Transaction, Tag> tagJoin = transaction.join(Transaction_.tags, JoinType.LEFT);
predicates.add(builder.like(builder.lower(tagJoin.get(Tag_.name).as(String.class)), pattern)); predicates.add(builder.like(builder.lower(tagJoin.get(Tag_.name).as(String.class)), pattern));
} }
...@@ -52,9 +52,9 @@ public class TransactionSearchSpecifications ...@@ -52,9 +52,9 @@ public class TransactionSearchSpecifications
Predicate predicatesCombined = builder.or(predicates.toArray(predicatesArray)); Predicate predicatesCombined = builder.or(predicates.toArray(predicatesArray));
Predicate accountStatePredicate = transaction.get(Transaction_.account).get("accountState").in(getAllowedAccountStates(search)); Predicate accountStatePredicate = transaction.get(Transaction_.account).get("accountState").in(getAllowedAccountStates(search));
;
query.orderBy(builder.desc(transaction.get(Transaction_.date))); query.orderBy(builder.desc(transaction.get(Transaction_.date)));
query.distinct(true);
return builder.and(accountStatePredicate, predicatesCombined); return builder.and(accountStatePredicate, predicatesCombined);
}; };
} }
......
...@@ -43,6 +43,7 @@ class TransactionSearchSpecificationsTest ...@@ -43,6 +43,7 @@ class TransactionSearchSpecificationsTest
private Transaction repeatingTransaction; private Transaction repeatingTransaction;
private Transaction transferTransaction; private Transaction transferTransaction;
private Transaction transactionFromHiddenAccount; private Transaction transactionFromHiddenAccount;
private Transaction transactionWithMultipleTags;
@Autowired @Autowired
private CategoryRepository categoryRepository; private CategoryRepository categoryRepository;
...@@ -134,6 +135,15 @@ class TransactionSearchSpecificationsTest ...@@ -134,6 +135,15 @@ class TransactionSearchSpecificationsTest
transactionFromHiddenAccount.setCategory(category2); transactionFromHiddenAccount.setCategory(category2);
transactionFromHiddenAccount.setAccount(accountHidden); transactionFromHiddenAccount.setAccount(accountHidden);
transactionFromHiddenAccount = transactionRepository.save(transactionFromHiddenAccount); transactionFromHiddenAccount = transactionRepository.save(transactionFromHiddenAccount);
transactionWithMultipleTags = new Transaction();
transactionWithMultipleTags.setName("I am the TagMaster");
transactionWithMultipleTags.setAmount(-525);
transactionWithMultipleTags.setDate(new DateTime(2018, 11, 3, 12, 0, 0, 0));
transactionWithMultipleTags.setCategory(category1);
transactionWithMultipleTags.setAccount(account);
transactionWithMultipleTags.setTags(List.of(tag1, tag2));
transactionWithMultipleTags = transactionRepository.save(transactionWithMultipleTags);
} }
@Test @Test
...@@ -199,11 +209,12 @@ class TransactionSearchSpecificationsTest ...@@ -199,11 +209,12 @@ class TransactionSearchSpecificationsTest
Specification spec = TransactionSearchSpecifications.withDynamicQuery(search); Specification spec = TransactionSearchSpecifications.withDynamicQuery(search);
List<Transaction> results = transactionRepository.findAll(spec); List<Transaction> results = transactionRepository.findAll(spec);
assertThat(results).hasSize(4) assertThat(results).hasSize(5)
.contains(transaction1) .contains(transaction1)
.contains(transaction2) .contains(transaction2)
.contains(repeatingTransaction) .contains(repeatingTransaction)
.contains(transferTransaction); .contains(transferTransaction)
.contains(transactionWithMultipleTags);
} }
@Test @Test
...@@ -213,10 +224,11 @@ class TransactionSearchSpecificationsTest ...@@ -213,10 +224,11 @@ class TransactionSearchSpecificationsTest
Specification spec = TransactionSearchSpecifications.withDynamicQuery(search); Specification spec = TransactionSearchSpecifications.withDynamicQuery(search);
List<Transaction> results = transactionRepository.findAll(spec); List<Transaction> results = transactionRepository.findAll(spec);
assertThat(results).hasSize(3) assertThat(results).hasSize(4)
.contains(transaction1) .contains(transaction1)
.contains(repeatingTransaction) .contains(repeatingTransaction)
.contains(transferTransaction); .contains(transferTransaction)
.contains(transactionWithMultipleTags);
} }
@Test @Test
...@@ -246,8 +258,8 @@ class TransactionSearchSpecificationsTest ...@@ -246,8 +258,8 @@ class TransactionSearchSpecificationsTest
Specification spec = TransactionSearchSpecifications.withDynamicQuery(search); Specification spec = TransactionSearchSpecifications.withDynamicQuery(search);
List<Transaction> results = transactionRepository.findAll(spec); List<Transaction> results = transactionRepository.findAll(spec);
assertThat(results).hasSize(1) assertThat(results).hasSize(2)
.contains(transaction1); .contains(transaction1, transactionWithMultipleTags);
} }
@Test @Test
...@@ -257,8 +269,8 @@ class TransactionSearchSpecificationsTest ...@@ -257,8 +269,8 @@ class TransactionSearchSpecificationsTest
Specification spec = TransactionSearchSpecifications.withDynamicQuery(search); Specification spec = TransactionSearchSpecifications.withDynamicQuery(search);
List<Transaction> results = transactionRepository.findAll(spec); List<Transaction> results = transactionRepository.findAll(spec);
assertThat(results).hasSize(1) assertThat(results).hasSize(2)
.contains(transaction1); .contains(transaction1, transactionWithMultipleTags);
} }
@Test @Test
...@@ -280,4 +292,14 @@ class TransactionSearchSpecificationsTest ...@@ -280,4 +292,14 @@ class TransactionSearchSpecificationsTest
List<Transaction> results = transactionRepository.findAll(spec); List<Transaction> results = transactionRepository.findAll(spec);
assertThat(results).containsExactly(transactionFromHiddenAccount); assertThat(results).containsExactly(transactionFromHiddenAccount);
} }
@Test
void getMatches_AvoidDuplicatedEntriesIfSearchTextIsFoundInMultipleCriteria()
{
Search search = new Search("TagMaster", true, true, true, true, false, 0);
Specification spec = TransactionSearchSpecifications.withDynamicQuery(search);
List<Transaction> results = transactionRepository.findAll(spec);
assertThat(results).containsExactly(transactionWithMultipleTags, repeatingTransaction);
}
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment