public void ThenWillNotIncludeRulesCreatedAfterReservationStartDate()
        {
            //Arrange
            var reservationDates = new ReservationDates
            {
                TrainingStartDate      = DateTime.Now.AddDays(10),
                ReservationStartDate   = DateTime.Now,
                ReservationExpiryDate  = DateTime.Now.AddDays(20),
                ReservationCreatedDate = DateTime.Now.AddDays(-5)
            };

            var course = new Course("1", "Test", "1", DateTime.Today);

            var unactiveRule = new Rule
            {
                CreatedDate = DateTime.Now,
                ActiveFrom  = DateTime.Now.AddDays(5),
                ActiveTo    = DateTime.Now.AddDays(15)
            };

            course.Rules.Add(unactiveRule);

            //Act
            var result = course.GetActiveRules(reservationDates);

            //Assert
            Assert.IsNotNull(result);
            Assert.IsEmpty(result);
        }
        public void ThenWillEmptyCollectionIfNotActiveRules()
        {
            //Arrange
            var reservationDates = new ReservationDates
            {
                TrainingStartDate      = DateTime.Now.AddDays(30),
                ReservationStartDate   = DateTime.Now.AddDays(20),
                ReservationExpiryDate  = DateTime.Now.AddDays(40),
                ReservationCreatedDate = DateTime.Now.AddDays(18)
            };

            var course = new Course("1", "Test", "1", DateTime.Today);

            var unactiveRule = new Rule
            {
                ActiveFrom = DateTime.Now.AddDays(-2),
                ActiveTo   = DateTime.Now.AddDays(-4)
            };

            course.Rules.Add(unactiveRule);

            //Act
            var result = course.GetActiveRules(reservationDates);

            //Assert
            Assert.IsNotNull(result);
            Assert.IsEmpty(result);
        }
        public void ThenWillReturnActiveRules(string ruleActiveFromDate, string ruleActiveToDate, int expectedRuleCount)
        {
            //Arrange
            var reservationDates = new ReservationDates
            {
                TrainingStartDate      = new DateTime(2019, 2, 1),
                ReservationStartDate   = new DateTime(2019, 1, 20),
                ReservationExpiryDate  = new DateTime(2019, 3, 1),
                ReservationCreatedDate = new DateTime(2019, 1, 18)
            };

            var course = new Course("1", "Test", "1", DateTime.Today);

            var activeRule = new Rule
            {
                ActiveFrom = DateTime.Parse(ruleActiveFromDate),
                ActiveTo   = DateTime.Parse(ruleActiveToDate)
            };

            course.Rules.Add(activeRule);

            //Act
            var result = course.GetActiveRules(reservationDates);

            //Assert

            Assert.IsNotNull(result);

            var rules = result as Rule[] ?? result.ToArray();

            Assert.AreEqual(expectedRuleCount, rules.Length);
        }
Ejemplo n.º 4
0
 public IEnumerable <Rule> GetActiveRules(ReservationDates dates)
 {
     return(Rules.Where(r =>
                        r.CreatedDate <= dates.ReservationCreatedDate &&
                        r.ActiveFrom <= dates.ReservationExpiryDate &&
                        r.ActiveTo >= dates.ReservationStartDate));
 }
        public ActionResult AddNewReservation(int roomId)
        {
            var reservation = new Reservation();

            var room = _context.Rooms.Where(r => r.Id == roomId).FirstOrDefault();

            reservation.Room      = room;
            reservation.DateStart = DateTime.Now;
            reservation.DateEnd   = DateTime.Now;

            ReservationDates reservationDates = new ReservationDates
            {
                Reservation = reservation,
                Dates       = redisDB.GetReservationsDatesForRoom(roomId)
            };

            return(View(reservationDates));
        }
        private async Task <ICollection <ReservationValidationError> > ValidateCourse(
            ValidateReservationQuery request,
            Reservation reservation)
        {
            var errors = new List <ReservationValidationError>();

            var course = await _courseService.GetCourseById(request.CourseCode);

            if (course == null)
            {
                errors.Add(new ReservationValidationError(nameof(request.CourseCode),
                                                          "Selected course cannot be found"));

                return(errors);
            }

            if (course.Type == ApprenticeshipType.Framework)
            {
                errors.Add(new ReservationValidationError(nameof(request.CourseCode),
                                                          "Select an apprenticeship training course standard"));

                return(errors);
            }

            var reservationDates = new ReservationDates
            {
                TrainingStartDate      = request.StartDate,
                ReservationStartDate   = reservation.StartDate.Value,
                ReservationExpiryDate  = reservation.ExpiryDate.Value,
                ReservationCreatedDate = reservation.CreatedDate
            };

            if (course.GetActiveRules(reservationDates).Any())
            {
                errors.Add(new ReservationValidationError(nameof(request.CourseCode),
                                                          "Selected course has restriction rules associated with it"));
            }

            return(errors);
        }