public void EveningSession_NetWorkingEvent_IsNotAdded_TimeIsBefore()
        {
            //Arrange
            var dateTime = new DateTime(2016, 2, 1, 1, 0, 0);

            var mockObject = Enumerable.Repeat(new Session()
            {
                Duration = 30, Title = "Test"
            }, 25);


            ISheduler sheduler = new StubISheduler
            {
                SheduleSessionListOfSessionDateTimeInt32 = (list, dtime, duration) => new List <Session>()
                {
                    new Session()
                    {
                        Title     = "Test",
                        Duration  = 40,
                        StartTime = new DateTime(2016, 2, 1, 3, 0, 0)
                    }
                }
            };


            //Act
            var result =
                new EveningSession(dateTime, 240, sheduler).CreateShedule(mockObject.ToList());

            //Assert
            Assert.IsFalse(result.Any(h => h.Title.Contains("Networking")), "Expected sequence should not contain netwroking");
        }
        public void EveningSession_NetWorkingEvent_IsAdded_ValidTiming()
        {
            //Arrange
            var dateTime = new DateTime(2016, 2, 1, 1, 0, 0);

            var mockObject = Enumerable.Repeat(new Session()
            {
                Duration = 30, Title = "Test"
            }, 25);


            ISheduler sheduler = new StubISheduler
            {
                SheduleSessionListOfSessionDateTimeInt32 = (list, dtime, duration) => new List <Session>()
                {
                    new Session()
                    {
                        Title     = "Test",
                        Duration  = 30,
                        StartTime = new DateTime(2016, 2, 1, 4, 30, 0)
                    }
                }
            };


            //Act
            var result =
                new EveningSession(dateTime, 240, sheduler).CreateShedule(mockObject.ToList());

            var networkingItem = result.FirstOrDefault(h => h.Title.Contains("Networking"));

            //Assert
            Assert.IsNotNull(networkingItem, "Instance is null");
            Assert.IsTrue(networkingItem.StartTime.Hour <= 4 || networkingItem.StartTime.Hour >= 5, "The networking started at invalid time");
        }
        /// <summary>
        ///     Create the task and shedule the time
        /// </summary>
        /// <param name="programmsToBeSheduled"></param>
        /// <returns></returns>
        public List <Session> TaskSheduler(List <Session> programmsToBeSheduled)
        {
            var morningSession    = new MorningSession(MorningStartTime, MorningDuration, _sheduler);
            var sheduledProgramms = morningSession.CreateShedule(programmsToBeSheduled);

            var eveningSessionCandiates = programmsToBeSheduled.Except(sheduledProgramms).ToList();

            var eveningSession = new EveningSession(EveningStartTime, EveningDuration, _sheduler);

            sheduledProgramms.AddRange(eveningSession.CreateShedule(eveningSessionCandiates));


            return(sheduledProgramms);
        }
 public TaskManager(ISheduler sheduler, MorningSession MorningSession, EveningSession eveningSession)
 {
     _sheduler       = sheduler;
     _morningSession = MorningSession;
 }