From 55764b4643271d367193602a7da6b0744807ce8a Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Mon, 2 Aug 2021 23:01:06 +0200 Subject: [PATCH] Fixed #635 - new transaction from template: account not prefilled correctly --- .../templates/TemplateService.java | 3 +- .../unit/TemplateServiceTest.java | 169 ++++++++++++++++++ 2 files changed, 170 insertions(+), 2 deletions(-) create mode 100644 src/test/java/de/deadlocker8/budgetmaster/unit/TemplateServiceTest.java diff --git a/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateService.java b/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateService.java index 7ab44329c..dcd09c142 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateService.java @@ -121,8 +121,7 @@ public class TemplateService implements Resettable, AccessAllEntities<Template>, if(prepareAccount && template.getAccount() == null) { - final Account selectedAccount = accountService.getRepository().findByIsSelected(true); - template.setAccount(selectedAccount); + template.setAccount(accountService.getRepository().findByIsDefault(true)); } final Account account = template.getAccount(); diff --git a/src/test/java/de/deadlocker8/budgetmaster/unit/TemplateServiceTest.java b/src/test/java/de/deadlocker8/budgetmaster/unit/TemplateServiceTest.java new file mode 100644 index 000000000..8f56442b3 --- /dev/null +++ b/src/test/java/de/deadlocker8/budgetmaster/unit/TemplateServiceTest.java @@ -0,0 +1,169 @@ +package de.deadlocker8.budgetmaster.unit; + +import de.deadlocker8.budgetmaster.accounts.*; +import de.deadlocker8.budgetmaster.categories.Category; +import de.deadlocker8.budgetmaster.categories.CategoryService; +import de.deadlocker8.budgetmaster.categories.CategoryType; +import de.deadlocker8.budgetmaster.icon.IconService; +import de.deadlocker8.budgetmaster.images.ImageService; +import de.deadlocker8.budgetmaster.templates.Template; +import de.deadlocker8.budgetmaster.templates.TemplateRepository; +import de.deadlocker8.budgetmaster.templates.TemplateService; +import de.deadlocker8.budgetmaster.unit.helpers.LocalizedTest; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import static org.assertj.core.api.Assertions.assertThat; + +@ExtendWith(SpringExtension.class) +@LocalizedTest +class TemplateServiceTest +{ + private static final Category CATEGORY_NONE = new Category("No category", "#FFFFFF", CategoryType.NONE); + + private static final Account ACCOUNT_DEFAULT = new Account("Default Account", AccountType.CUSTOM); + + @Mock + private TemplateRepository templateRepository; + + @Mock + private AccountService accountService; + + @Mock + private AccountRepository accountRepository; + + @Mock + private CategoryService categoryService; + + @Mock + private ImageService imageService; + + @Mock + private IconService iconService; + + @InjectMocks + private TemplateService templateService; + + @Test + void test_prepareTemplateForNewTransaction_noCategory() + { + final Template template = new Template(); + + Mockito.when(categoryService.findByType(CategoryType.NONE)).thenReturn(CATEGORY_NONE); + + final Template expectedTemplate = new Template(); + expectedTemplate.setCategory(CATEGORY_NONE); + + templateService.prepareTemplateForNewTransaction(template, false); + assertThat(template).isEqualTo(expectedTemplate); + } + + @Test + void test_prepareTemplateForNewTransaction_accountIsFullAccess_noPreparation() + { + final Account account = new Account("Account", AccountType.CUSTOM); + account.setAccountState(AccountState.FULL_ACCESS); + + final Template template = new Template(); + template.setCategory(CATEGORY_NONE); + template.setAccount(account); + + final Template expectedTemplate = new Template(); + expectedTemplate.setCategory(CATEGORY_NONE); + expectedTemplate.setAccount(account); + + templateService.prepareTemplateForNewTransaction(template, false); + assertThat(template).isEqualTo(expectedTemplate); + } + + @Test + void test_prepareTemplateForNewTransaction_accountIsNotFullAccess_noPreparation() + { + final Account account = new Account("Account", AccountType.CUSTOM); + account.setAccountState(AccountState.READ_ONLY); + + final Template template = new Template(); + template.setCategory(CATEGORY_NONE); + template.setAccount(account); + + Mockito.when(accountService.getRepository()).thenReturn(accountRepository); + Mockito.when(accountRepository.findByIsDefault(true)).thenReturn(ACCOUNT_DEFAULT); + + final Template expectedTemplate = new Template(); + expectedTemplate.setCategory(CATEGORY_NONE); + expectedTemplate.setAccount(ACCOUNT_DEFAULT); + + templateService.prepareTemplateForNewTransaction(template, false); + assertThat(template).isEqualTo(expectedTemplate); + } + + @Test + void test_prepareTemplateForNewTransaction_transferAccountIsFullAccess_noPreparation() + { + final Account account = new Account("Account", AccountType.CUSTOM); + account.setAccountState(AccountState.FULL_ACCESS); + + final Account transferAccount = new Account("Transfer Account", AccountType.CUSTOM); + transferAccount.setAccountState(AccountState.FULL_ACCESS); + + final Template template = new Template(); + template.setCategory(CATEGORY_NONE); + template.setAccount(account); + template.setTransferAccount(transferAccount); + + final Template expectedTemplate = new Template(); + expectedTemplate.setCategory(CATEGORY_NONE); + expectedTemplate.setAccount(account); + expectedTemplate.setTransferAccount(transferAccount); + + templateService.prepareTemplateForNewTransaction(template, false); + assertThat(template).isEqualTo(expectedTemplate); + } + + @Test + void test_prepareTemplateForNewTransaction_transferAccountIsNotFullAccess_noPreparation() + { + final Account account = new Account("Account", AccountType.CUSTOM); + account.setAccountState(AccountState.FULL_ACCESS); + + final Account transferAccount = new Account("Transfer Account", AccountType.CUSTOM); + transferAccount.setAccountState(AccountState.READ_ONLY); + + final Template template = new Template(); + template.setCategory(CATEGORY_NONE); + template.setAccount(account); + template.setTransferAccount(transferAccount); + + Mockito.when(accountService.getRepository()).thenReturn(accountRepository); + Mockito.when(accountRepository.findByIsDefault(true)).thenReturn(ACCOUNT_DEFAULT); + + final Template expectedTemplate = new Template(); + expectedTemplate.setCategory(CATEGORY_NONE); + expectedTemplate.setAccount(account); + expectedTemplate.setTransferAccount(ACCOUNT_DEFAULT); + + templateService.prepareTemplateForNewTransaction(template, false); + assertThat(template).isEqualTo(expectedTemplate); + } + + @Test + void test_prepareTemplateForNewTransaction_noAccount_withPreparation() + { + final Template template = new Template(); + template.setCategory(CATEGORY_NONE); + + Mockito.when(accountService.getRepository()).thenReturn(accountRepository); + Mockito.when(accountRepository.findByIsDefault(true)).thenReturn(ACCOUNT_DEFAULT); + + final Template expectedTemplate = new Template(); + expectedTemplate.setCategory(CATEGORY_NONE); + expectedTemplate.setAccount(ACCOUNT_DEFAULT); + + templateService.prepareTemplateForNewTransaction(template, true); + assertThat(template).isEqualTo(expectedTemplate); + } +} -- GitLab