예제 #1
0
            public void DoesNotDisplayAnErrormessageWhenTheUserCancelsTheRequestOnTheGoogleService()
            {
                var observer = SchedulerProvider.TestScheduler.CreateObserver <string>();

                ViewModel.ErrorMessage.Subscribe(observer);
                View.GetGoogleToken().Returns(Observable.Return(""));
                UserAccessManager.LoginWithGoogle(Arg.Any <string>())
                .Returns(Observable.Throw <Unit>(new GoogleLoginException(true)));

                ViewModel.GoogleLogin();

                SchedulerProvider.TestScheduler.Start();
                observer.Messages.AssertEqual(
                    ReactiveTest.OnNext(1, "")
                    );
            }
                public void SetsGeneralErrorForAnyOtherException()
                {
                    ViewModel.Email.OnNext(ValidEmail);
                    UserAccessManager
                    .ResetPassword(Arg.Any <Email>())
                    .Returns(Observable.Throw <string>(new Exception()));

                    var observer = TestScheduler.CreateObserver <string>();

                    ViewModel.ErrorMessage.Subscribe(observer);

                    ViewModel.Reset.Execute();
                    TestScheduler.Start();

                    observer.LastEmittedValue().Should().Be(Resources.PasswordResetGeneralError);
                }
                public void SetsPasswordResetSuccessfulToTrue()
                {
                    ViewModel.Email.OnNext(ValidEmail);
                    UserAccessManager
                    .ResetPassword(Arg.Any <Email>())
                    .Returns(Observable.Return("Great success"));

                    var observer = TestScheduler.CreateObserver <bool>();

                    ViewModel.PasswordResetSuccessful.Subscribe(observer);

                    ViewModel.Reset.Execute();
                    TestScheduler.Start();

                    observer.LastEmittedValue().Should().BeTrue();
                }
예제 #4
0
                public void SetsTheErrorMessageToNothingWhenGoogleLoginWasCanceled()
                {
                    var observer  = TestScheduler.CreateObserver <string>();
                    var exception = new GoogleLoginException(true);

                    ViewModel.ErrorMessage.Subscribe(observer);
                    UserAccessManager.Login(Arg.Any <Email>(), Arg.Any <Password>())
                    .Returns(Observable.Throw <Unit>(exception));

                    ViewModel.Login();

                    TestScheduler.Start();
                    observer.Messages.AssertEqual(
                        ReactiveTest.OnNext(1, "")
                        );
                }
예제 #5
0
                public void SetsTheErrorMessageToGenericLoginErrorForAnyOtherException()
                {
                    var observer  = TestScheduler.CreateObserver <string>();
                    var exception = new Exception();

                    ViewModel.ErrorMessage.Subscribe(observer);
                    UserAccessManager.Login(Arg.Any <Email>(), Arg.Any <Password>())
                    .Returns(Observable.Throw <Unit>(exception));

                    ViewModel.Login();

                    TestScheduler.Start();
                    observer.Messages.AssertEqual(
                        ReactiveTest.OnNext(1, ""),
                        ReactiveTest.OnNext(2, Resources.GenericLoginError)
                        );
                }
예제 #6
0
            public void StopsTheViewModelLoadStateWhenItErrors()
            {
                var observer = TestScheduler.CreateObserver <bool>();

                ViewModel.IsLoading.Subscribe(observer);
                UserAccessManager.LoginWithGoogle()
                .Returns(Observable.Throw <Unit>(new GoogleLoginException(false)));

                ViewModel.GoogleLogin();

                TestScheduler.Start();
                observer.Messages.AssertEqual(
                    ReactiveTest.OnNext(1, false),
                    ReactiveTest.OnNext(2, true),
                    ReactiveTest.OnNext(3, false)
                    );
            }
