diff --git a/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/settings/containers/SecuritySettingsContainerTest.java b/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/settings/containers/SecuritySettingsContainerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..96ce39645cb0f70ce64fe17e270e0712bb5b903e --- /dev/null +++ b/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/settings/containers/SecuritySettingsContainerTest.java @@ -0,0 +1,189 @@ +package de.deadlocker8.budgetmaster.unit.settings.containers; + +import de.deadlocker8.budgetmaster.settings.Settings; +import de.deadlocker8.budgetmaster.settings.SettingsController; +import de.deadlocker8.budgetmaster.settings.SettingsService; +import de.deadlocker8.budgetmaster.settings.containers.PersonalizationSettingsContainer; +import de.deadlocker8.budgetmaster.settings.containers.SecuritySettingsContainer; +import de.deadlocker8.budgetmaster.unit.helpers.LocalizedTest; +import de.deadlocker8.budgetmaster.utils.LanguageType; +import de.deadlocker8.budgetmaster.utils.Strings; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.validation.BeanPropertyBindingResult; +import org.springframework.validation.Errors; +import org.springframework.validation.ObjectError; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + + +@ExtendWith(SpringExtension.class) +@LocalizedTest +class SecuritySettingsContainerTest +{ + @Mock + private SettingsService settingsService; + + @Test + void test_validate_valid() + { + final SecuritySettingsContainer container = new SecuritySettingsContainer("abc0815", "abc0815"); + + final Errors errors = new BeanPropertyBindingResult(container, "container"); + container.validate(errors); + + assertThat(errors.getAllErrors()) + .isEmpty(); + } + + @Test + void test_validate_passwordIsNull() + { + final SecuritySettingsContainer container = new SecuritySettingsContainer(null, ""); + + final Errors errors = new BeanPropertyBindingResult(container, "container"); + container.validate(errors); + + final List<ObjectError> finalErrors = errors.getAllErrors(); + assertThat(finalErrors) + .hasSize(1); + + final ObjectError error = finalErrors.get(0); + assertThat(error) + .hasFieldOrPropertyWithValue("field", "password"); + assertThat(error.getCode()) + .isEqualTo(Strings.WARNING_SETTINGS_PASSWORD_EMPTY); + } + + @Test + void test_validate_passwordIsEmpty() + { + final SecuritySettingsContainer container = new SecuritySettingsContainer("", ""); + + final Errors errors = new BeanPropertyBindingResult(container, "container"); + container.validate(errors); + + final List<ObjectError> finalErrors = errors.getAllErrors(); + assertThat(finalErrors) + .hasSize(1); + + final ObjectError error = finalErrors.get(0); + assertThat(error) + .hasFieldOrPropertyWithValue("field", "password"); + assertThat(error.getCode()) + .isEqualTo(Strings.WARNING_SETTINGS_PASSWORD_EMPTY); + } + + @Test + void test_validate_passwordTooShort() + { + final SecuritySettingsContainer container = new SecuritySettingsContainer("01", "01"); + + final Errors errors = new BeanPropertyBindingResult(container, "container"); + container.validate(errors); + + final List<ObjectError> finalErrors = errors.getAllErrors(); + assertThat(finalErrors) + .hasSize(1); + + final ObjectError error = finalErrors.get(0); + assertThat(error) + .hasFieldOrPropertyWithValue("field", "password"); + assertThat(error.getCode()) + .isEqualTo(Strings.WARNING_SETTINGS_PASSWORD_LENGTH); + } + + @Test + void test_validate_passwordIsPlaceholder() + { + final SecuritySettingsContainer container = new SecuritySettingsContainer(SettingsController.PASSWORD_PLACEHOLDER, SettingsController.PASSWORD_PLACEHOLDER); + + final Errors errors = new BeanPropertyBindingResult(container, "container"); + container.validate(errors); + + final List<ObjectError> finalErrors = errors.getAllErrors(); + assertThat(finalErrors) + .hasSize(1); + + final ObjectError error = finalErrors.get(0); + assertThat(error) + .hasFieldOrPropertyWithValue("field", "password"); + assertThat(error.getCode()) + .isEqualTo(Strings.WARNING_SETTINGS_PASSWORD_EQUALS_EXISTING); + } + + @Test + void test_validate_passwordConfirmationIsNull() + { + final SecuritySettingsContainer container = new SecuritySettingsContainer("abc0815", null); + + final Errors errors = new BeanPropertyBindingResult(container, "container"); + container.validate(errors); + + final List<ObjectError> finalErrors = errors.getAllErrors(); + assertThat(finalErrors) + .hasSize(1); + + final ObjectError error = finalErrors.get(0); + assertThat(error) + .hasFieldOrPropertyWithValue("field", "passwordConfirmation"); + assertThat(error.getCode()) + .isEqualTo(Strings.WARNING_SETTINGS_PASSWORD_CONFIRMATION_EMPTY); + } + + @Test + void test_validate_passwordConfirmationIsEmpty() + { + final SecuritySettingsContainer container = new SecuritySettingsContainer("abc0815", ""); + + final Errors errors = new BeanPropertyBindingResult(container, "container"); + container.validate(errors); + + final List<ObjectError> finalErrors = errors.getAllErrors(); + assertThat(finalErrors) + .hasSize(1); + + final ObjectError error = finalErrors.get(0); + assertThat(error) + .hasFieldOrPropertyWithValue("field", "passwordConfirmation"); + assertThat(error.getCode()) + .isEqualTo(Strings.WARNING_SETTINGS_PASSWORD_CONFIRMATION_EMPTY); + } + + @Test + void test_validate_passwordConfirmationDoesNotMatch() + { + final SecuritySettingsContainer container = new SecuritySettingsContainer("abc0815", "xyz"); + + final Errors errors = new BeanPropertyBindingResult(container, "container"); + container.validate(errors); + + final List<ObjectError> finalErrors = errors.getAllErrors(); + assertThat(finalErrors) + .hasSize(1); + + final ObjectError error = finalErrors.get(0); + assertThat(error) + .hasFieldOrPropertyWithValue("field", "passwordConfirmation"); + assertThat(error.getCode()) + .isEqualTo(Strings.WARNING_SETTINGS_PASSWORD_CONFIRMATION_WRONG); + } + + @Test + void test_updateSettings() + { + final Settings defaultSettings = Settings.getDefault(); + + Mockito.when(settingsService.getSettings()).thenReturn(defaultSettings); + + final PersonalizationSettingsContainer container = new PersonalizationSettingsContainer(LanguageType.ENGLISH.getName(), "€", true, true, 10); + final Settings updatedSettings = container.updateSettings(settingsService); + + assertThat(updatedSettings).isEqualTo(defaultSettings); + } +}