예제 #1
0
            public async Task ShowsTheOutdatedViewIfTheVersionOfTheCurrentlyUsedApiIsOutdated()
            {
                AccessRestrictionStorage.IsApiOutdated().Returns(true);

                await Task.Run(() => AppStart.Start());

                await NavigationService.Received().Navigate <OutdatedAppViewModel>();

                UserAccessManager.DidNotReceive().GetDataSourceIfLoggedIn();
            }
예제 #2
0
            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>());
            }
예제 #4
0
            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>());
            }
예제 #5
0
            public async Task ShowsTheOutdatedViewIfTheCurrentVersionOfTheAppIsOutdated()
            {
                AccessRestrictionStorage.IsClientOutdated().Returns(true);

                AppStart.Start();

                await NavigationService.Received().Navigate <OutdatedAppViewModel>();

                UserAccessManager.DidNotReceive().TryInitializingAccessToUserData(out _, out _);
            }
예제 #6
0
            public async Task ShowsTheOutdatedViewIfTheCurrentVersionOfTheAppIsOutdated()
            {
                AccessRestrictionStorage.IsClientOutdated().Returns(true);

                AppStart.Start();

                await NavigationService.Received().Navigate <OutdatedAppViewModel>();

                UserAccessManager.DidNotReceive().CheckIfLoggedIn();
            }
예제 #7
0
            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();
            }
예제 #8
0
            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);
            }
예제 #9
0
            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>());
            }
예제 #10
0
            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));
            }
예제 #11
0
            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));
            }
예제 #12
0
            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 _);
            }
예제 #13
0
            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();
            }
예제 #14
0
            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));
            }
예제 #16
0
            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>();
            }
예제 #17
0
            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>();
            }
예제 #18
0
            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);
            }
예제 #19
0
            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>();
            }
예제 #20
0
            public void DoesNotRestrictAccessForDifferentExceptions()
            {
                ErrorHandlingService.TryHandleUnauthorizedError(exception);

                AccessRestrictionStorage.DidNotReceive().SetUnauthorizedAccess(Arg.Any <string>());
            }
예제 #21
0
            public void RestrictsAccessForNoWorkspaceException()
            {
                ErrorHandlingService.TryHandleNoDefaultWorkspaceError(new NoDefaultWorkspaceException());

                AccessRestrictionStorage.Received().SetNoDefaultWorkspaceStateReached(true);
            }
예제 #22
0
            public void RestricsAccessForClientDeprecatedException()
            {
                ErrorHandlingService.TryHandleUnauthorizedError(exception);

                AccessRestrictionStorage.Received().SetUnauthorizedAccess(Arg.Is(User.ApiToken));
            }
예제 #23
0
            public void RestricsAccessForClientDeprecatedException()
            {
                ErrorHandlingService.TryHandleDeprecationError(exception);

                AccessRestrictionStorage.Received().SetClientOutdated();
            }