public async Task ShowsTheOutdatedViewIfTheVersionOfTheCurrentlyUsedApiIsOutdated() { AccessRestrictionStorage.IsApiOutdated().Returns(true); await Task.Run(() => AppStart.Start()); await NavigationService.Received().Navigate <OutdatedAppViewModel>(); UserAccessManager.DidNotReceive().GetDataSourceIfLoggedIn(); }
public async Task ShowsTheReLoginViewIfTheUserRevokedTheApiToken() { AccessRestrictionStorage.IsUnauthorized(Arg.Any <string>()).Returns(true); await Task.Run(() => AppStart.Start()); await SyncManager.DidNotReceive().ForceFullSync(); await NavigationService.Received().Navigate <TokenResetViewModel>(); }
public async Task DoesNothingWhenNoWorkspacesAreFetched() { DataSource.Workspaces.GetAll().Returns(Observable.Return(new List <IThreadSafeWorkspace>())); ViewModel.TryAgain.Execute(); TestScheduler.Start(); View.DidNotReceive().Close(); AccessRestrictionStorage.DidNotReceive().SetNoWorkspaceStateReached(Arg.Any <bool>()); }
public async Task DoesNothingWhenNoWorkspacesAreFetched() { DataSource.Workspaces.GetAll().Returns(Observable.Return(new List <IThreadSafeWorkspace>())); await ViewModel.TryAgain(); await NavigationService.DidNotReceive().Close(Arg.Is(ViewModel)); AccessRestrictionStorage.DidNotReceive().SetNoWorkspaceStateReached(Arg.Any <bool>()); }
public async Task ShowsTheOutdatedViewIfTheCurrentVersionOfTheAppIsOutdated() { AccessRestrictionStorage.IsClientOutdated().Returns(true); AppStart.Start(); await NavigationService.Received().Navigate <OutdatedAppViewModel>(); UserAccessManager.DidNotReceive().TryInitializingAccessToUserData(out _, out _); }
public async Task ShowsTheOutdatedViewIfTheCurrentVersionOfTheAppIsOutdated() { AccessRestrictionStorage.IsClientOutdated().Returns(true); AppStart.Start(); await NavigationService.Received().Navigate <OutdatedAppViewModel>(); UserAccessManager.DidNotReceive().CheckIfLoggedIn(); }
public async Task ShowsTheOutdatedViewIfTheTokenWasRevokedAndTheAppIsOutdated() { AccessRestrictionStorage.IsUnauthorized(Arg.Any <string>()).Returns(true); AccessRestrictionStorage.IsClientOutdated().Returns(true); AppStart.Start(); await NavigationService.Received().Navigate <OutdatedAppViewModel>(); UserAccessManager.DidNotReceive().CheckIfLoggedIn(); }
public async ThreadingTask DoesNotNavigateToSelectDefaultWorkspaceViewModelWhenTheresNoWorkspaceAvaialable() { AccessRestrictionStorage.HasNoWorkspace().Returns(true); AccessRestrictionStorage.HasNoDefaultWorkspace().Returns(true); await ViewModel.ViewAppearingAsync(); await NavigationService.Received().Navigate <NoWorkspaceViewModel, Unit>(View); await NavigationService.DidNotReceive().Navigate <SelectDefaultWorkspaceViewModel, Unit>(View); }
internal void ReturnsTrueButDoesNotNavigateOrSetUnathorizedAccessFlagWhenTheApiTokenCannotBeExtractedFromTheRequest() { var request = Substitute.For <IRequest>(); request.Headers.Returns(new HttpHeader[0]); var exceptionWithoutApiToken = new UnauthorizedException(request, Substitute.For <IResponse>()); var handled = ErrorHandlingService.TryHandleUnauthorizedError(exceptionWithoutApiToken); handled.Should().BeTrue(); NavigationService.DidNotReceive().Navigate <TokenResetViewModel>(); AccessRestrictionStorage.DidNotReceive().SetUnauthorizedAccess(Arg.Any <string>()); }
public async Task ResetsNoWorkspaceStateWhenAnotherWorkspaceIsFetched() { var workspace = Substitute.For <IThreadSafeWorkspace>(); DataSource.Workspaces.GetAll().Returns(Observable.Return(new List <IThreadSafeWorkspace>() { workspace })); await ViewModel.TryAgain(); AccessRestrictionStorage.Received().SetNoWorkspaceStateReached(Arg.Is(false)); }
public async Task ResetsNoWorkspaceStateWhenAfterNewWorkspaceIsCreated() { var workspace = Substitute.For <IThreadSafeWorkspace>(); InteractorFactory.CreateDefaultWorkspace().Execute().Returns(Observable.Return(Unit.Default)); DataSource.Workspaces.GetAll().Returns(Observable.Return(new List <IThreadSafeWorkspace> { workspace })); await ViewModel.CreateWorkspaceWithDefaultName(); AccessRestrictionStorage.Received().SetNoWorkspaceStateReached(Arg.Is(false)); }
public async Task ShowsTheOutdatedViewIfTheTokenWasRevokedAndTheApiIsOutdated() { AccessRestrictionStorage.IsUnauthorized(Arg.Any <string>()).Returns(true); AccessRestrictionStorage.IsApiOutdated().Returns(true); AppStart.Start(); await NavigationService.Received().Navigate <OutdatedAppViewModel>(); await NavigationService.DidNotReceive().Navigate <TokenResetViewModel>(); UserAccessManager.DidNotReceive().TryInitializingAccessToUserData(out _, out _); }
public async Task ShowsTheOutdatedViewIfTheTokenWasRevokedAndTheAppIsOutdated() { AccessRestrictionStorage.IsUnauthorized(Arg.Any <string>()).Returns(true); AccessRestrictionStorage.IsClientOutdated().Returns(true); await Task.Run(() => AppStart.Start()); await NavigationService.Received().Navigate <OnboardingViewModel>(); await NavigationService.Received().Navigate <OutdatedAppViewModel>(); LoginManager.DidNotReceive().GetDataSourceIfLoggedIn(); }
public async ThreadingTask DoesNotNavigateToNoWorkspaceViewSeveralTimes() { AccessRestrictionStorage.HasNoWorkspace().Returns(true); var task = new TaskCompletionSource <Unit>().Task; NavigationService.Navigate <NoWorkspaceViewModel, Unit>().Returns(task); ViewModel.ViewAppearing(); ViewModel.ViewAppearing(); ViewModel.ViewAppearing(); ViewModel.ViewAppearing(); await NavigationService.Received(1).Navigate <NoWorkspaceViewModel, Unit>(); }
public async Task ResetsNoWorkspaceStateWhenAnotherWorkspaceIsFetched() { var workspace = Substitute.For <IThreadSafeWorkspace>(); InteractorFactory.GetAllWorkspaces().Execute().Returns(Observable.Return(new List <IThreadSafeWorkspace>() { workspace })); ViewModel.TryAgain.Execute(); TestScheduler.Start(); AccessRestrictionStorage.Received().SetNoWorkspaceStateReached(Arg.Is(false)); }
public async Task DoesNotShowTheUnauthorizedAccessViewIfUsersApiTokenChanged() { var oldApiToken = Guid.NewGuid().ToString(); var newApiToken = Guid.NewGuid().ToString(); var user = Substitute.For <IThreadSafeUser>(); var interactorFactory = Substitute.For <IInteractorFactory>(); user.ApiToken.Returns(newApiToken); interactorFactory.GetCurrentUser().Execute().Returns(Observable.Return(user)); AccessRestrictionStorage.IsUnauthorized(Arg.Is(oldApiToken)).Returns(true); AccessRestrictionStorage.IsApiOutdated().Returns(false); AccessRestrictionStorage.IsClientOutdated().Returns(false); AppStart.Start(); await NavigationService.Received().Navigate <MainTabBarViewModel>(); }
public async ThreadingTask DoesNotNavigateToSelectDefaultWorkspaceViewSeveralTimes() { AccessRestrictionStorage.HasNoWorkspace().Returns(false); AccessRestrictionStorage.HasNoDefaultWorkspace().Returns(true); var task = new TaskCompletionSource <Unit>().Task; NavigationService.Navigate <SelectDefaultWorkspaceViewModel, Unit>().Returns(task); ViewModel.ViewAppearing(); ViewModel.ViewAppearing(); ViewModel.ViewAppearing(); ViewModel.ViewAppearing(); //ViewAppearing calls an async method. The delay is here to ensure that the async method completes before the assertion await ThreadingTask.Delay(200); await NavigationService.Received(1).Navigate <SelectDefaultWorkspaceViewModel, Unit>(); }
public void ReturnsLoggedInWhenUsersApiTokenChanged() { var oldApiToken = Guid.NewGuid().ToString(); var newApiToken = Guid.NewGuid().ToString(); var user = Substitute.For <IThreadSafeUser>(); var interactorFactory = Substitute.For <IInteractorFactory>(); user.ApiToken.Returns(newApiToken); interactorFactory.GetCurrentUser().Execute().Returns(Observable.Return(user)); AccessRestrictionStorage.IsUnauthorized(Arg.Is(oldApiToken)).Returns(true); AccessRestrictionStorage.IsApiOutdated().Returns(false); AccessRestrictionStorage.IsClientOutdated().Returns(false); var accessLevel = App.GetAccessLevel(); accessLevel.Should().Be(AccessLevel.LoggedIn); }
public async Task DoesNotShowTheUnauthorizedAccessViewIfUsersApiTokenChanged() { var oldApiToken = Guid.NewGuid().ToString(); var newApiToken = Guid.NewGuid().ToString(); var user = Substitute.For <IThreadSafeUser>(); var dataSource = Substitute.For <ITogglDataSource>(); var userSource = Substitute.For <IUserSource>(); user.ApiToken.Returns(newApiToken); userSource.Current.Returns(Observable.Return(user)); dataSource.User.Returns(userSource); LoginManager.GetDataSourceIfLoggedIn().Returns(dataSource); AccessRestrictionStorage.IsUnauthorized(Arg.Is(oldApiToken)).Returns(true); AccessRestrictionStorage.IsApiOutdated().Returns(false); AccessRestrictionStorage.IsClientOutdated().Returns(false); await Task.Run(() => AppStart.Start()); await NavigationService.Received().Navigate <MainTabBarViewModel>(); }
public void DoesNotRestrictAccessForDifferentExceptions() { ErrorHandlingService.TryHandleUnauthorizedError(exception); AccessRestrictionStorage.DidNotReceive().SetUnauthorizedAccess(Arg.Any <string>()); }
public void RestrictsAccessForNoWorkspaceException() { ErrorHandlingService.TryHandleNoDefaultWorkspaceError(new NoDefaultWorkspaceException()); AccessRestrictionStorage.Received().SetNoDefaultWorkspaceStateReached(true); }
public void RestricsAccessForClientDeprecatedException() { ErrorHandlingService.TryHandleUnauthorizedError(exception); AccessRestrictionStorage.Received().SetUnauthorizedAccess(Arg.Is(User.ApiToken)); }
public void RestricsAccessForClientDeprecatedException() { ErrorHandlingService.TryHandleDeprecationError(exception); AccessRestrictionStorage.Received().SetClientOutdated(); }