diff --git a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSearchSpecifications.java b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSearchSpecifications.java index 4da6e8dabcbf7ecbd0bef17b8ba729cfe8764ad8..ed3afbb43e66fdf343f1dcbf2c5e9400a1f2cc87 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSearchSpecifications.java +++ b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSearchSpecifications.java @@ -1,5 +1,6 @@ package de.deadlocker8.budgetmaster.transactions; +import de.deadlocker8.budgetmaster.accounts.AccountState; import de.deadlocker8.budgetmaster.categories.Category; import de.deadlocker8.budgetmaster.search.Search; import de.deadlocker8.budgetmaster.tags.Tag; @@ -47,9 +48,13 @@ public class TransactionSearchSpecifications predicates.add(builder.like(builder.lower(tagJoin.get(Tag_.name).as(String.class)), pattern)); } - query.orderBy(builder.desc(transaction.get(Transaction_.date))); Predicate[] predicatesArray = new Predicate[predicates.size()]; - return builder.or(predicates.toArray(predicatesArray)); + Predicate predicatesCombined = builder.or(predicates.toArray(predicatesArray)); + + Predicate accountStatePredicate = transaction.get(Transaction_.account).get("accountState").in(List.of(AccountState.FULL_ACCESS, AccountState.READ_ONLY)); + + query.orderBy(builder.desc(transaction.get(Transaction_.date))); + return builder.and(accountStatePredicate, predicatesCombined); }; } } diff --git a/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionSearchSpecificationsTest.java b/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionSearchSpecificationsTest.java index 40e281d69b1f9665503a04f8423b6bf4572bd329..3443d602576d82a34a847c0a96ca6f46df50d89e 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionSearchSpecificationsTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionSearchSpecificationsTest.java @@ -2,6 +2,7 @@ package de.deadlocker8.budgetmaster.unit; import de.deadlocker8.budgetmaster.accounts.Account; import de.deadlocker8.budgetmaster.accounts.AccountRepository; +import de.deadlocker8.budgetmaster.accounts.AccountState; import de.deadlocker8.budgetmaster.accounts.AccountType; import de.deadlocker8.budgetmaster.categories.Category; import de.deadlocker8.budgetmaster.categories.CategoryRepository; @@ -41,6 +42,7 @@ public class TransactionSearchSpecificationsTest private Transaction transaction2; private Transaction repeatingTransaction; private Transaction transferTransaction; + private Transaction transactionFromHiddenAccount; @Autowired private CategoryRepository categoryRepository; @@ -51,6 +53,7 @@ public class TransactionSearchSpecificationsTest private AccountRepository accountRepository; private Account account; private Account account2; + private Account accountHidden; @Autowired private TagRepository tagRepository; @@ -66,6 +69,8 @@ public class TransactionSearchSpecificationsTest { account = accountRepository.save(new Account("TestAccount", AccountType.CUSTOM)); account2 = accountRepository.save(new Account("TestAccount2", AccountType.CUSTOM)); + accountHidden = accountRepository.save(new Account("Hidden account", AccountType.CUSTOM)); + accountHidden.setAccountState(AccountState.HIDDEN); category1 = categoryRepository.save(new Category("Category1", "#ff0000", CategoryType.CUSTOM)); category2 = categoryRepository.save(new Category("xxx", "#ff0000", CategoryType.CUSTOM)); @@ -121,6 +126,14 @@ public class TransactionSearchSpecificationsTest transferTransaction.setAccount(account); transferTransaction.setTransferAccount(account2); transferTransaction = transactionRepository.save(transferTransaction); + + transactionFromHiddenAccount = new Transaction(); + transactionFromHiddenAccount.setName("inside hidden account"); + transactionFromHiddenAccount.setAmount(-525); + transactionFromHiddenAccount.setDate(new DateTime(2018, 11, 3, 12, 0, 0, 0)); + transactionFromHiddenAccount.setCategory(category2); + transactionFromHiddenAccount.setAccount(accountHidden); + transactionFromHiddenAccount = transactionRepository.save(transactionFromHiddenAccount); } @Test @@ -247,4 +260,14 @@ public class TransactionSearchSpecificationsTest assertThat(results).hasSize(1) .contains(transaction1); } + + @Test + public void getMatches_IgnoreTransactionsFromHiddenAccounts() + { + Search search = new Search("hidden", true, false, false, false, 0); + Specification spec = TransactionSearchSpecifications.withDynamicQuery(search); + + List<Transaction> results = transactionRepository.findAll(spec); + assertThat(results).isEmpty(); + } } \ No newline at end of file