예제 #7
0
                public void SetsIsLoadingToFalse()
                {
                    var observer = TestScheduler.CreateObserver <bool>();

                    ViewModel.IsLoading.Subscribe(observer);
                    UserAccessManager.Login(Arg.Any <Email>(), Arg.Any <Password>())
                    .Returns(Observable.Throw <Unit>(new Exception()));

                    ViewModel.Login();

                    TestScheduler.Start();
                    observer.Messages.AssertEqual(
                        ReactiveTest.OnNext(1, false),
                        ReactiveTest.OnNext(2, true),
                        ReactiveTest.OnNext(3, false)
                        );
                }
예제 #8
0
                public void SetsTheIsLoadingPropertyToTrue()
                {
                    var observer = TestScheduler.CreateObserver <bool>();

                    ViewModel.IsLoading.Subscribe(observer);

                    UserAccessManager.SignUpWithGoogle(true, Arg.Any <int>(), Arg.Any <string>()).Returns(
                        Observable.Never <ITogglDataSource>());

                    ViewModel.GoogleSignup.Execute();

                    TestScheduler.Start();
                    observer.Messages.AssertEqual(
                        ReactiveTest.OnNext(1, false),
                        ReactiveTest.OnNext(2, true)
                        );
                }
예제 #9
0
                public void StopsTheViewModelLoadStateWhenItErrors()
                {
                    var observer = TestScheduler.CreateObserver <bool>();

                    ViewModel.IsLoading.Subscribe(observer);

                    UserAccessManager.SignUpWithGoogle(Arg.Any <bool>(), Arg.Any <int>(), Arg.Any <string>()).Returns(
                        Observable.Throw <ITogglDataSource>(new GoogleLoginException(false)));

                    ViewModel.GoogleSignup.Execute();

                    TestScheduler.Start();
                    observer.Messages.AssertEqual(
                        ReactiveTest.OnNext(1, false),
                        ReactiveTest.OnNext(2, true),
                        ReactiveTest.OnNext(3, false)
                        );
                }
예제 #10
0
                public void DoesNothingWhenErrorHandlingServiceHandlesTheException()
                {
                    var observer  = TestScheduler.CreateObserver <string>();
                    var exception = new Exception();

                    ViewModel.ErrorMessage.Subscribe(observer);
                    UserAccessManager.Login(Arg.Any <Email>(), Arg.Any <Password>())
                    .Returns(Observable.Throw <Unit>(exception));
                    ErrorHandlingService.TryHandleDeprecationError(Arg.Any <Exception>())
                    .Returns(true);

                    ViewModel.Login();

                    TestScheduler.Start();
                    observer.Messages.AssertEqual(
                        ReactiveTest.OnNext(1, "")
                        );
                }
예제 #11
0
            public async Task ReturnsFalseWhenIsLoading(string email, string password)
            {
                var observer = TestScheduler.CreateObserver <bool>();

                ViewModel.LoginEnabled.Subscribe(observer);

                ViewModel.SetEmail(Email.From(email));
                ViewModel.SetPassword(Password.From(password));
                //Make sure isloading is true
                UserAccessManager
                .Login(Arg.Any <Email>(), Arg.Any <Password>())
                .Returns(Observable.Never <Unit>());
                ViewModel.Login();

                TestScheduler.Start();
                observer.Messages.AssertEqual(
                    ReactiveTest.OnNext(2, false)
                    );
            }
예제 #12
0
                public void SetsTheErrorMessageToIncorrectEmailOrPasswordWhenReceivedUnauthorizedException()
                {
                    var observer = TestScheduler.CreateObserver <string>();

                    ViewModel.ErrorMessage.Subscribe(observer);
                    var exception = new UnauthorizedException(
                        Substitute.For <IRequest>(), Substitute.For <IResponse>());

                    UserAccessManager.Login(Arg.Any <Email>(), Arg.Any <Password>())
                    .Returns(Observable.Throw <Unit>(exception));

                    ViewModel.Login();

                    TestScheduler.Start();
                    observer.Messages.AssertEqual(
                        ReactiveTest.OnNext(1, ""),
                        ReactiveTest.OnNext(2, Resources.IncorrectEmailOrPassword)
                        );
                }
