Exemplo n.º 1
0
        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)));
        }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 4
0
        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));
        }
Exemplo n.º 5
0
        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();
        }
Exemplo n.º 6
0
        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();
        }