Exemple #1
0
        public void ValidateRequest_PatientAlreadyHaveBooking_ReturnsFailedValidationResult()
        {
            //arrange
            var request = GetValidRequest();

            var now   = _clockMock.Object.UtcNow.UtcDateTime;
            var order = _fixture.Create <Order>();

            order.DoctorId    = request.DoctorId;
            order.Doctor      = null;
            order.PatientId   = request.PatientId;
            order.Patient     = null;
            order.StartTime   = now.AddMinutes(30);
            order.EndTime     = now.AddHours(2);
            order.IsCancelled = false;

            _context.Order.Add(order);
            _context.SaveChanges();

            //act
            var res = _addBookingRequestValidator.ValidateRequest(request);

            //assert
            res.PassedValidation.Should().BeFalse();
            res.Errors.Should().Contain(ValidationErrorMessages.IsAlreadyBooked(nameof(Patient)));
        }
Exemple #2
0
        private bool ValidateBookingDateTimeAvailability(AddBookingRequest request, ref PdrValidationResult result)
        {
            var now = _systemClock.UtcNow;

            if (request.EndTime <= request.StartTime)
            {
                result.Errors.Add(ValidationErrorMessages.BookingEndDateShouldBeGreaterThenStartDate);
            }
            if (request.StartTime <= now)
            {
                result.Errors.Add(ValidationErrorMessages.BookingIsNotAllowedAtPast);
            }
            //add custom time to let doctor prepare for an appointment/complete booking
            if (request.StartTime <= now.AddMinutes(DomainConstants.MinutesForDoctorPreparation))
            {
                result.Errors.Add(ValidationErrorMessages.DoctorRequiresAdditionalTime);
            }

            if (result.Errors.Any())
            {
                result.PassedValidation = false;
                return(true);
            }

            var patientOverlappingAppointments = _context.Order.Where(o => !o.IsCancelled &&
                                                                      o.PatientId == request.PatientId &&
                                                                      request.StartTime < o.EndTime &&
                                                                      o.StartTime < request.EndTime);

            if (patientOverlappingAppointments.Any())
            {
                result.PassedValidation = false;
                result.Errors.Add(ValidationErrorMessages.IsAlreadyBooked(nameof(Patient)));
                return(true);
            }

            var doctorOverLappingAppointments = _context.Order.Where(o => !o.IsCancelled &&
                                                                     o.DoctorId == request.DoctorId &&
                                                                     request.StartTime < o.EndTime &&
                                                                     o.StartTime < request.EndTime);

            if (doctorOverLappingAppointments.Any())
            {
                result.PassedValidation = false;
                result.Errors.Add(ValidationErrorMessages.IsAlreadyBooked(nameof(Doctor)));
                return(true);
            }

            return(false);
        }