Ejemplo n.º 1
0
        public bool CanBeReserved(DateTimeSpan requestedDates, int numberOfDaysGap)
        {
            // Find the booking dates before and after our current
            var firstPastReservation   = Reservations.Where(kvp => kvp.Key <= requestedDates.EndDate).Select(kvp => kvp.Value).LastOrDefault();
            var firstFutureReservation = Reservations.Where(kvp => kvp.Key >= requestedDates.EndDate).Select(kvp => kvp.Value).FirstOrDefault();

            if (firstPastReservation != null && requestedDates.Overlaps(firstPastReservation.Span))
            {
                // The reservation overlaps with the previous reservation
                return(false);
            }
            else if (firstFutureReservation != null && requestedDates.Overlaps(firstFutureReservation.Span))
            {
                // The reservation overlaps with the next reservation
                return(false);
            }
            else if (firstPastReservation != null && firstPastReservation.EndDate.WillCreateGap(requestedDates.StartDate, numberOfDaysGap))
            {
                // The reservation would create a gap
                return(false);
            }
            else if (firstFutureReservation != null && firstFutureReservation.StartDate.WillCreateGap(requestedDates.EndDate, numberOfDaysGap))
            {
                // The reservation would create a gap
                return(false);
            }

            // Nothing disqualifies this site, so we can book it
            return(true);
        }
        public void CanFindOverlap(int startA, int endA, int startB, int endB, bool shouldOverlap)
        {
            // Setup
            var a = new DateTimeSpan(new DateTime(startA), new DateTime(endA));
            var b = new DateTimeSpan(new DateTime(startB), new DateTime(endB));

            // Test
            var overlap = a.Overlaps(b);

            // Assert
            Assert.Equal(overlap, shouldOverlap);
        }