Пример #1
0
        public async Task WhenBodyCalledWithInvalidPassword_ReturnToViewWithError()
        {
            var customer = new Customer
            {
                CustomerId = new Guid("c2e27821-cc60-4d3d-b4f0-cbe20867897c"),
                Contact    = new Contact
                {
                    EmailAddress = "user"
                }
            };

            _authService.GetCustomer(Arg.Any <ClaimsPrincipal>()).ReturnsForAnyArgs(customer);
            _openIdConnectClient.VerifyPassword("user", "password").ReturnsForAnyArgs(Result.Fail("Failed"));
            var controller = new CloseYourAccountController(_compositeSettings, _authService, _openIdConnectClient, _documentService, _config);
            var closeYourAccountCompositeViewModel = new CloseYourAccountCompositeViewModel();

            controller.ControllerContext = new ControllerContext
            {
                HttpContext = new DefaultHttpContext()
            };
            var result = await controller.Body(closeYourAccountCompositeViewModel) as ViewResult;

            result.ViewData.ModelState.IsValid.Should().BeFalse();
            result.ViewData.ModelState["Password"].Errors[0].ErrorMessage.Should().Be("Wrong password. Try again.");
        }
        public async Task <IActionResult> Body(CloseYourAccountCompositeViewModel model)
        {
            if (!ModelState.IsValid)
            {
                ViewData["Title"] = $"Error: {ViewModel.PageTitle}";
                return(View(ViewModel));
            }

            var customer = await GetCustomerDetails();

            if (_openIdConnectClient.VerifyPassword(customer.Contact.EmailAddress, model.Password).Result.IsFailure)
            {
                ModelState.AddModelError("Password", "Wrong password. Try again.");
                return(View(ViewModel));
            }

            ViewModel.PageTitle = $"Are you sure you want to close your account? | {ViewModel.PageTitle}";
            var sharedContent = await _documentService.GetByIdAsync(_sharedContent, "account").ConfigureAwait(false);

            ViewModel.SharedSideBar = sharedContent?.Content;
            return(base.View("ConfirmDeleteAccount", ViewModel));
        }