예제 #13
0
        public IHttpActionResult Join(string link)
        {
            int uid = Auth.CheckToken(Request.Headers);

            if (uid == 0)
            {
                return(StatusCode(HttpStatusCode.Forbidden));
            }

            var queue = QueueManager.GetQueue(link);

            if (queue == null)
            {
                return(NotFound());
            }

            UserAccessManager.Insert(UserManager.GetUser(uid).Login, uid, queue.Id);
            return(Ok(true));
        }
                public void SetsNoEmailErrorWhenReceivesBadRequestException()
                {
                    ViewModel.Email.OnNext(ValidEmail);
                    var exception = new BadRequestException(
                        Substitute.For <IRequest>(), Substitute.For <IResponse>());

                    UserAccessManager
                    .ResetPassword(Arg.Any <Email>())
                    .Returns(Observable.Throw <string>(exception));

                    var observer = TestScheduler.CreateObserver <string>();

                    ViewModel.ErrorMessage.Subscribe(observer);

                    ViewModel.Reset.Execute();
                    TestScheduler.Start();

                    observer.Messages.Last().Value.Value.Should().Be(Resources.PasswordResetEmailDoesNotExistError);
                }
예제 #15
0
        private void CheckAccess(string value)
        {
            UserAccessManager userAccessManager = WcfContext.Current.GetUserAccessManager();
            OperationKey      operationKey      = this.GetOperationKey(value);

            if (operationKey == null)
            {
                throw new ArgumentException("Invalid operation key.");
            }
            if (!userAccessManager.CheckAccess(operationKey.SessionId))
            {
                throw new AuthenticationException("Not login or login timeout.");
            }
            User user = userAccessManager.GetUser(operationKey.SessionId, true);

            if (!this.IsUserActive(user))
            {
                throw new AuthenticationException(string.Format("The user (Serial:{0}) is {1}.", user.Serial, user.Status));
            }
            Organization org = userAccessManager.GetOrganization(operationKey.SessionId);

            if (!this.IsOrganizationActive(org))
            {
                throw new AuthenticationException(string.Format("The organization (Name:{0}) is {1}.", org.Name, org.Status));
            }
            UserAccess access = userAccessManager.FindUserAccessItem(operationKey.SessionId);

            if (access == null)
            {
                throw new AuthenticationException("Cannot find login session.");
            }
            userAccessManager.KeepAlive(operationKey.SessionId);
            UserAccessInfo info = new UserAccessInfo
            {
                Organization = org,
                User         = user,
                UserAccess   = access
            };

            WcfContext.Current.Set("UserAccessInfo", info);
            WcfContext.Current.Set("OperationKey", operationKey);
        }
예제 #16
0
        public static void Initialize(this MvvmCrossFoundation foundation)
        {
            initializeInversionOfControl(foundation);

            Func <ITogglDataSource, ISyncManager> createSyncManager(ITogglApi api) => dataSource =>
            TogglSyncManager.CreateSyncManager(
                foundation.Database,
                api,
                dataSource,
                foundation.TimeService,
                foundation.AnalyticsService,
                foundation.LastTimeUsageStorage,
                foundation.Scheduler,
                foundation.StopwatchProvider);

            ITogglDataSource createDataSource(ITogglApi api)
            {
                var dataSource = new TogglDataSource(
                    api,
                    foundation.Database,
                    foundation.TimeService,
                    createSyncManager(api),
                    foundation.AnalyticsService)
                                 .RegisterServices();

                Mvx.RegisterSingleton <ITogglApi>(api);
                Mvx.ConstructAndRegisterSingleton <IInteractorFactory, InteractorFactory>();
                Mvx.ConstructAndRegisterSingleton <IAutocompleteProvider, AutocompleteProvider>();

                foundation.SyncErrorHandlingService.HandleErrorsOf(dataSource.SyncManager);

                return(dataSource);
            }

            var userAccessManager =
                new UserAccessManager(foundation.ApiFactory, foundation.Database, foundation.GoogleService, foundation.ShortcutCreator, foundation.PrivateSharedStorageService, createDataSource);

            Mvx.RegisterSingleton <IUserAccessManager>(userAccessManager);

            foundation.BackgroundSyncService.SetupBackgroundSync(userAccessManager);
            foundation.AutomaticSyncingService.SetupAutomaticSync(userAccessManager);
        }
