public AvailableTimesDTO GetReservationTimeByDate(DateTime dateTime) { //Using hardcoded values for now, later development would use Database Opening times var timeSlots = new AvailableTimesDTO() { AvailabilityDate = dateTime.Date, TableOpenings = new List <AvailableTimesDTO.TableTimes>() }; var startTime = new TimeSpan(12, 00, 00); var endTime = new TimeSpan(22, 00, 00); var startDateTime = dateTime.Date + startTime; var endDateTime = dateTime.Date + endTime; var all = _context.Reservation .Include(r => r.ReservationsTables) .ThenInclude(r => r.RestaurantTables) .Where(r => r.ReservationTime <= endDateTime && r.ReservationTime >= startDateTime).AsNoTracking(); var tables = new TableRepository(_context).GetAll(); var availabilityList = new List <AvailableTimesDTO.TableTimes>(); foreach (var table in tables) { var tableTime = new AvailableTimesDTO.TableTimes() { Table = table }; var timesAvailable = new List <AvailableTimesDTO.TableTimes.TimePair>(); var times = all.Where(r => r.ReservationsTables.Any(t => t.RestaurantTablesId == table.Id)) .Select(r => r.ReservationTime).OrderBy(t => t.TimeOfDay); var lastTime = startDateTime; foreach (var time in times) { timesAvailable.Add(new AvailableTimesDTO.TableTimes.TimePair() { Start = lastTime, End = time }); lastTime = time.AddMinutes(90); } if (lastTime.AddMinutes(90) <= endDateTime) { timesAvailable.Add( new AvailableTimesDTO.TableTimes.TimePair() { Start = lastTime, End = endDateTime }); } tableTime.Openings = timesAvailable; availabilityList.Add(tableTime); } timeSlots.TableOpenings = availabilityList; return(timeSlots); }
public void GetBydate() { //Arrange var mock = new Mock <ITableRepository>(); var timePairList = new List <AvailableTimesDTO.TableTimes.TimePair>(); var t1 = new AvailableTimesDTO.TableTimes.TimePair { Start = new DateTime(2020, 03, 10, 12, 00, 00), End = new DateTime(2020, 03, 10, 22, 00, 00) }; timePairList.Add(t1); var available = new AvailableTimesDTO { AvailabilityDate = new DateTime(2020, 03, 10), TableOpenings = new List <AvailableTimesDTO.TableTimes> { new AvailableTimesDTO.TableTimes { Table = new RestaurantTablesDTO { Id = 8, NoOfSeats = 3, TableNumber = 8 }, Openings = timePairList } } }; var date = new DateTime(2020, 12, 12, 18, 00, 00); mock.Setup(x => x.GetReservationTimeByDate(date)).Returns(available); var controller = new TableController(mock.Object); //Act var t = mock.Object.GetReservationTimeByDate(date); var result = controller.Get(date); var okResult = result as OkObjectResult; //Assert Assert.IsNotNull(t); Assert.IsTrue(t.TableOpenings.Count() > 0); Assert.IsNotNull(result); Assert.AreEqual(okResult.StatusCode, (int)HttpStatusCode.OK); }