public async Task Then_Will_Return_Error_If_Course_Has_Active_Rules() { //Arrange var request = new ValidateReservationQuery { CourseCode = CourseId, ReservationId = ReservationId, StartDate = _reservation.StartDate.Value.AddDays(1) }; _course.Rules.Add(new Rule { ActiveFrom = request.StartDate.AddDays(-2), ActiveTo = request.StartDate.AddDays(2) }); //Act var result = await _handler.Handle(request, CancellationToken.None); //Assert var error = result?.Errors.FirstOrDefault(); Assert.IsNotNull(error); Assert.AreEqual(nameof(ValidateReservationQuery.CourseCode), error.PropertyName); }
public void Arrange() { _validator = new ValidateReservationValidator(); _query = new ValidateReservationQuery { ReservationId = Guid.NewGuid(), CourseCode = "1", StartDate = DateTime.Now }; }
public async Task Then_Validates_Given_Course() { //Arrange var request = new ValidateReservationQuery { CourseCode = CourseId, ReservationId = ReservationId, StartDate = _reservation.StartDate.Value.AddDays(1) }; //Act await _handler.Handle(request, CancellationToken.None); //Assert _courseService.Verify(s => s.GetCourseById(CourseId), Times.Once); }
public async Task Then_The_Query_Is_Validated() { //Assert var request = new ValidateReservationQuery { CourseCode = CourseId, ReservationId = ReservationId, StartDate = _reservation.StartDate.Value.AddDays(-1) }; //Act await _handler.Handle(request, CancellationToken.None); //Assert _validator.Verify(x => x.ValidateAsync(request), Times.Once); }
public async Task Then_Will_Return_No_Errors_Reservation_Is_Valid() { //Arrange var request = new ValidateReservationQuery { CourseCode = CourseId, ReservationId = ReservationId, StartDate = _reservation.StartDate.Value.AddDays(1) }; //Act var result = await _handler.Handle(request, CancellationToken.None); //Assert Assert.IsNotNull(result); Assert.IsEmpty(result.Errors); }
public async Task Then_Will_Return_Error_If_Training_Start_Date_Is_After_Reservation_Expiry_Date() { //Arrange var request = new ValidateReservationQuery { CourseCode = CourseId, ReservationId = ReservationId, StartDate = _reservation.ExpiryDate.Value.AddDays(1) }; //Act var result = await _handler.Handle(request, CancellationToken.None); //Assert Assert.IsNotNull(result); Assert.AreEqual(1, result.Errors.Count); }
public async Task <IActionResult> Validate(Guid id, string courseCode, DateTime startDate) { try { var request = new ValidateReservationQuery { ReservationId = id, CourseCode = courseCode, StartDate = startDate }; var response = await _mediator.Send(request); if (response == null) { return(NotFound()); } return(Ok(new ValidateReservationViewModel { ValidationErrors = response.Errors .Select(e => new ReservationValidationErrorViewModel { PropertyName = e.PropertyName, Reason = e.Reason }) .ToList() })); } catch (ArgumentException e) { _logger.LogWarning(e, e.Message); return(BadRequest(new ArgumentErrorViewModel { Message = e.Message, Params = e.ParamName })); } catch (EntityNotFoundException <Domain.Reservations.Reservation> e) { _logger.LogError(e, e.Message); return(NotFound()); } }
public void And_No_Reservation_Found_Then_Throws_EntityNotFoundException() { //Arrange var request = new ValidateReservationQuery { CourseCode = CourseId, ReservationId = ReservationId, StartDate = _reservation.StartDate.Value.AddDays(1) }; _reservationService .Setup(r => r.GetReservation(It.IsAny <Guid>())) .ReturnsAsync((Reservation)null); //Act Func <Task> act = async() => await _handler.Handle(request, CancellationToken.None); //Assert act.Should().Throw <EntityNotFoundException <Reservation> >(); }
public void Then_If_The_Query_Fails_Validation_Then_An_Argument_Exception_Is_Thrown() { //Arrange var request = new ValidateReservationQuery { CourseCode = CourseId, ReservationId = ReservationId, StartDate = _reservation.StartDate.Value.AddDays(-1) }; //Arrange _validator.Setup(x => x.ValidateAsync(It.IsAny <ValidateReservationQuery>())) .ReturnsAsync(new ValidationResult { ValidationDictionary = new Dictionary <string, string> { { "", "" } } }); //Act Assert Assert.ThrowsAsync <ArgumentException>(async() => await _handler.Handle(request, CancellationToken.None)); }
public async Task Then_Will_Return_Error_Messages_If_No_Course_Found() { //Arrange var request = new ValidateReservationQuery { CourseCode = CourseId, ReservationId = ReservationId, StartDate = _reservation.StartDate.Value.AddDays(1) }; _courseService.Setup(s => s.GetCourseById(It.IsAny <string>())).ReturnsAsync((Course)null); //Act var result = await _handler.Handle(request, CancellationToken.None); //Assert var error = result?.Errors.FirstOrDefault(); Assert.IsNotNull(error); Assert.AreEqual(nameof(ValidateReservationQuery.CourseCode), error.PropertyName); Assert.AreEqual("Selected course cannot be found", error.Reason); }
public async Task Then_Will_Return_No_Error_Messages_If_Course_Has_No_Active_Rules() { //Arrange var request = new ValidateReservationQuery { CourseCode = CourseId, ReservationId = ReservationId, StartDate = _reservation.StartDate.Value.AddDays(1) }; _course.Rules.Add(new Rule { ActiveFrom = _reservation.StartDate.Value.AddDays(-10), ActiveTo = _reservation.StartDate.Value.AddDays(-5) }); //Act var result = await _handler.Handle(request, CancellationToken.None); //Assert Assert.IsNotNull(result); Assert.IsEmpty(result.Errors); }
public async Task Then_Will_Not_Cause_A_Validation_Error_On_Start_Date_If_It_Is_A_Change_Reservation() { //Arrange var startDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(-6); _reservation = new Reservation(time => Task.FromResult(new List <Rule>() as IList <Rule>), ReservationId, 1, false, DateTime.Now, startDate, startDate.AddMonths(3), ReservationStatus.Change, new Domain.Entities.Course(), 1, 1, "Legal Entity", 0, null); _reservationService .Setup(r => r.GetReservation(It.IsAny <Guid>())) .ReturnsAsync(_reservation); var request = new ValidateReservationQuery { CourseCode = CourseId, ReservationId = ReservationId, StartDate = _reservation.ExpiryDate.Value.AddMonths(1) }; //Act var result = await _handler.Handle(request, CancellationToken.None); //Assert Assert.IsNotNull(result); Assert.IsEmpty(result.Errors); }
public async Task Then_Will_Return_Error_Messages_If_Course_Is_A_Framework() { //Arrange var request = new ValidateReservationQuery { CourseCode = CourseId, ReservationId = ReservationId, StartDate = _reservation.StartDate.Value }; var course = new Course("12-34", "Test Course", "1", DateTime.Today); _courseService.Setup(s => s.GetCourseById(It.IsAny <string>())).ReturnsAsync(course); //Act var result = await _handler.Handle(request, CancellationToken.None); //Assert var error = result?.Errors.FirstOrDefault(); Assert.IsNotNull(error); Assert.AreEqual(nameof(ValidateReservationQuery.CourseCode), error.PropertyName); Assert.AreEqual("Select an apprenticeship training course standard", error.Reason); }
public async Task Then_Will_Return_Error_Message_If_Training_Start_Date_Is_After_Reservation_Expiry_Date() { //Arrange var request = new ValidateReservationQuery { CourseCode = CourseId, ReservationId = ReservationId, StartDate = _reservation.ExpiryDate.Value.AddDays(1) }; var expectedErrorMessage = "Training start date must be between the funding reservation dates " + $"{_reservation.StartDate.Value:MM yyyy} to " + $"{_reservation.ExpiryDate.Value:MM yyyy}"; //Act var result = await _handler.Handle(request, CancellationToken.None); //Assert var error = result?.Errors.FirstOrDefault(); Assert.IsNotNull(error); Assert.AreEqual(nameof(ValidateReservationQuery.StartDate), error.PropertyName); Assert.AreEqual(expectedErrorMessage, error.Reason); }
public async Task And_Reservation_Is_Levy_Then_Valid() { //Arrange var request = new ValidateReservationQuery { CourseCode = CourseId, ReservationId = ReservationId, StartDate = _reservation.StartDate.Value.AddDays(1) }; _reservation = new Reservation( time => Task.FromResult(new List <Rule>() as IList <Rule>), ReservationId, 1, true, DateTime.Now, null, null, ReservationStatus.Pending, null, null, 1, "Legal Entity", null, null); _reservationService .Setup(r => r.GetReservation(It.IsAny <Guid>())) .ReturnsAsync(_reservation); //Act var result = await _handler.Handle(request, CancellationToken.None); //Assert Assert.IsNotNull(result); Assert.IsEmpty(result.Errors); }