@Test
  public void ensureCorrectWorkingDurationForWorkDay() {

    DateMidnight testDate = new DateMidnight(2013, DateTimeConstants.NOVEMBER, 27);

    BigDecimal workingDuration = publicHolidaysService.getWorkingDurationOfDate(testDate, state);

    Assert.assertEquals("Wrong working duration", BigDecimal.ONE.setScale(1), workingDuration);
  }
  @Test
  public void ensureCorpusChristiIsRecognizedAsPublicHoliday() {

    DateMidnight testDate = new DateMidnight(2013, DateTimeConstants.MAY, 30);

    boolean isPublicHoliday = publicHolidaysService.isPublicHoliday(testDate, state);

    Assert.assertTrue("Corpus Christi should be recognized as public holiday", isPublicHoliday);
  }
  @Test
  public void ensureNewYearsEveIsRecognizedAsPublicHoliday() {

    DateMidnight testDate = new DateMidnight(2013, DateTimeConstants.DECEMBER, 31);

    boolean isPublicHoliday = publicHolidaysService.isPublicHoliday(testDate, state);

    Assert.assertTrue("New Years Eve should be recognized as public holiday", isPublicHoliday);
  }
  @Test
  public void ensureCheckForPublicHolidayReturnsTrueForPublicHoliday() {

    DateMidnight testDate = new DateMidnight(2013, DateTimeConstants.DECEMBER, 25);

    boolean isPublicHoliday = publicHolidaysService.isPublicHoliday(testDate, state);

    Assert.assertTrue("Christmas should be recognized as public holiday", isPublicHoliday);
  }
  @Test
  public void ensureCheckForPublicHolidayReturnsFalseForWorkDay() {

    DateMidnight testDate = new DateMidnight(2013, DateTimeConstants.DECEMBER, 20);

    boolean isPublicHoliday = publicHolidaysService.isPublicHoliday(testDate, state);

    Assert.assertFalse("Work day should not be recognized as public holiday", isPublicHoliday);
  }
  @Test
  public void ensureCorrectWorkingDurationForAssumptionDayForBadenWuerttemberg() {

    BigDecimal workingDuration =
        publicHolidaysService.getWorkingDurationOfDate(
            new DateMidnight(2015, DateTimeConstants.AUGUST, 15), FederalState.BADEN_WUERTTEMBERG);

    Assert.assertEquals("Wrong working duration", BigDecimal.ONE.setScale(1), workingDuration);
  }
  @Test
  public void ensureCorrectWorkingDurationForAssumptionDayForBayernMuenchen() {

    BigDecimal workingDuration =
        publicHolidaysService.getWorkingDurationOfDate(
            new DateMidnight(2015, DateTimeConstants.AUGUST, 15), FederalState.BAYERN_MUENCHEN);

    Assert.assertEquals("Wrong working duration", BigDecimal.ZERO, workingDuration);
  }
  @Test
  public void ensureAssumptionDayIsAPublicHolidayForBayernMuenchen() {

    boolean isPublicHoliday =
        publicHolidaysService.isPublicHoliday(
            new DateMidnight(2015, DateTimeConstants.AUGUST, 15), FederalState.BAYERN_MUENCHEN);

    Assert.assertTrue("Assumption Day should be recognized as public holiday", isPublicHoliday);
  }
  @Test
  public void ensureCorrectWorkingDurationForPublicHoliday() {

    DateMidnight testDate = new DateMidnight(2013, DateTimeConstants.DECEMBER, 25);

    BigDecimal workingDuration = publicHolidaysService.getWorkingDurationOfDate(testDate, state);

    Assert.assertEquals("Wrong working duration", BigDecimal.ZERO, workingDuration);
  }
  @Test
  public void ensureAssumptionDayIsNoPublicHolidayForBadenWuerttemberg() {

    boolean isPublicHoliday =
        publicHolidaysService.isPublicHoliday(
            new DateMidnight(2015, DateTimeConstants.AUGUST, 15), FederalState.BADEN_WUERTTEMBERG);

    Assert.assertFalse(
        "Assumption Day should not be recognized as public holiday", isPublicHoliday);
  }
  @Test
  public void ensureWorkingDurationForNewYearsEveCanBeConfiguredToAWorkingDurationOfZero() {

    Settings settings = new Settings();
    settings.getWorkingTimeSettings().setWorkingDurationForNewYearsEve(DayLength.ZERO);

    Mockito.when(settingsService.getSettings()).thenReturn(settings);

    DateMidnight testDate = new DateMidnight(2013, DateTimeConstants.DECEMBER, 31);

    BigDecimal workingDuration = publicHolidaysService.getWorkingDurationOfDate(testDate, state);

    Assert.assertEquals("Wrong working duration", BigDecimal.ZERO, workingDuration);
  }
  @Test
  public void ensureWorkingDurationForChristmasEveCanBeConfiguredToAWorkingDurationOfMorning() {

    Settings settings = new Settings();
    settings.getWorkingTimeSettings().setWorkingDurationForChristmasEve(DayLength.MORNING);

    Mockito.when(settingsService.getSettings()).thenReturn(settings);

    DateMidnight testDate = new DateMidnight(2013, DateTimeConstants.DECEMBER, 24);

    BigDecimal workingDuration = publicHolidaysService.getWorkingDurationOfDate(testDate, state);

    Assert.assertEquals("Wrong working duration", new BigDecimal("0.5"), workingDuration);
  }