public async Task HomeControllerHomeViewPostRedirectsSuccessfully(HomeOption selectedOption, string expectedRedirectUrl) { // Arrange var fakeSessionStateModel = A.Fake <SessionStateModel <SessionDataModel> >(); var viewModel = new HomeBodyViewModel { SelectedOption = selectedOption, }; var controller = BuildHomeController(MediaTypeNames.Text.Html); if (selectedOption == HomeOption.SendAMessage || selectedOption == HomeOption.Callback) { A.CallTo(() => FakeSessionStateService.GetAsync(A <Guid> .Ignored)).Returns(fakeSessionStateModel); A.CallTo(() => FakeSessionStateService.SaveAsync(A <SessionStateModel <SessionDataModel> > .Ignored)).Returns(HttpStatusCode.OK); } // Act var result = await controller.HomeView(viewModel).ConfigureAwait(false); // Assert if (selectedOption == HomeOption.SendAMessage || selectedOption == HomeOption.Callback) { A.CallTo(() => FakeSessionStateService.GetAsync(A <Guid> .Ignored)).MustHaveHappenedOnceExactly(); A.CallTo(() => FakeSessionStateService.SaveAsync(A <SessionStateModel <SessionDataModel> > .Ignored)).MustHaveHappenedOnceExactly(); } var redirectResult = Assert.IsType <RedirectResult>(result); Assert.Equal(expectedRedirectUrl, redirectResult.Url); Assert.False(redirectResult.Permanent); controller.Dispose(); }
public async Task HomeControllerBodyPostReturnsSuccess(string mediaTypeName) { // Arrange string expectedRedirectUrl = $"/{HomeController.RegistrationPath}/{HowCanWeHelpController.ThisViewCanonicalName}"; var fakeSessionStateModel = A.Fake <SessionStateModel <SessionDataModel> >(); var viewModel = new HomeBodyViewModel { SelectedOption = HomeOption.Callback, }; var controller = BuildHomeController(mediaTypeName); A.CallTo(() => FakeSessionStateService.GetAsync(A <Guid> .Ignored)).Returns(fakeSessionStateModel); A.CallTo(() => FakeSessionStateService.SaveAsync(A <SessionStateModel <SessionDataModel> > .Ignored)).Returns(HttpStatusCode.OK); // Act var result = await controller.HomeBody(viewModel).ConfigureAwait(false); // Assert A.CallTo(() => FakeSessionStateService.GetAsync(A <Guid> .Ignored)).MustHaveHappenedOnceExactly(); A.CallTo(() => FakeSessionStateService.SaveAsync(A <SessionStateModel <SessionDataModel> > .Ignored)).MustHaveHappenedOnceExactly(); var redirectResult = Assert.IsType <RedirectResult>(result); Assert.Equal(expectedRedirectUrl, redirectResult.Url); Assert.False(redirectResult.Permanent); controller.Dispose(); }
public async Task SessionStateSetWithValidSessionIdHeaderReturnsSuccessForCallback(HttpStatusCode saveStatusCode) { // Arrange var expectedRedirectUrl = $"/{HomeController.RegistrationPath}/{HowCanWeHelpController.ThisViewCanonicalName}"; var fakeSessionStateModel = A.Fake <SessionStateModel <SessionDataModel> >(); var viewModel = new HomeBodyViewModel { SelectedOption = HomeOption.Callback, }; var controller = BuildHomeController(MediaTypeNames.Text.Html); controller.Request.Headers.Add(ConstantStrings.CompositeSessionIdHeaderName, Guid.NewGuid().ToString()); A.CallTo(() => fakeSessionStateService.GetAsync(A <Guid> .Ignored)).Returns(fakeSessionStateModel); A.CallTo(() => fakeSessionStateService.SaveAsync(A <SessionStateModel <SessionDataModel> > .Ignored)).Returns(saveStatusCode); // Act var result = await controller.HomeBody(viewModel).ConfigureAwait(false); // Assert A.CallTo(() => fakeSessionStateService.GetAsync(A <Guid> .Ignored)).MustHaveHappenedOnceExactly(); A.CallTo(() => fakeSessionStateService.SaveAsync(A <SessionStateModel <SessionDataModel> > .Ignored)).MustHaveHappenedOnceExactly(); var redirectResult = Assert.IsType <RedirectResult>(result); Assert.Equal(expectedRedirectUrl, redirectResult.Url); Assert.False(redirectResult.Permanent); controller.Dispose(); }
public void HomeBodyViewModelValidationReturnsSuccessForValidModel() { // Arrange var viewModel = new HomeBodyViewModel { SelectedOption = HomeOption.Callback, }; // Act var(isValid, validationResults) = ModelValidator.TryValidateModel(viewModel); // Assert Assert.True(isValid); Assert.True(validationResults.Count == 0); }
public async Task <IActionResult> HomeBody() { await DeleteSessionStateAsync().ConfigureAwait(false); var configurationSetModel = await configurationSetDocumentService.GetByIdAsync(ConfigurationSetKeyHelper.ConfigurationSetKey).ConfigureAwait(false) ?? new ConfigurationSetModel(); var viewModel = new HomeBodyViewModel() { PhoneNumber = configurationSetModel?.PhoneNumber ?? ConfigurationSetModel.DefaultPhoneNumber, LinesOpenText = configurationSetModel?.LinesOpenText, }; Logger.LogInformation($"{nameof(HomeBody)} has returned content"); return(this.NegotiateContentResult(viewModel)); }
public void HomeBodyViewModelValidationReturnsErrorForOptionInvalid() { // Arrange var viewModel = new HomeBodyViewModel { SelectedOption = HomeOption.None, }; // Act var(isValid, validationResults) = ModelValidator.TryValidateModel(viewModel); // Assert Assert.False(isValid); Assert.True(validationResults.Count > 0); Assert.NotNull(validationResults.First(f => f.MemberNames.Any(a => a == nameof(HomeBodyViewModel.SelectedOption)))); Assert.Equal(HomeBodyViewModel.SelectedOptionValidationError, validationResults.First(f => f.MemberNames.Any(a => a == nameof(HomeBodyViewModel.SelectedOption))).ErrorMessage); }
public async Task HomeControllerHomeViewPostReturnsSameViewForInvalidModel(HomeOption selectedOption) { // Arrange var viewModel = new HomeBodyViewModel { SelectedOption = selectedOption, }; var controller = BuildHomeController(MediaTypeNames.Text.Html); // Act var result = await controller.HomeView(viewModel).ConfigureAwait(false); // Assert var viewResult = Assert.IsType <ViewResult>(result); _ = Assert.IsAssignableFrom <HomeViewModel>(viewResult.ViewData.Model); controller.Dispose(); }
public async Task HomeControllerBodyPostReturnsNotAcceptable(string mediaTypeName) { // Arrange var viewModel = new HomeBodyViewModel { SelectedOption = HomeOption.None, }; var controller = BuildHomeController(mediaTypeName); // Act var result = await controller.HomeBody(viewModel).ConfigureAwait(false); // Assert var statusResult = Assert.IsType <StatusCodeResult>(result); A.Equals((int)HttpStatusCode.NotAcceptable, statusResult.StatusCode); controller.Dispose(); }
public async Task <IActionResult> HomeBody(HomeBodyViewModel?viewModel) { if (viewModel != null && ModelState.IsValid) { switch (viewModel.SelectedOption) { case HomeOption.Webchat: return(Redirect($"/{WebchatRegistrationPath}/{ChatController.ThisViewCanonicalName}")); case HomeOption.SendAMessage: if (await SetSessionStateAsync(Category.None, null, false).ConfigureAwait(false)) { return(Redirect($"/{RegistrationPath}/{HowCanWeHelpController.ThisViewCanonicalName}")); } break; case HomeOption.Callback: if (await SetSessionStateAsync(Category.None, null, true).ConfigureAwait(false)) { return(Redirect($"/{RegistrationPath}/{HowCanWeHelpController.ThisViewCanonicalName}")); } break; case HomeOption.Sendletter: return(Redirect($"/{RegistrationPath}/{SendUsLetterCanonicalName}")); } } var configurationSetModel = await configurationSetDocumentService.GetByIdAsync(ConfigurationSetKeyHelper.ConfigurationSetKey).ConfigureAwait(false) ?? new ConfigurationSetModel(); viewModel = new HomeBodyViewModel() { PhoneNumber = configurationSetModel?.PhoneNumber ?? ConfigurationSetModel.DefaultPhoneNumber, LinesOpenText = configurationSetModel?.LinesOpenText, }; Logger.LogInformation($"{nameof(HomeBody)} has returned content"); return(this.NegotiateContentResult(viewModel)); }
public async Task HomeControllerHomeViewPostReturnsSuccess(string mediaTypeName) { // Arrange string expectedRedirectUrl = $"/{LocalPath}/{ChatController.ThisViewCanonicalName}"; var viewModel = new HomeBodyViewModel { SelectedOption = HomeOption.Webchat, }; var controller = BuildHomeController(mediaTypeName); // Act var result = await controller.HomeView(viewModel).ConfigureAwait(false); // Assert var redirectResult = Assert.IsType <RedirectResult>(result); Assert.Equal(expectedRedirectUrl, redirectResult.Url); Assert.False(redirectResult.Permanent); controller.Dispose(); }
public async Task SessionStateSetWithMissingSessionIdHeaderReturnsSuccessForCallback() { // Arrange var viewModel = new HomeBodyViewModel { SelectedOption = HomeOption.Callback, }; var controller = BuildHomeController(MediaTypeNames.Text.Html); // Act var result = await controller.HomeBody(viewModel).ConfigureAwait(false); // Assert A.CallTo(() => fakeSessionStateService.GetAsync(A <Guid> .Ignored)).MustNotHaveHappened(); A.CallTo(() => fakeSessionStateService.SaveAsync(A <SessionStateModel <SessionDataModel> > .Ignored)).MustNotHaveHappened(); var viewResult = Assert.IsType <ViewResult>(result); _ = Assert.IsAssignableFrom <HomeBodyViewModel>(viewResult.ViewData.Model); controller.Dispose(); }