public void IsTimeSlogValidForBoard_TimeIsNotSpecified_ThrowsException()
        {
            var unitUnderTest = new SchedulingBoard(Guid.NewGuid());
            var timeSlot      = TimeSlotFactory.CreateTimeSlot(TimeSlotType.Control);

            Assert.Throws <ArgumentNullException>(() => unitUnderTest.IsTimeSlogValidForBoard(timeSlot));
        }
示例#2
0
        public void GetPossibleTimeSlotsOverMonthChange()
        {
            // Arrange
            var availability = new TableAvailability()
            {
                FirstTimeSlotDayOfWeek = 1, LastTimeSlotDayOfWeek = 2, FirstTimeSlot = new DateTime(2014, 1, 31, 19, 00, 00), LastTimeSlot = new DateTime(2014, 12, 12, 1, 00, 00)
            };
            var sourceDate = new DateTime(2014, 1, 31);

            // Act
            List <DateTime> possibleTimeSlots = TimeSlotFactory.GetPossibleTimeSlots(sourceDate, availability);

            // Assert
            // 19:00 / 19:30 / 20:00 / 20:30 / 21:00 / 21:30 / 22:00 / 22:30 / 23:00 / 23:30 / 00:00 / 00:30 / 01:00
            Assert.AreEqual(13, possibleTimeSlots.Count);
            for (int i = 0; i < possibleTimeSlots.Count; i++)
            {
                if (i < 10)
                {
                    Assert.AreEqual(31, possibleTimeSlots[i].Day);
                    Assert.AreEqual(1, possibleTimeSlots[i].Month);
                }
                else
                {
                    Assert.AreEqual(1, possibleTimeSlots[i].Day);
                    Assert.AreEqual(2, possibleTimeSlots[i].Month);
                }
            }
        }
        public void GetTimeForTimeSlot_EmptyBoard_Success()
        {
            var unitUnderTest = new SchedulingBoard(Guid.NewGuid())
            {
                StartsAt = DateTime.Today.Date.AddDays(1).AddHours(8)
            };

            var scheduledAt = unitUnderTest.GetTimeForTimeSlot(TimeSlotFactory.CreateTimeSlot(TimeSlotType.Control));

            Assert.NotNull(scheduledAt);
            Assert.Equal(unitUnderTest.StartsAt, scheduledAt);
        }
示例#4
0
        public async Task GetTimeSlotDetailsAsync_HandleResult_Success()
        {
            var id       = Guid.NewGuid();
            var timeSlot = TimeSlotFactory.CreateTimeSlot(TimeSlotType.Control);
            var schedulingRepositoryMock = new Mock <ISchedulingRepository>();

            schedulingRepositoryMock.Setup(m => m.FetchTimeSlotAsync(id)).ReturnsAsync(timeSlot);
            var unitUnderTest = new TimeSlotController(schedulingRepositoryMock.Object);

            var result = await unitUnderTest.GetTimeSlotDetailsAsync(id);

            Assert.IsType <OkObjectResult>(result);
            Assert.Equal(timeSlot.Id, (((ObjectResult)result).Value as TimeSlot)?.Id);
        }
        public void IsTimeSlogValidForBoard_TimeSlotIsBeforeStartOfBoard_Success()
        {
            var unitUnderTest = new SchedulingBoard(Guid.NewGuid())
            {
                StartsAt = DateTime.Now.AddHours(2)
            };
            var timeSlot = TimeSlotFactory.CreateTimeSlot(TimeSlotType.Control);

            timeSlot.SetTime(DateTime.Now.AddHours(1));

            var result = unitUnderTest.IsTimeSlogValidForBoard(timeSlot);

            Assert.False(result);
        }
        public void GetTimeForTimeSlot_FreeSpotOnBeginningOfInterval_Success()
        {
            var unitUnderTest = new SchedulingBoard(Guid.NewGuid())
            {
                StartsAt = DateTime.Today.Date.AddDays(1).AddHours(8)
            };
            var timeSlot = TimeSlotFactory.CreateTimeSlot(TimeSlotType.Control);

            timeSlot.SetTime(unitUnderTest.StartsAt.AddHours(2));
            unitUnderTest.AddTimeSlot(timeSlot);

            var scheduledAt = unitUnderTest.GetTimeForTimeSlot(TimeSlotFactory.CreateTimeSlot(TimeSlotType.Control));

            Assert.NotNull(scheduledAt);
            Assert.Equal(unitUnderTest.StartsAt, scheduledAt);
        }
