package org.synyx.urlaubsverwaltung.web.account; import org.joda.time.DateMidnight; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.springframework.validation.Errors; import org.synyx.urlaubsverwaltung.core.application.domain.Application; import org.synyx.urlaubsverwaltung.core.settings.Settings; import org.synyx.urlaubsverwaltung.core.settings.SettingsService; import java.math.BigDecimal; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; /** * @author Aljona Murygina - murygina@synyx.de */ public class AccountValidatorTest { private AccountValidator validator; private AccountForm form; private Settings settings; private Errors errors; @Before public void setUp() { SettingsService settingsService = Mockito.mock(SettingsService.class); settings = new Settings(); Mockito.when(settingsService.getSettings()).thenReturn(settings); validator = new AccountValidator(settingsService); form = new AccountForm(2013); errors = Mockito.mock(Errors.class); } // TEST OF SUPPORTS METHOD @Test public void ensureSupportsOnlyAccountFormClass() { boolean returnValue; returnValue = validator.supports(null); assertFalse(returnValue); returnValue = validator.supports(Application.class); assertFalse(returnValue); returnValue = validator.supports(AccountForm.class); assertTrue(returnValue); } // VALIDATION OF ANNUAL VACATION FIELD @Test public void ensureAnnualVacationMustNotBeNull() { form.setAnnualVacationDays(null); validator.validateAnnualVacation(form, errors); Mockito.verify(errors).rejectValue("annualVacationDays", "error.entry.mandatory"); } @Test public void ensureAnnualVacationMustNotBeGreaterThanMaximumDaysConfiguredInSettings() { int maxDays = 40; settings.getAbsenceSettings().setMaximumAnnualVacationDays(maxDays); form.setAnnualVacationDays(new BigDecimal(maxDays + 1)); validator.validateAnnualVacation(form, errors); Mockito.verify(errors).rejectValue("annualVacationDays", "error.entry.invalid"); } @Test public void ensureValidAnnualVacationHasNoValidationError() { form.setAnnualVacationDays(new BigDecimal("28")); validator.validateAnnualVacation(form, errors); Mockito.verifyZeroInteractions(errors); } // VALIDATION OF ACTUAL VACATION FIELD @Test public void ensureActualVacationMustNotBeNull() { form.setActualVacationDays(null); validator.validateActualVacation(form, errors); Mockito.verify(errors).rejectValue("actualVacationDays", "error.entry.mandatory"); } @Test public void ensureActualVacationMustNotBeGreaterThanAnnualVacation() { form.setAnnualVacationDays(new BigDecimal("30")); form.setActualVacationDays(new BigDecimal("31")); validator.validateActualVacation(form, errors); Mockito.verify(errors).rejectValue("actualVacationDays", "error.entry.invalid"); } @Test public void ensureValidActualVacationHasNoValidationError() { form.setAnnualVacationDays(new BigDecimal("30")); form.setActualVacationDays(new BigDecimal("28")); validator.validateActualVacation(form, errors); Mockito.verifyZeroInteractions(errors); } // VALIDATION OF REMAINING VACATION DAYS FIELD @Test public void ensureRemainingVacationDaysMustNotBeNull() { form.setRemainingVacationDays(null); validator.validateRemainingVacationDays(form, errors); Mockito.verify(errors).rejectValue("remainingVacationDays", "error.entry.mandatory"); } @Test public void ensureRemainingVacationDaysMustNotBeGreaterThanOneYear() { form.setRemainingVacationDays(new BigDecimal("367")); validator.validateRemainingVacationDays(form, errors); Mockito.verify(errors).rejectValue("remainingVacationDays", "error.entry.invalid"); } @Test public void ensureValidRemainingVacationDaysHaveNoValidationError() { form.setRemainingVacationDays(new BigDecimal("5")); form.setRemainingVacationDaysNotExpiring(new BigDecimal("5")); validator.validateRemainingVacationDays(form, errors); Mockito.verifyZeroInteractions(errors); } // VALIDATION OF REMAINING VACATION DAYS NOT EXPIRING FIELD @Test public void ensureRemainingVacationDaysNotExpiringMustNotBeNull() { form.setRemainingVacationDaysNotExpiring(null); validator.validateRemainingVacationDays(form, errors); Mockito.verify(errors).rejectValue("remainingVacationDaysNotExpiring", "error.entry.mandatory"); } @Test public void ensureRemainingVacationDaysNotExpiringMustNotBeGreaterThanRemainingVacationDays() { form.setRemainingVacationDays(new BigDecimal("5")); form.setRemainingVacationDaysNotExpiring(new BigDecimal("6")); validator.validateRemainingVacationDays(form, errors); Mockito.verify(errors).rejectValue("remainingVacationDaysNotExpiring", "error.entry.invalid"); } // VALIDATION OF PERIOD @Test public void ensureHolidaysAccountValidFromMustNotBeNull() { form.setHolidaysAccountValidFrom(null); validator.validatePeriod(form, errors); Mockito.verify(errors).rejectValue("holidaysAccountValidFrom", "error.entry.mandatory"); } @Test public void ensureHolidaysAccountValidToMustNotBeNull() { form.setHolidaysAccountValidTo(null); validator.validatePeriod(form, errors); Mockito.verify(errors).rejectValue("holidaysAccountValidTo", "error.entry.mandatory"); } @Test public void ensureFromOfPeriodMustBeBeforeTo() { // invalid period: 1.5.2013 - 1.1.2013 form.setHolidaysAccountValidFrom(new DateMidnight(2013, 5, 1)); form.setHolidaysAccountValidTo(new DateMidnight(2013, 1, 1)); validator.validatePeriod(form, errors); Mockito.verify(errors).reject("error.entry.invalidPeriod"); } @Test public void ensurePeriodMustBeGreaterThanOnlyOneDay() { // invalid period: 5.1.2013 - 5.1.2013 form.setHolidaysAccountValidFrom(new DateMidnight(2013, 5, 1)); form.setHolidaysAccountValidTo(new DateMidnight(2013, 5, 1)); validator.validatePeriod(form, errors); Mockito.verify(errors).reject("error.entry.invalidPeriod"); } @Test public void ensurePeriodMustBeWithinTheProvidedYear() { form = new AccountForm(2014); form.setHolidaysAccountValidFrom(new DateMidnight(2013, 1, 1)); form.setHolidaysAccountValidTo(new DateMidnight(2013, 5, 1)); validator.validatePeriod(form, errors); Mockito.verify(errors).reject("error.entry.invalidPeriod"); } @Test public void ensureValidPeriodHasNoValidationError() { // valid period: 1.5.2013 - 5.5.2013 form.setHolidaysAccountValidFrom(new DateMidnight(2013, 5, 1)); form.setHolidaysAccountValidTo(new DateMidnight(2013, 5, 5)); validator.validatePeriod(form, errors); Mockito.verifyZeroInteractions(errors); } @Test public void ensureCommentHasNoValidationError() { form = new AccountForm(2017); form.setComment("blabla"); validator.validateComment(form, errors); Mockito.verifyZeroInteractions(errors); } @Test public void ensureCommentHasLengthValidationError() { form = new AccountForm(2017); form.setComment("blablablablablablablablablablablablablablablablablablablablablablablablablablablablablabla" + "blablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablabla" + "blablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablabla" + "bla"); validator.validateComment(form, errors); Mockito.verify(errors).rejectValue("comment","error.entry.commentTooLong"); } }