예제 #17
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 <ISingletonDataSource <IThreadSafeUser> >();

                user.ApiToken.Returns(newApiToken);
                userSource.Current.Returns(Observable.Return(user));
                dataSource.User.Returns(userSource);
                UserAccessManager.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().ForkNavigate <MainTabBarViewModel, MainViewModel>();
            }
예제 #18
0
            public void ReturnsFlaseWhenIsLoading()
            {
                var observer = TestScheduler.CreateObserver <bool>();

                ViewModel.SignupEnabled.Subscribe(observer);

                ViewModel.SetEmail(ValidEmail);
                ViewModel.SetPassword(ValidPassword);
                NavigationService.Navigate <TermsOfServiceViewModel, bool>().Returns(true);
                UserAccessManager
                .SignUp(Arg.Any <Email>(), Arg.Any <Password>(), Arg.Any <bool>(), Arg.Any <int>(), Arg.Any <string>())
                .Returns(Observable.Never <ITogglDataSource>());
                ViewModel.Signup.Execute();

                TestScheduler.Start();
                observer.Messages.AssertEqual(
                    ReactiveTest.OnNext(2, true),
                    ReactiveTest.OnNext(3, false)
                    );
            }
                public void SetsApiErrorWhenReceivesApiException(NonEmptyString errorString)
                {
                    ViewModel.Email.OnNext(ValidEmail);
                    var exception = new ApiException(
                        Substitute.For <IRequest>(),
                        Substitute.For <IResponse>(),
                        errorString.Get);

                    UserAccessManager
                    .ResetPassword(Arg.Any <Email>())
                    .Returns(Observable.Throw <string>(exception));

                    var observer = TestScheduler.CreateObserver <string>();

                    ViewModel.ErrorMessage.Subscribe(observer);

                    ViewModel.Reset.Execute();
                    TestScheduler.Start();

                    observer.Messages.Last().Value.Value.Should().Be(exception.LocalizedApiErrorMessage);
                }
예제 #20
0
                public async Task ClosesTheViewModelAfterFourSecondDelay()
                {
                    var testScheduler = new TestScheduler();
                    var timeService   = new TimeService(testScheduler);
                    var viewModel     = new ForgotPasswordViewModel(
                        timeService, UserAccessManager, AnalyticsService, SchedulerProvider, NavigationService, RxActionFactory);

                    viewModel.AttachView(View);
                    viewModel.Email.OnNext(ValidEmail);
                    UserAccessManager
                    .ResetPassword(Arg.Any <Email>())
                    .Returns(Observable.Return("Great success"));

                    viewModel.Reset.Execute();
                    TestScheduler.Start();
                    testScheduler.AdvanceBy(TimeSpan.FromSeconds(4).Ticks);

                    var result = await viewModel.Result;

                    result.Email.Should().BeEquivalentTo(ValidEmail);
                }
예제 #21
0
            public void SetsErrorMessageToEmptyString()
            {
                ViewModel.Email.OnNext(ValidEmail);
                UserAccessManager
                .ResetPassword(Arg.Any <Email>())
                .Returns(Observable.Throw <string>(new Exception()));
                var observer = TestScheduler.CreateObserver <string>();

                ViewModel.ErrorMessage.Subscribe(observer);
                ViewModel.Reset.Execute();
                TestScheduler.Start();

                UserAccessManager
                .ResetPassword(Arg.Any <Email>())
                .Returns(Observable.Never <string>());

                ViewModel.Reset.Execute();
                TestScheduler.Start();

                observer.Messages.Should().HaveCount(3);
                observer.LastEmittedValue().Should().BeEmpty();
            }