示例#7
0
        public void GetPossibleTimeSlotsEvening()
        {
            // Arrange
            var availability = new TableAvailability()
            {
                FirstTimeSlotDayOfWeek = 1, LastTimeSlotDayOfWeek = 1, FirstTimeSlot = new DateTime(2014, 12, 12, 19, 00, 00), LastTimeSlot = new DateTime(2014, 12, 12, 23, 00, 00)
            };
            var sourceDate = new DateTime(2014, 2, 20);

            // Act
            List <DateTime> possibleTimeSlots = TimeSlotFactory.GetPossibleTimeSlots(sourceDate, availability);

            // Assert
            // 19:00 / 19:30 / 20:00 / 20:30 / 21:00 / 21:30 / 22:00 / 22:30 / 23:00
            Assert.AreEqual(9, possibleTimeSlots.Count);
        }
示例#8
0
        public void SaturdayToSundayTimeSlots()
        {
            // Arrange
            var availability = new TableAvailability()
            {
                FirstTimeSlotDayOfWeek = 6, LastTimeSlotDayOfWeek = 0, FirstTimeSlot = new DateTime(2014, 12, 12, 19, 00, 00), LastTimeSlot = new DateTime(2014, 12, 12, 02, 00, 00)
            };
            var sourceDate = new DateTime(2014, 2, 20);

            // Act
            List <DateTime> possibleTimeSlots = TimeSlotFactory.GetPossibleTimeSlots(sourceDate, availability);

            // Assert
            // 19:00 / 19:30 / 20:00 / 20:30 / 21:00 / 21:30 / 22:00 / 22:30 / 23:00 / 23:30 / 00:00 / 00:30 / 01:00 / 01:30 / 02:00
            Assert.AreEqual(15, possibleTimeSlots.Count);
        }
        public void AddTimeSlot_TimeSlotWithoutTimeNotPossible_Success()
        {
            var unitUnderTest = new SchedulingBoard(Guid.NewGuid())
            {
                StartsAt = DateTime.Today.Date.AddDays(1).AddHours(8)
            };

            for (int i = 0; i < 4; i++)
            {
                var timeSlot = TimeSlotFactory.CreateTimeSlot(TimeSlotType.Intervention);
                timeSlot.SetTime(unitUnderTest.StartsAt.AddMinutes(120 * i));
                unitUnderTest.AddTimeSlot(timeSlot);
            }

            var result = unitUnderTest.AddTimeSlot(TimeSlotFactory.CreateTimeSlot(TimeSlotType.Control));

            Assert.False(result);
        }
        public void Usage_FullBoardButBreaksDoesNotCount_Success()
        {
            var unitUnderTest = new SchedulingBoard(Guid.NewGuid())
            {
                StartsAt = DateTime.Today.Date.AddDays(1).AddHours(8)
            };

            for (int i = 0; i < 4; i++)
            {
                var timeSlotIntervention = TimeSlotFactory.CreateTimeSlot(TimeSlotType.Intervention);
                timeSlotIntervention.SetTime(unitUnderTest.StartsAt.AddMinutes(120 * i));
                unitUnderTest.AddTimeSlot(timeSlotIntervention);
            }

            var result = unitUnderTest.Usage;

            Assert.Equal((decimal)0.75, result);
        }
        public void Usage_FullBoard_Success()
        {
            var unitUnderTest = new SchedulingBoard(Guid.NewGuid())
            {
                StartsAt = DateTime.Today.Date.AddDays(1).AddHours(8)
            };

            for (int i = 0; i < 16; i++)
            {
                var timeSlot = TimeSlotFactory.CreateTimeSlot(TimeSlotType.Control);
                timeSlot.SetTime(unitUnderTest.StartsAt.AddMinutes(30 * i));
                unitUnderTest.AddTimeSlot(timeSlot);
            }

            var result = unitUnderTest.Usage;

            Assert.Equal(1, result);
        }
        public void IsTimeSlogValidForBoard_OverlappingAtTheEnd_Success()
        {
            var unitUnderTest = new SchedulingBoard(Guid.NewGuid())
            {
                StartsAt = DateTime.Today.Date.AddDays(1).AddHours(8)
            };

            var timeSlotExamination = TimeSlotFactory.CreateTimeSlot(TimeSlotType.Examination);

            timeSlotExamination.SetTime(unitUnderTest.StartsAt.AddHours(1));
            unitUnderTest.AddTimeSlot(timeSlotExamination);

            var timeSlotControl = TimeSlotFactory.CreateTimeSlot(TimeSlotType.Examination);

            timeSlotControl.SetTime(unitUnderTest.StartsAt.AddMinutes(30));
            var isValid = unitUnderTest.IsTimeSlogValidForBoard(timeSlotControl);

            Assert.False(isValid);
        }
