[Test, AutoData] //note cannot use moqautodata to construct controller here due to modelmetadata usage. public async Task And_Course_Validation_Error_Then_Returns_Validation_Error_Details( ReservationsRouteModel routeModel, TrainingDateModel trainingDateModel, ApprenticeshipTrainingFormModel formModel) { formModel.StartDate = JsonConvert.SerializeObject(trainingDateModel); formModel.SelectedCourseId = _course.Id; _mediator.Setup(mediator => mediator.Send(It.IsAny <CacheReservationCourseCommand>(), It.IsAny <CancellationToken>())) .ThrowsAsync(new ValidationException( new ValidationResult("Failed", new List <string> { "CourseId|The CourseId field is invalid." }), null, null)); var result = await _controller.PostApprenticeshipTraining(routeModel, formModel); Assert.IsNotNull(result); var actualViewResult = result as ViewResult; Assert.IsNotNull(actualViewResult); Assert.IsFalse(actualViewResult.ViewData.ModelState.IsValid); Assert.IsTrue(actualViewResult.ViewData.ModelState.ContainsKey("CourseId")); }
public void GivenIHaveNotChosenAStartDate() { var controller = Services.GetService <ReservationsController>(); var trainingDateViewModel = new TrainingDateViewModel(new TrainingDateModel()); var apprenticeshipTrainingFormModel = new ApprenticeshipTrainingFormModel { StartDate = trainingDateViewModel.SerializedModel, AccountLegalEntityPublicHashedId = TestData.AccountLegalEntity.AccountLegalEntityPublicHashedId }; TestData.ActionResult = controller.PostApprenticeshipTraining(TestData.ReservationRouteModel, apprenticeshipTrainingFormModel) .Result as ViewResult; }
public async Task Then_Adds_Guid_To_RouteModel( ReservationsRouteModel routeModel, TrainingDateModel trainingDateModel, ApprenticeshipTrainingFormModel formModel) { formModel.StartDate = JsonConvert.SerializeObject(trainingDateModel); formModel.SelectedCourseId = _course.Id; var result = await _controller.PostApprenticeshipTraining(routeModel, formModel) as RedirectToRouteResult; result.RouteValues.Should().ContainKey("Id") .WhichValue.Should().Be(routeModel.Id); }
public async Task And_Has_Ukprn_Then_Redirects_To_Provider_Route( ReservationsRouteModel routeModel, TrainingDateModel trainingDateModel, ApprenticeshipTrainingFormModel formModel) { formModel.StartDate = JsonConvert.SerializeObject(trainingDateModel); formModel.SelectedCourseId = null; var result = await _controller.PostApprenticeshipTraining(routeModel, formModel) as RedirectToRouteResult; result.Should().NotBeNull($"result was not a {typeof(RedirectToRouteResult)}"); result.RouteName.Should().Be(RouteNames.ProviderReview); }
public async Task Then_The_Model_Is_Validated_And_Confirmation_Returned( ApprenticeshipTrainingFormModel model, TrainingDateModel trainingDateModel, ReservationsRouteModel routeModel) { model.StartDate = JsonConvert.SerializeObject(trainingDateModel); _controller.ModelState.AddModelError("StartDate", "StartDate"); var actual = await _controller.PostApprenticeshipTraining(routeModel, model); var actualModel = actual as ViewResult; Assert.IsNotNull(actualModel); Assert.AreEqual("ApprenticeshipTraining", actualModel.ViewName); }
public async Task And_CachedReservationNotFoundException_And_Has_Ukprn_Then_Redirect_To_ProviderIndex( ReservationsRouteModel routeModel, TrainingDateModel trainingDateModel, ApprenticeshipTrainingFormModel formModel, CachedReservationNotFoundException notFoundException) { formModel.StartDate = JsonConvert.SerializeObject(trainingDateModel); formModel.SelectedCourseId = _course.Id; _mediator .Setup(mediator => mediator.Send(It.IsAny <GetCachedReservationQuery>(), It.IsAny <CancellationToken>())) .ThrowsAsync(notFoundException); var actual = await _controller.PostApprenticeshipTraining(routeModel, formModel) as RedirectToRouteResult; actual.Should().NotBeNull(); actual.RouteName.Should().Be(RouteNames.ProviderIndex); }
public void GivenIHaveAReservationStartDateOfAugust(string month) { TestData.BuildTrainingDateModel(month); var controller = Services.GetService <ReservationsController>(); var trainingDateViewModel = new TrainingDateViewModel(TestData.TrainingDate); var apprenticeshipTrainingFormModel = new ApprenticeshipTrainingFormModel { StartDate = trainingDateViewModel.SerializedModel, AccountLegalEntityPublicHashedId = TestData.AccountLegalEntity.AccountLegalEntityPublicHashedId }; var result = controller.PostApprenticeshipTraining(TestData.ReservationRouteModel, apprenticeshipTrainingFormModel) .Result as RedirectToRouteResult; Assert.IsNotNull(result); Assert.AreEqual(RouteNames.EmployerReview, result.RouteName); }
public void WhenIChooseACourseAndDateOnBehalfOfAnEmployer(string month) { TestData.BuildTrainingDateModel(month); var trainingDateViewModel = new TrainingDateViewModel(TestData.TrainingDate); var postSelectCourseViewModel = new ApprenticeshipTrainingFormModel { AccountLegalEntityPublicHashedId = TestData.ReservationRouteModel.AccountLegalEntityPublicHashedId, SelectedCourseId = TestData.Course.Id, StartDate = trainingDateViewModel.SerializedModel }; var controller = Services.GetService <ReservationsController>(); var result = controller.PostApprenticeshipTraining(TestData.ReservationRouteModel, postSelectCourseViewModel) .Result as RedirectToRouteResult; result.RouteName.Should().Be(RouteNames.ProviderReview); result.RouteValues["Id"].Should().Be(TestData.ReservationRouteModel.Id); result.RouteValues["UkPrn"].Should().Be(TestData.ReservationRouteModel.UkPrn); }
public async Task And_No_Course_Then_Caches_Draft_Reservation( ReservationsRouteModel routeModel, TrainingDateModel trainingDateModel, ApprenticeshipTrainingFormModel formModel) { formModel.StartDate = JsonConvert.SerializeObject(trainingDateModel); formModel.SelectedCourseId = null; await _controller.PostApprenticeshipTraining(routeModel, formModel); _mediator.Verify(mediator => mediator.Send( It.Is <CacheReservationCourseCommand>(c => c.SelectedCourseId == null), It.IsAny <CancellationToken>())); _mediator.Verify(mediator => mediator.Send( It.Is <CacheReservationStartDateCommand>(c => c.TrainingDate.Equals(trainingDateModel) && c.UkPrn.Equals(routeModel.UkPrn)), It.IsAny <CancellationToken>())); }
public async Task And_No_Ukprn_Then_Caches_StartDate_Only( ReservationsRouteModel routeModel, TrainingDateModel trainingDateModel, ApprenticeshipTrainingFormModel formModel) { routeModel.UkPrn = null; formModel.StartDate = JsonConvert.SerializeObject(trainingDateModel); formModel.SelectedCourseId = _course.Id; await _controller.PostApprenticeshipTraining(routeModel, formModel); _mediator.Verify(mediator => mediator.Send( It.Is <CacheReservationCourseCommand>(c => c.SelectedCourseId.Equals(_course.Id)), It.IsAny <CancellationToken>()), Times.Never); _mediator.Verify(mediator => mediator.Send( It.Is <CacheReservationStartDateCommand>(c => c.TrainingDate.Equals(trainingDateModel)), It.IsAny <CancellationToken>())); }
public async Task Then_If_There_Is_An_Error_The_Model_Is_Correctly_Built_And_Returned_To_The_View_And_The_Back_Link_Is_Correct( string cohortDetailsUrl, ReservationsRouteModel routeModel, TrainingDateModel trainingDateModel, ApprenticeshipTrainingFormModel formModel) { formModel.FromReview = true; formModel.CohortRef = string.Empty; formModel.StartDate = JsonConvert.SerializeObject(trainingDateModel); _controller.ModelState.AddModelError("StartDate", "StartDate"); var result = await _controller.PostApprenticeshipTraining(routeModel, formModel); var actualViewResult = result as ViewResult; Assert.IsNotNull(actualViewResult); Assert.IsFalse(actualViewResult.ViewData.ModelState.IsValid); var actualModel = actualViewResult.Model as ApprenticeshipTrainingViewModel; Assert.IsNotNull(actualModel); Assert.AreEqual(RouteNames.ProviderReview, actualModel.BackLink); }
public async Task Then_If_There_Is_An_Error_The_Model_Is_Correctly_Built_And_Returned_To_The_View( string cohortDetailsUrl, ReservationsRouteModel routeModel, TrainingDateModel trainingDateModel, ApprenticeshipTrainingFormModel formModel) { formModel.FromReview = false; _urlHelper.Setup(helper => helper.GenerateCohortDetailsUrl(routeModel.UkPrn, routeModel.EmployerAccountId, formModel.CohortRef, false)) .Returns(cohortDetailsUrl); formModel.StartDate = JsonConvert.SerializeObject(trainingDateModel); _controller.ModelState.AddModelError("StartDate", "StartDate"); var result = await _controller.PostApprenticeshipTraining(routeModel, formModel); var actualViewResult = result as ViewResult; Assert.IsNotNull(actualViewResult); Assert.IsFalse(actualViewResult.ViewData.ModelState.IsValid); var actualModel = actualViewResult.Model as ApprenticeshipTrainingViewModel; Assert.IsNotNull(actualModel); Assert.AreEqual(cohortDetailsUrl, actualModel.BackLink); }
public async Task <IActionResult> PostApprenticeshipTraining(ReservationsRouteModel routeModel, ApprenticeshipTrainingFormModel formModel) { var isProvider = routeModel.UkPrn != null; TrainingDateModel trainingDateModel = null; try { if (!string.IsNullOrWhiteSpace(formModel.StartDate)) { trainingDateModel = JsonConvert.DeserializeObject <TrainingDateModel>(formModel.StartDate); } if (!ModelState.IsValid) { var model = await BuildApprenticeshipTrainingViewModel( isProvider, formModel.AccountLegalEntityPublicHashedId, formModel.SelectedCourseId, trainingDateModel, formModel.FromReview, formModel.CohortRef, routeModel.UkPrn, routeModel.EmployerAccountId); return(View("ApprenticeshipTraining", model)); } var cachedReservation = await _mediator.Send(new GetCachedReservationQuery { Id = routeModel.Id.GetValueOrDefault() }); if (isProvider) { var courseCommand = new CacheReservationCourseCommand { Id = cachedReservation.Id, SelectedCourseId = formModel.SelectedCourseId, UkPrn = routeModel.UkPrn }; await _mediator.Send(courseCommand); } var startDateCommand = new CacheReservationStartDateCommand { Id = cachedReservation.Id, TrainingDate = trainingDateModel, UkPrn = routeModel.UkPrn }; await _mediator.Send(startDateCommand); } catch (ValidationException e) { foreach (var member in e.ValidationResult.MemberNames) { ModelState.AddModelError(member.Split('|')[0], member.Split('|')[1]); } var model = await BuildApprenticeshipTrainingViewModel( isProvider, formModel.AccountLegalEntityPublicHashedId, formModel.SelectedCourseId, trainingDateModel, formModel.FromReview, formModel.CohortRef, routeModel.UkPrn, routeModel.EmployerAccountId); return(View("ApprenticeshipTraining", model)); } catch (CachedReservationNotFoundException ex) { _logger.LogWarning(ex, "Expected a cached reservation but did not find one."); return(RedirectToRoute(routeModel.UkPrn.HasValue ? RouteNames.ProviderIndex : RouteNames.EmployerIndex, routeModel)); } var reviewRouteName = isProvider ? RouteNames.ProviderReview : RouteNames.EmployerReview; return(RedirectToRoute(reviewRouteName, routeModel)); }