예제 #22
0
            protected AppStartTest()
            {
                var api = Substitute.For <ITogglApi>();

                UserAccessManager.UserLoggedIn.Returns(Observable.Return(api));

                var dependencyContainer = new TestDependencyContainer
                {
                    MockTimeService              = TimeService,
                    MockUserAccessManager        = UserAccessManager,
                    MockNavigationService        = NavigationService,
                    MockOnboardingStorage        = OnboardingStorage,
                    MockAccessRestrictionStorage = AccessRestrictionStorage,
                    MockSyncManager              = Substitute.For <ISyncManager>(),
                    MockInteractorFactory        = Substitute.For <IInteractorFactory>(),
                    MockBackgroundSyncService    = Substitute.For <IBackgroundSyncService>()
                };

                UserAccessManager.CheckIfLoggedIn().Returns(true);

                AppStart = new AppStart <OnboardingViewModel>(App, dependencyContainer);
            }
예제 #23
0
                public void DoesNotDisplayAnErrorMessageWhenTheUserCancelsTheRequestOnTheGoogleService()
                {
                    var hasErrorObserver = TestScheduler.CreateObserver <bool>();

                    ViewModel.HasError.Subscribe(hasErrorObserver);
                    var errorTextObserver = TestScheduler.CreateObserver <string>();

                    ViewModel.ErrorMessage.Subscribe(errorTextObserver);

                    UserAccessManager.SignUpWithGoogle(Arg.Any <bool>(), Arg.Any <int>(), Arg.Any <string>()).Returns(
                        Observable.Throw <ITogglDataSource>(new GoogleLoginException(true)));

                    ViewModel.GoogleSignup.Execute();

                    TestScheduler.Start();
                    errorTextObserver.Messages.AssertEqual(
                        ReactiveTest.OnNext(1, "")
                        );

                    hasErrorObserver.Messages.AssertEqual(
                        ReactiveTest.OnNext(2, false)
                        );
                }
                public void ClosesTheViewModelAfterFourSecondDelay()
                {
                    var testScheduler = new TestScheduler();
                    var timeService   = new TimeService(testScheduler);
                    var viewModel     = new ForgotPasswordViewModel(
                        timeService, UserAccessManager, AnalyticsService, NavigationService, RxActionFactory);

                    viewModel.Email.OnNext(ValidEmail);
                    UserAccessManager
                    .ResetPassword(Arg.Any <Email>())
                    .Returns(Observable.Return("Great success"));

                    viewModel.Reset.Execute();
                    TestScheduler.Start();
                    testScheduler.AdvanceBy(TimeSpan.FromSeconds(4).Ticks);

                    NavigationService
                    .Received()
                    .Close(
                        viewModel,
                        Arg.Is <EmailParameter>(
                            parameter => parameter.Email.Equals(ValidEmail)));
                }
예제 #25
0
 public static bool CheckPrivilegedAccess(int userId, int queueId)
 {
     return(UserAccessManager.CheckPrivilegedAccess(userId, queueId));
 }
예제 #26
0
            public void CallsTheUserAccessManager()
            {
                ViewModel.GoogleLogin();

                UserAccessManager.Received().LoginWithGoogle();
            }
예제 #27
0
 public OrderItemController()
 {
     orderManager      = new OrderManager();
     productManager    = new ProductManager();
     userAccessManager = new UserAccessManager();
 }
예제 #28
0
 private void prepareException(Exception exception)
 {
     UserAccessManager
     .SignUp(Arg.Any <Email>(), Arg.Any <Password>(), Arg.Any <bool>(), Arg.Any <int>(), Arg.Any <string>())
     .Returns(Observable.Throw <ITogglDataSource>(exception));
 }
 public CategoryController()
 {
     categoryManager   = new CategoryManager();
     userAccessManager = new UserAccessManager();
 }
예제 #30
0
 protected AppStartTest()
 {
     AppStart = new AppStart <OnboardingViewModel>(App, TimeService, UserAccessManager, OnboardingStorage, NavigationService, AccessRestrictionStorage);
     DataSource.SyncManager.Returns(SyncManager);
     UserAccessManager.GetDataSourceIfLoggedIn().Returns(DataSource);
 }