Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }