private static void AddValidationsForViewModel(EnterYourDetailsBodyViewModel viewModel, ModelExplorer modelExplorer, IValidationAttributeAdapterProvider validationAttributeAdapterProvider, ClientModelValidationContext context) { var properties = new Dictionary <string, string>() { { nameof(EnterYourDetailsBodyViewModel.EmailAddress), nameof(EnterYourDetailsBodyViewModel.EmailAddressIsRequired) }, { nameof(EnterYourDetailsBodyViewModel.TelephoneNumber), nameof(EnterYourDetailsBodyViewModel.TelephoneNumberIsRequired) }, { nameof(EnterYourDetailsBodyViewModel.CallbackDateOptionSelected), nameof(EnterYourDetailsBodyViewModel.IsCallback) }, { nameof(EnterYourDetailsBodyViewModel.CallbackTimeOptionSelected), nameof(EnterYourDetailsBodyViewModel.IsCallback) }, }; var errorMessages = new Dictionary <string, string>() { { nameof(EnterYourDetailsBodyViewModel.EmailAddress), "Enter your email address" }, { nameof(EnterYourDetailsBodyViewModel.TelephoneNumber), "Enter your telephone number" }, { nameof(EnterYourDetailsBodyViewModel.CallbackDateOptionSelected), EnterYourDetailsBodyViewModel.CallbackDateOptionValidationError }, { nameof(EnterYourDetailsBodyViewModel.CallbackTimeOptionSelected), EnterYourDetailsBodyViewModel.CallbackTimeOptionValidationError }, }; if (properties.Keys.Contains(modelExplorer.Metadata.PropertyName)) { var propertyInfo = viewModel.GetType().GetProperty(properties[modelExplorer.Metadata.PropertyName]); if (propertyInfo != null) { var isRequiredValue = (bool?)propertyInfo.GetValue(viewModel, null); if (isRequiredValue != null && isRequiredValue.Value) { var validationAdapter = (RequiredAttributeAdapter)validationAttributeAdapterProvider.GetAttributeAdapter(new RequiredAttribute(), null); var errorMessage = errorMessages[modelExplorer.Metadata.PropertyName]; validationAdapter.Attribute.ErrorMessage = errorMessage; validationAdapter.AddValidation(context); } } } }
public void EnterYourDetailsBodyViewModelnonCallbackMandatoryTest(Category category) { // Arrange var expectedErrors = new Dictionary <string, string> { { nameof(EnterYourDetailsBodyViewModel.FirstName), "Enter your" }, { nameof(EnterYourDetailsBodyViewModel.LastName), "Enter your" }, { nameof(EnterYourDetailsBodyViewModel.DateOfBirth), "Enter your" }, { nameof(EnterYourDetailsBodyViewModel.Postcode), "Enter your" }, { nameof(EnterYourDetailsBodyViewModel.EmailAddress), "Enter your" }, }; var viewModel = new EnterYourDetailsBodyViewModel { SelectedCategory = category, }; // Act var(isValid, validationResults) = ModelValidator.TryValidateModel(viewModel); // Assert Assert.False(isValid); Assert.True(validationResults.Count == expectedErrors.Count + 1); expectedErrors.Keys.ToList().ForEach(fe => { Assert.NotNull(validationResults.First(f => f.MemberNames.Any(a => a == fe))); Assert.Contains(expectedErrors[fe], validationResults.First(f => f.MemberNames.Any(a => a == fe)).ErrorMessage, StringComparison.Ordinal); }); Assert.NotNull(validationResults.First(f => f.ErrorMessage.Contains("You must accept our", StringComparison.Ordinal))); }
private async Task <bool> SendEmailAsync(EnterYourDetailsBodyViewModel model) { Logger.LogInformation($"{nameof(SendEmailAsync)} preparing email"); var contactUsRequestModel = mapper.Map <ContactUsEmailRequestModel>(model); contactUsRequestModel.ToEmailAddress = await routingService.GetEmailToSendTo(model.Postcode !, model.SelectedCategory).ConfigureAwait(false); return(await notifyEmailService.SendEmailAsync(contactUsRequestModel).ConfigureAwait(false)); }
public async Task <IActionResult> EnterYourDetailsBody() { var sessionStateModel = await GetSessionStateAsync().ConfigureAwait(false); var viewModel = new EnterYourDetailsBodyViewModel { SelectedCategory = sessionStateModel?.State?.Category ?? Category.None, MoreDetail = sessionStateModel?.State?.MoreDetail, IsCallback = sessionStateModel?.State?.IsCallback ?? false, }; Logger.LogInformation($"{nameof(EnterYourDetailsBody)} has returned content"); return(this.NegotiateContentResult(viewModel)); }
public async Task EnterYourDetailsControllerViewPostReturnsNotAcceptable(string mediaTypeName) { // Arrange var viewModel = new EnterYourDetailsBodyViewModel(); var controller = BuildEnterYourDetailsController(mediaTypeName); controller.ModelState.AddModelError(nameof(EnterYourDetailsBodyViewModel.SelectedCategory), "Fake error"); // Act var result = await controller.EnterYourDetailsView(viewModel).ConfigureAwait(false); // Assert A.CallTo(() => FakeRoutingService.GetEmailToSendTo(A <string> .Ignored, A <Category> .Ignored)).MustNotHaveHappened(); A.CallTo(() => FakeMapper.Map <ContactUsEmailRequestModel>(A <EnterYourDetailsBodyViewModel> .Ignored)).MustNotHaveHappened(); A.CallTo(() => FakeNotifyEmailService.SendEmailAsync(A <ContactUsEmailRequestModel> .Ignored)).MustNotHaveHappened(); var statusResult = Assert.IsType <StatusCodeResult>(result); A.Equals((int)HttpStatusCode.NotAcceptable, statusResult.StatusCode); controller.Dispose(); }
public async Task EnterYourDetailsControllerViewPostReturnsSameViewForInvalidModel() { // Arrange var viewModel = new EnterYourDetailsBodyViewModel(); var controller = BuildEnterYourDetailsController(MediaTypeNames.Text.Html); controller.ModelState.AddModelError(nameof(EnterYourDetailsBodyViewModel.SelectedCategory), "Fake error"); // Act var result = await controller.EnterYourDetailsView(viewModel).ConfigureAwait(false); // Assert A.CallTo(() => FakeRoutingService.GetEmailToSendTo(A <string> .Ignored, A <Category> .Ignored)).MustNotHaveHappened(); A.CallTo(() => FakeMapper.Map <ContactUsEmailRequestModel>(A <EnterYourDetailsBodyViewModel> .Ignored)).MustNotHaveHappened(); A.CallTo(() => FakeNotifyEmailService.SendEmailAsync(A <ContactUsEmailRequestModel> .Ignored)).MustNotHaveHappened(); var viewResult = Assert.IsType <ViewResult>(result); _ = Assert.IsAssignableFrom <EnterYourDetailsViewModel>(viewResult.ViewData.Model); controller.Dispose(); }