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))); }
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); }