public void IndexGetTest(bool validSessionVm, ContactOption?contactOption, bool expectToBeRedirected)
        {
            var controller = new ContactAdviserController(fakeApplicationLogger, fakeMapper, fakeWebAppcontext, fakeSessionStorage)
            {
                Title = nameof(ContactAdviserController.Title),
                PersonalInformation = nameof(ContactAdviserController.PersonalInformation),
                NextPage            = nameof(ContactAdviserController.NextPage)
            };

            //Setup fakes
            if (!validSessionVm)
            {
                A.CallTo(() => fakeSessionStorage.Get()).Returns(null);
            }
            else
            {
                if (contactOption is null)
                {
                    A.CallTo(() => fakeSessionStorage.Get()).Returns(new ContactUs()
                    {
                        ContactUsOption = new ContactUsOption()
                    });
                }
                else
                {
                    A.CallTo(() => fakeSessionStorage.Get()).Returns(new ContactUs()
                    {
                        ContactUsOption = new ContactUsOption()
                        {
                            ContactOptionType = (ContactOption)contactOption
                        }
                    });
                }
            }

            //Act
            var controllerResult = controller.WithCallTo(contrl => contrl.Index());

            //Assert
            if (expectToBeRedirected)
            {
                controllerResult.ShouldRedirectTo(controller.ContactOptionPage);
            }
            else
            {
                controllerResult.ShouldRenderDefaultView()
                .WithModel <ContactAdviserViewModel>(vm =>
                {
                    vm.Title.Should().BeEquivalentTo(controller.Title);
                    vm.Hint.Should().BeEquivalentTo(controller.PersonalInformation);
                });
            }

            A.CallTo(() => fakeSessionStorage.Get()).MustHaveHappened(1, Times.Exactly);
        }
        public void IndexSetDefaultsTest(bool validSessionVm, string title, string personalInformation, string nextPageUrl, string contactOptionPageUrl, string characterLimit)
        {
            //Assign
            var controller = new ContactAdviserController(fakeApplicationLogger, fakeMapper, fakeWebAppcontext, fakeSessionStorage)
            {
                Title = title,
                PersonalInformation = personalInformation,
                NextPage            = nextPageUrl,
                ContactOptionPage   = contactOptionPageUrl,
                CharacterLimit      = characterLimit
            };

            if (!validSessionVm)
            {
                A.CallTo(() => fakeSessionStorage.Get()).Returns(null);
            }
            else
            {
                A.CallTo(() => fakeSessionStorage.Get()).Returns(new ContactUs {
                    ContactUsOption = new ContactUsOption()
                    {
                        ContactOptionType = ContactOption.ContactAdviser
                    }
                });
            }

            //Act
            var controllerResult = controller.WithCallTo(contrl => contrl.Index());

            //Assert
            if (validSessionVm)
            {
                controllerResult.ShouldRenderDefaultView().WithModel <ContactAdviserViewModel>(
                    vm =>
                {
                    vm.Title.Should().BeEquivalentTo(controller.Title);
                    vm.NextPage.Should().BeEquivalentTo(controller.NextPage);
                    vm.Hint.Should().BeEquivalentTo(controller.PersonalInformation);
                });
            }
            else
            {
                controllerResult.ShouldRedirectTo(controller.ContactOptionPage);
            }
        }
        public void SubmitTests(bool modelStateValid)
        {
            //Assign
            var postModel = new ContactAdviserViewModel();

            A.CallTo(() => fakeSessionStorage.Get()).Returns(new ContactUs());

            var controller = new ContactAdviserController(fakeApplicationLogger, fakeMapper, fakeWebAppcontext, fakeSessionStorage)
            {
                Title = nameof(ContactAdviserController.Title)
            };

            if (!modelStateValid)
            {
                controller.ModelState.AddModelError(nameof(ContactAdviserViewModel.ContactAdviserQuestionType), nameof(ContactAdviserViewModel.Message));
            }
            else
            {
                A.CallTo(() => fakeSessionStorage.Save(A <ContactUs> ._)).DoesNothing();
            }

            //Act
            var controllerResult = controller.WithCallTo(contrl => contrl.Index(postModel));

            //Assert
            if (modelStateValid)
            {
                controllerResult.ShouldRedirectTo(controller.NextPage);
            }
            else
            {
                controllerResult.ShouldRenderDefaultView()
                .WithModel <ContactAdviserViewModel>()
                .AndModelError(nameof(ContactAdviserViewModel.ContactAdviserQuestionType));
            }
        }