public async Task WhenFindAddressPostedAndNoAddressesAreFound_ThenReturnNoAddressFoundMessage()
        {
            var controller = new EditYourDetailsController(_compositeSettings, _authService, _addressSearchService,
                                                           _dssReader, _dssWriter, _documentService, _config)
            {
                ControllerContext = new ControllerContext {
                    HttpContext = new DefaultHttpContext()
                }
            };

            _dssReader.GetCustomerData(Arg.Any <string>()).ReturnsForAnyArgs(new Customer
            {
                Contact = new Contact
                {
                    EmailAddress = "test"
                }
            });

            _addressSearchService.GetAddresses(Arg.Any <string>()).ReturnsForAnyArgs(new List <PostalAddressModel>());

            var viewModel = GetViewModel();

            viewModel.Identity.PersonalDetails.HomePostCode = "lg23hg";
            viewModel.Items = null;

            var result = await controller.Body(viewModel, new FormCollection(new Dictionary <string, StringValues>
            {
                { "findAddress", "findAddress" }
            })) as ViewResult;

            result.Should().NotBeNull();
            ((EditDetailsCompositeViewModel)result.ViewData.Model).Identity.PersonalDetails
            .FindAddressServiceResult.Should().Be("We do not have any address matching this postcode. Please enter your address details in the boxes provided.");
        }
        public async Task WhenSelectAddressPostedAndAddressServiceIsDown_ThenReturnServiceDownMessage()
        {
            var controller = new EditYourDetailsController(_compositeSettings, _authService, _addressSearchService,
                                                           _dssReader, _dssWriter, _documentService, _config)
            {
                ControllerContext = new ControllerContext {
                    HttpContext = new DefaultHttpContext()
                }
            };

            _dssReader.GetCustomerData(Arg.Any <string>()).ReturnsForAnyArgs(new Customer
            {
                Contact = new Contact
                {
                    EmailAddress = "test"
                }
            });

            _addressSearchService.GetAddress(Arg.Any <string>()).ThrowsForAnyArgs(new System.Exception());

            var viewModel = GetViewModel();

            viewModel.Identity.PersonalDetails.HomePostCode = "lg23hg";

            var result = await controller.Body(viewModel, new FormCollection(new Dictionary <string, StringValues>
            {
                { "selectAddress", "selectAddress" },
                { "select-address", "{\"id\":\"test\"}" }
            })) as ViewResult;

            result.Should().NotBeNull();
            ((EditDetailsCompositeViewModel)result.ViewData.Model).Identity.PersonalDetails.FindAddressServiceResult.Should().NotBeNullOrEmpty();
        }
        public async Task WhenFindAddressPostedAndPostcodeIsNotValid_ThenAddressServiceNotCalledAndModelIsReturnedWithError()
        {
            var controller = new EditYourDetailsController(_compositeSettings, _authService, _addressSearchService,
                                                           _dssReader, _dssWriter, _documentService, _config)
            {
                ControllerContext = new ControllerContext {
                    HttpContext = new DefaultHttpContext()
                }
            };

            _dssReader.GetCustomerData(Arg.Any <string>()).ReturnsForAnyArgs(new Customer
            {
                Contact = new Contact
                {
                    EmailAddress = "test"
                }
            });

            var result = await controller.Body(GetViewModel(), new FormCollection(new Dictionary <string, StringValues>
            {
                { "findAddress", "findAddress" }
            })) as ViewResult;

            result.Should().NotBeNull();
            result.ViewData.ModelState.IsValid.Should().BeFalse();
        }
        public async Task WhenSaveDataPostedAndFormIsValid_ThenDateShouldBeSaved()
        {
            var customer = new Customer()
            {
                CustomerId = new Guid("c2e27821-cc60-4d3d-b4f0-cbe20867897c")
            };

            _authService.GetCustomer(Arg.Any <ClaimsPrincipal>()).Returns(customer);
            var controller = new EditYourDetailsController(_compositeSettings, _authService, _addressSearchService,
                                                           _dssReader, _dssWriter, _documentService, _config)
            {
                ControllerContext = new ControllerContext {
                    HttpContext = new DefaultHttpContext()
                }
            };

            _dssReader.GetCustomerData(Arg.Any <string>()).ReturnsForAnyArgs(new Customer
            {
                Contact = new Contact()
            });

            var result = await controller.Body(GetViewModel(), new FormCollection(new Dictionary <string, StringValues>
            {
                { "saveDetails", "saveDetails" }
            })) as ViewResult;

            _dssWriter.Received(3);
        }
        public void WhenGetFormGroupErrorClassCalledWithError_ReturnEmptyString()
        {
            var controller = new EditYourDetailsController(_compositeSettings, _authService, _addressSearchService,
                                                           _dssReader, _dssWriter, _documentService, _config)
            {
                ControllerContext = new ControllerContext {
                    HttpContext = new DefaultHttpContext()
                }
            };

            var viewModel = new EditDetailsCompositeViewModel();

            viewModel.GetFormGroupErrorClass("test", controller.ViewData.ModelState).Should().BeNullOrEmpty();
        }
        public async Task WhenBodyCalled_ThenDssCalled()
        {
            var customer = new Customer()
            {
                CustomerId = new Guid("c2e27821-cc60-4d3d-b4f0-cbe20867897c")
            };

            _authService.GetCustomer(Arg.Any <ClaimsPrincipal>()).Returns(customer);
            var controller = new EditYourDetailsController(_compositeSettings, _authService, _addressSearchService, _dssReader, _dssWriter, _documentService, _config);

            controller.ControllerContext = new ControllerContext
            {
                HttpContext = new DefaultHttpContext()
            };

            _dssReader.GetCustomerData(Arg.Any <string>()).ReturnsForAnyArgs(new Customer());

            await controller.Body();

            await _dssReader.Received().GetCustomerData(Arg.Any <string>());
        }
        public async Task WhenBodyCalled_ReturnHtml()
        {
            var customer = new Customer()
            {
                CustomerId = new Guid("c2e27821-cc60-4d3d-b4f0-cbe20867897c")
            };

            _authService.GetCustomer(Arg.Any <ClaimsPrincipal>()).Returns(customer);
            var controller = new EditYourDetailsController(_compositeSettings, _authService, _addressSearchService, _dssReader, _dssWriter, _documentService, _config);

            controller.ControllerContext = new ControllerContext
            {
                HttpContext = new DefaultHttpContext()
            };
            _dssReader.GetCustomerData(Arg.Any <string>()).ReturnsForAnyArgs(new Customer());

            var result = await controller.Body() as ViewResult;

            result.Should().NotBeNull();
            result.Should().BeOfType <ViewResult>();
            result.ViewName.Should().BeNull();
        }
        public async Task WhenSaveDataPostedAsSmsAndAllValuesAreEmpty_ThenDateShouldNotSaved()
        {
            var customer = new Customer()
            {
                CustomerId = new Guid("c2e27821-cc60-4d3d-b4f0-cbe20867897c")
            };

            _authService.GetCustomer(Arg.Any <ClaimsPrincipal>()).Returns(customer);
            var controller = new EditYourDetailsController(_compositeSettings, _authService, _addressSearchService,
                                                           _dssReader, _dssWriter, _documentService, _config)
            {
                ControllerContext = new ControllerContext {
                    HttpContext = new DefaultHttpContext()
                }
            };

            _dssReader.GetCustomerData(Arg.Any <string>()).ReturnsForAnyArgs(new Customer());

            var result = await controller.Body(new EditDetailsCompositeViewModel
            {
                Identity = new CitizenIdentity
                {
                    ContactDetails = new ContactDetails
                    {
                        ContactEmail      = "7777777",
                        ContactPreference = CommonEnums.Channel.Text
                    }
                }
            }, new FormCollection(new Dictionary <string, StringValues>
            {
                { "saveDetails", "saveDetails" }
            })) as ViewResult;

            _dssWriter.Received(0);

            result.Should().NotBeNull();
            result.Should().BeOfType <ViewResult>();
            result.ViewName.Should().BeNull();
        }
        public async Task WhenSelectAddressPosted_ThenAddressServiceCalled()
        {
            var controller = new EditYourDetailsController(_compositeSettings, _authService, _addressSearchService,
                                                           _dssReader, _dssWriter, _documentService, _config)
            {
                ControllerContext = new ControllerContext {
                    HttpContext = new DefaultHttpContext()
                }
            };

            _dssReader.GetCustomerData(Arg.Any <string>()).ReturnsForAnyArgs(new Customer
            {
                Contact = new Contact
                {
                    EmailAddress = "test"
                }
            });

            _addressSearchService.GetAddresses(Arg.Any <string>()).ReturnsForAnyArgs(new List <PostalAddressModel>
            {
                new PostalAddressModel
                {
                    Line1 = "test"
                }
            });

            var viewModel = GetViewModel();

            viewModel.Identity.PersonalDetails.HomePostCode = "lg23hg";

            var result = await controller.Body(viewModel, new FormCollection(new Dictionary <string, StringValues>
            {
                { "selectAddress", "selectAddress" },
                { "select-address", "{\"id\":\"test\"}" }
            })) as ViewResult;

            await _addressSearchService.Received().GetAddress(Arg.Any <string>());
        }
        public async Task WhenFindAddressPostedAndFormIsValid_ThenAddressServiceCalled()
        {
            var controller = new EditYourDetailsController(_compositeSettings, _authService, _addressSearchService,
                                                           _dssReader, _dssWriter, _documentService, _config)
            {
                ControllerContext = new ControllerContext {
                    HttpContext = new DefaultHttpContext()
                }
            };

            _dssReader.GetCustomerData(Arg.Any <string>()).ReturnsForAnyArgs(new Customer
            {
                Contact = new Contact
                {
                    EmailAddress = "test"
                }
            });

            _addressSearchService.GetAddresses(Arg.Any <string>()).ReturnsForAnyArgs(new List <PostalAddressModel>
            {
                new PostalAddressModel
                {
                    Line1 = "test"
                }
            });

            var viewModel = GetViewModel();

            viewModel.Identity.PersonalDetails.HomePostCode = "lg23hg";

            var result = await controller.Body(viewModel, new FormCollection(new Dictionary <string, StringValues>
            {
                { "findAddress", "findAddress" }
            })) as ViewResult;

            result.Should().NotBeNull();
            ((EditDetailsCompositeViewModel)result.ViewData.Model).Items.Any().Should().BeTrue();
        }