示例#13
0
        public DateTime?GetTimeForTimeSlot(TimeSlot timeSlot)
        {
            var timeSlotCandidate = TimeSlotFactory.CreateTimeSlot(timeSlot.TimeSlotType);

            timeSlotCandidate.SetTime(StartsAt < DateTime.Now ? DateTime.Now : StartsAt);
            if (IsTimeSlogValidForBoard(timeSlotCandidate))
            {
                return(timeSlotCandidate.ScheduledFor);
            }

            foreach (var alreadyScheduledTimeSlots in SchedulerTimeSlot.Where(m => m.MandatoryBreakConcludesAt.HasValue))
            {
                timeSlotCandidate.SetTime(alreadyScheduledTimeSlots.MandatoryBreakConcludesAt.GetValueOrDefault());
                if (IsTimeSlogValidForBoard(timeSlotCandidate))
                {
                    return(timeSlotCandidate.ScheduledFor);
                }
            }
            return(null);
        }
        public void GetTimeForTimeSlot_BoardIsCompletelyFull_Success()
        {
            var unitUnderTest = new SchedulingBoard(Guid.NewGuid())
            {
                StartsAt = DateTime.Today.Date.AddDays(1).AddHours(8)
            };

            for (int i = 0; i < 3; i++)
            {
                var timeSlotIntervention = TimeSlotFactory.CreateTimeSlot(TimeSlotType.Intervention);
                timeSlotIntervention.SetTime(unitUnderTest.StartsAt.AddHours(2 * i));
                unitUnderTest.AddTimeSlot(timeSlotIntervention);
            }
            var timeSlotExamination = TimeSlotFactory.CreateTimeSlot(TimeSlotType.Examination);

            timeSlotExamination.SetTime(unitUnderTest.StartsAt.AddHours(6));
            unitUnderTest.AddTimeSlot(timeSlotExamination);

            var scheduledAt = unitUnderTest.GetTimeForTimeSlot(TimeSlotFactory.CreateTimeSlot(TimeSlotType.Intervention));

            Assert.Null(scheduledAt);
        }
        public void GetTimeForTimeSlot_FreeSpotAtTheEndOfIntervalNoTimeForBreak_Success()
        {
            var unitUnderTest = new SchedulingBoard(Guid.NewGuid())
            {
                StartsAt = DateTime.Today.Date.AddDays(1).AddHours(8)
            };

            for (int i = 0; i < 3; i++)
            {
                var timeSlotIntervention = TimeSlotFactory.CreateTimeSlot(TimeSlotType.Intervention);
                timeSlotIntervention.SetTime(unitUnderTest.StartsAt.AddHours(2 * i));
                unitUnderTest.AddTimeSlot(timeSlotIntervention);
            }
            var timeSlotControl = TimeSlotFactory.CreateTimeSlot(TimeSlotType.Control);

            timeSlotControl.SetTime(unitUnderTest.StartsAt.AddHours(6));
            unitUnderTest.AddTimeSlot(timeSlotControl);

            var scheduledAt = unitUnderTest.GetTimeForTimeSlot(TimeSlotFactory.CreateTimeSlot(TimeSlotType.Intervention));

            Assert.NotNull(scheduledAt);
            Assert.NotEqual(unitUnderTest.StartsAt, scheduledAt);
        }
示例#16
0
 public void CreateTimeSlot_UnknownType_ThrowsException()
 {
     Assert.Throws <ArgumentException>(() => TimeSlotFactory.CreateTimeSlot((TimeSlotType)(-1)));
 }
示例#17
0
        public void SetTime_TimeInPast_ThrowsException()
        {
            var unitUnderTest = TimeSlotFactory.CreateTimeSlot(TimeSlotType.Control);

            Assert.Throws <ArgumentException>(() => unitUnderTest.SetTime(DateTime.Now.AddHours(-1)));
        }
示例#18
0
 public virtual TimeSlot ToEntity()
 {
     return(TimeSlotFactory.CreateTimeSlot(TimeSlotType));
 }