public void RemoveRanges_RangeNot_IntersectedWithMain_Exception() { var target = new MonthRange(new Date(2020, 12, 1), new Date(2020, 12, 15)); var rangesToRemove = new List <TimeRange> { new TimeRange(new Date(2020, 11, 16), new Date(2020, 11, 28)) }; Assert.Throws <InvalidOperationException>(() => target.RemoveRanges(rangesToRemove)); }
public void RemoveRanges_RangeFullyCover_MainRange_Ok() { var target = new MonthRange(new Date(2020, 12, 1), new Date(2020, 12, 2)); var vacationTimeRange = new TimeRange(new Date(2020, 11, 25), new Date(2020, 12, 5)); var rangesToRemove = new List <TimeRange> { vacationTimeRange }; var ranges = target.RemoveRanges(rangesToRemove); Assert.Empty(ranges); }
public void RemoveRanges_AllRangesIncludedIntoMainOne_Case1_Ok() { var target = new MonthRange(new Date(2020, 6, 1), new Date(2020, 6, 30)); var rangesToRemove = new List <TimeRange> { new TimeRange(new Date(2020, 6, 1), new Date(2020, 6, 10)) }; IReadOnlyCollection <TimeRange> result = target.RemoveRanges(rangesToRemove); Assert.Single(result); var first = result.First(); Assert.True(new Date(2020, 6, 11).SameDay(first.From)); Assert.True(new Date(2020, 6, 30).SameDay(first.To)); }
public void RemoveRanges_NotAllRangesIncludedIntoMainOne_Case2_Ok() { var target = new MonthRange(new Date(2020, 6, 1), new Date(2020, 6, 30)); var rangesToRemove = new List <TimeRange> { new TimeRange(new Date(2020, 5, 15), new Date(2020, 6, 14)), }; var ranges = target.RemoveRanges(rangesToRemove); Assert.Single(ranges); var newTimeRange = new TimeRange(new Date(2020, 6, 15), new Date(2020, 6, 30)); Assert.Equal(newTimeRange.From, ranges.First().From); Assert.Equal(newTimeRange.To, ranges.First().To); }
public void RemoveRanges_RangeIntersect_WithMainRange_Ok() { var target = new MonthRange(new Date(2020, 11, 5), new Date(2020, 11, 30)); var vacationTimeRange = new TimeRange(new Date(2020, 11, 25), new Date(2020, 12, 5)); var rangesToRemove = new List <TimeRange> { vacationTimeRange }; var ranges = target.RemoveRanges(rangesToRemove); Assert.Single(ranges); var range = ranges.First(); Assert.Equal(target.From, range.From); Assert.Equal(new Date(vacationTimeRange.From.AddDays(-1)).EndOfTheDay(), range.To); }
public void RemoveRanges_AllRangesIncludedIntoMainOne_Case3_Ok() { var target = new MonthRange(new Date(2020, 6, 1), new Date(2020, 6, 30)); var rangesToRemove = new List <TimeRange> { new TimeRange(new Date(2020, 6, 1), new Date(2020, 6, 1)), new TimeRange(new Date(2020, 6, 10), new Date(2020, 6, 20)), new TimeRange(new Date(2020, 6, 28), new Date(2020, 6, 30)) }; IReadOnlyCollection <TimeRange> result = target.RemoveRanges(rangesToRemove); Assert.Equal(2, result.Count); Assert.True(new Date(2020, 6, 2).SameDay(result.ElementAt(0).From)); Assert.True(new Date(2020, 6, 9).SameDay(result.ElementAt(0).To)); Assert.True(new Date(2020, 6, 21).SameDay(result.ElementAt(1).From)); Assert.True(new Date(2020, 6, 27).SameDay(result.ElementAt(1).To)); }
public void RemoveRanges_RangeInMainRange_Ok() { var target = new MonthRange(new Date(2020, 11, 5), new Date(2020, 11, 30)); var vacationTimeRange = new TimeRange(new Date(2020, 11, 16), new Date(2020, 11, 28)); var rangesToRemove = new List <TimeRange> { vacationTimeRange }; var ranges = target.RemoveRanges(rangesToRemove); Assert.Equal(2, ranges.Count()); var firstRange = ranges.First(); Assert.Equal(target.From, firstRange.From); Assert.Equal(new Date(vacationTimeRange.From.AddDays(-1)).EndOfTheDay(), firstRange.To); var secondRange = ranges.Last(); Assert.Equal(new Date(vacationTimeRange.To.AddDays(1)).StartOfTheDay(), secondRange.From); Assert.Equal(new Date(target.To).EndOfTheDay(), secondRange.To); }
public void RemoveRanges_Null_Exception() { var target = new MonthRange(new Date(2020, 6, 1), new Date(2020, 6, 30)); Assert.Throws <ArgumentNullException>(() => target.RemoveRanges(null)); }
public void RemoveRanges_NoRangesToRemove_Exception() { var target = new MonthRange(new Date(2020, 6, 1), new Date(2020, 6, 30)); Assert.Throws <InvalidOperationException>(() => target.RemoveRanges(Array.Empty <TimeRange>())); }