From 0c0b5b2f84c9a440b95827181aa38a912c38ce99 Mon Sep 17 00:00:00 2001 From: Mahmoud Ali Date: Thu, 26 Sep 2019 13:49:14 -0300 Subject: [PATCH] Provide tests for ConfirmNavigation exception scenarios --- .../PageNavigationServiceFixture.cs | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/Source/Xamarin/Prism.Forms.Tests/Navigation/PageNavigationServiceFixture.cs b/Source/Xamarin/Prism.Forms.Tests/Navigation/PageNavigationServiceFixture.cs index 4724d8a6c..9add26d94 100644 --- a/Source/Xamarin/Prism.Forms.Tests/Navigation/PageNavigationServiceFixture.cs +++ b/Source/Xamarin/Prism.Forms.Tests/Navigation/PageNavigationServiceFixture.cs @@ -411,6 +411,69 @@ public async void Navigate_ToContentPage_ViewModelHasIConfirmNavigation_False() Assert.True(viewModel.OnConfirmNavigationCalled); Assert.True(rootPage.Navigation.ModalStack.Count == 0); } + + [Fact] + public async void GoBack_ViewModelWithIConfirmNavigationFalse_ResultException() + { + var navigationService = new PageNavigationServiceMock(_container, _applicationProvider, _loggerFacade); + var rootPage = new ContentPage() {BindingContext = new ContentPageMockViewModel()}; + ((IPageAware) navigationService).Page = rootPage; + + var viewModel = rootPage.BindingContext as ContentPageMockViewModel; + + var navParams = new NavigationParameters(); + navParams.Add("canNavigate", false); + + var navigationResult = await navigationService.GoBackAsync(navParams); + + Assert.True(viewModel.OnConfirmNavigationCalled); + Assert.NotNull(navigationResult.Exception); + Assert.IsType(navigationResult.Exception); + Assert.False(navigationResult.Success); + Assert.Equal(NavigationException.IConfirmNavigationReturnedFalse, navigationResult.Exception.Message); + } + + [Fact] + public async void GoBackToRoot_ViewModelWithIConfirmNavigationFalse_ResultException() + { + var navigationService = new PageNavigationServiceMock(_container, _applicationProvider, _loggerFacade); + var rootPage = new ContentPage() {BindingContext = new ContentPageMockViewModel()}; + ((IPageAware) navigationService).Page = rootPage; + + var viewModel = rootPage.BindingContext as ContentPageMockViewModel; + + var navParams = new NavigationParameters(); + navParams.Add("canNavigate", false); + + var navigationResult = await navigationService.GoBackToRootAsync(navParams); + + Assert.True(viewModel.OnConfirmNavigationCalled); + Assert.NotNull(navigationResult.Exception); + Assert.IsType(navigationResult.Exception); + Assert.False(navigationResult.Success); + Assert.Equal(NavigationException.IConfirmNavigationReturnedFalse, navigationResult.Exception.Message); + } + + [Fact] + public async void NavigateAsync_ViewModelWithIConfirmNavigationFalse_ResultException() + { + var navigationService = new PageNavigationServiceMock(_container, _applicationProvider, _loggerFacade); + var rootPage = new ContentPage() {BindingContext = new ContentPageMockViewModel()}; + ((IPageAware) navigationService).Page = rootPage; + + var viewModel = rootPage.BindingContext as ContentPageMockViewModel; + + var navParams = new NavigationParameters(); + navParams.Add("canNavigate", false); + + var navigationResult = await navigationService.NavigateAsync("ContentPage", navParams); + + Assert.True(viewModel.OnConfirmNavigationCalled); + Assert.NotNull(navigationResult.Exception); + Assert.IsType(navigationResult.Exception); + Assert.False(navigationResult.Success); + Assert.Equal(NavigationException.IConfirmNavigationReturnedFalse, navigationResult.Exception.Message); + } [Fact] public async void Navigate_ToNavigatonPage_ViewModelHasINavigationAware()