public void AndStopRetryingAfterASuccessFullLoginApiCall() { var observer = TestScheduler.CreateObserver <ITogglDataSource>(); var userIsMissingApiTokenException = new UserIsMissingApiTokenException(Substitute.For <IRequest>(), Substitute.For <IResponse>()); Api.User.Get().Returns(Observable.Throw <IUser>(userIsMissingApiTokenException), Observable.Return(User)); TestScheduler.Start(); LoginManager.Login(Email, Password).Subscribe(observer); TestScheduler.AdvanceBy(TimeSpan.FromDays(1).Ticks); Api.User.Received(2).Get(); }
public void AfterAWhileWhenTheApiThrowsUserIsMissingApiTokenException(int seconds, int apiCalls) { var userIsMissingApiTokenException = new UserIsMissingApiTokenException(Substitute.For <IRequest>(), Substitute.For <IResponse>()); Api.User.Get().Returns(Observable.Throw <IUser>(userIsMissingApiTokenException)); var observer = TestScheduler.CreateObserver <ITogglDataSource>(); TestScheduler.Start(); LoginManager.Login(Email, Password).Subscribe(observer); TestScheduler.AdvanceBy(TimeSpan.FromSeconds(seconds).Ticks); Api.User.Received(apiCalls).Get(); }
public void LoggingInWhenReceivingUserIsMissingApiTokenExceptionAndThenForwardTheErrorOnTheThirdFailure() { var userIsMissingApiTokenException = new UserIsMissingApiTokenException(Substitute.For <IRequest>(), Substitute.For <IResponse>()); Api.User.Get().Returns(Observable.Throw <IUser>(userIsMissingApiTokenException)); var observer = TestScheduler.CreateObserver <ITogglDataSource>(); TestScheduler.Start(); LoginManager.Login(Email, Password).Subscribe(observer); TestScheduler.AdvanceBy(TimeSpan.FromSeconds(20).Ticks); Api.User.Received(3).Get(); observer.Messages.Single().Value.Exception.Should().BeOfType <UserIsMissingApiTokenException>(); }
public void WhenReceivingUserIsMissingApiTokenExceptionOrThrowOtherExceptions() { var userIsMissingApiTokenException = new UserIsMissingApiTokenException(Substitute.For <IRequest>(), Substitute.For <IResponse>()); var serverErrorException = Substitute.For <ServerErrorException>(Substitute.For <IRequest>(), Substitute.For <IResponse>(), "Some Exception"); Api.User.Get().Returns(Observable.Throw <IUser>(userIsMissingApiTokenException), Observable.Throw <IUser>(serverErrorException)); var observer = TestScheduler.CreateObserver <ITogglDataSource>(); TestScheduler.Start(); LoginManager.Login(Email, Password).Subscribe(observer); TestScheduler.AdvanceBy(TimeSpan.FromSeconds(20).Ticks); observer.Messages.Single().Value.Exception.Should().Be(serverErrorException); Api.User.Received(2).Get(); }
public async Task TracksMissingApiToken() { var userIsMissingApiTokenException = new UserIsMissingApiTokenException(Substitute.For <IRequest>(), Substitute.For <IResponse>()); Api.User.GetWithGoogle().Returns(Observable.Throw <IUser>(userIsMissingApiTokenException)); try { await LoginManager.LoginWithGoogle(); } catch { } AnalyticsService.UserIsMissingApiToken.Received().Track(Arg.Is(LoginSignupAuthenticationMethod.LoginGoogle)); }
public async Task TracksMissingApiToken() { var userIsMissingApiTokenException = new UserIsMissingApiTokenException(Substitute.For <IRequest>(), Substitute.For <IResponse>()); Api.User.SignUp(Email, Password, TermsAccepted, CountryId).Returns(Observable.Throw <IUser>(userIsMissingApiTokenException)); try { await LoginManager.SignUp(Email, Password, TermsAccepted, CountryId); } catch { } AnalyticsService.UserIsMissingApiToken.Received().Track(Arg.Is(LoginSignupAuthenticationMethod.SignUp)); }
public void OnceAndResumesTryingToLoginAfterAWhileWhenTheApiThrowsUserIsMissingApiTokenException(int seconds, int loginApiCalls) { var userIsMissingApiTokenException = new UserIsMissingApiTokenException(Substitute.For <IRequest>(), Substitute.For <IResponse>()); GoogleService.GetAuthToken().Returns(Observable.Return("sometoken")); Api.User.SignUpWithGoogle(Arg.Any <string>()).Returns(Observable.Throw <IUser>(userIsMissingApiTokenException)); Api.User.GetWithGoogle().Returns(Observable.Throw <IUser>(userIsMissingApiTokenException)); var observer = TestScheduler.CreateObserver <ITogglDataSource>(); TestScheduler.Start(); LoginManager.SignUpWithGoogle().Subscribe(observer); TestScheduler.AdvanceBy(TimeSpan.FromSeconds(seconds).Ticks); Api.User.Received(1).SignUpWithGoogle(Arg.Any <string>()); Api.User.Received(loginApiCalls).GetWithGoogle(); }
public void AndWhenReceivingUserIsMissingApiTokenExceptionWillResumeTryingToLoginThreeTimesBeforeThrowingIt() { var userIsMissingApiTokenException = new UserIsMissingApiTokenException(Substitute.For <IRequest>(), Substitute.For <IResponse>()); Api.User.SignUp(Email, Password, TermsAccepted, CountryId).Returns(Observable.Throw <IUser>(userIsMissingApiTokenException)); Api.User.Get().Returns(Observable.Throw <IUser>(userIsMissingApiTokenException)); var observer = TestScheduler.CreateObserver <ITogglDataSource>(); TestScheduler.Start(); LoginManager.SignUp(Email, Password, TermsAccepted, CountryId).Subscribe(observer); TestScheduler.AdvanceBy(TimeSpan.FromSeconds(20).Ticks); Api.User.Received(1).SignUp(Email, Password, TermsAccepted, CountryId); Api.User.Received(3).Get(); observer.Messages.Single().Value.Exception.Should().BeOfType <UserIsMissingApiTokenException>(); }
public void AndWhenReceivingUserIsMissingApiTokenExceptionWillResumeTryingToLoginWithGoogleThreeTimesBeforeThrowingIt() { var userIsMissingApiTokenException = new UserIsMissingApiTokenException(Substitute.For <IRequest>(), Substitute.For <IResponse>()); GoogleService.GetAuthToken().Returns(Observable.Return("sometoken")); Api.User.SignUpWithGoogle(Arg.Any <string>()).Returns(Observable.Throw <IUser>(userIsMissingApiTokenException)); Api.User.GetWithGoogle().Returns(Observable.Throw <IUser>(userIsMissingApiTokenException)); var observer = TestScheduler.CreateObserver <ITogglDataSource>(); TestScheduler.Start(); LoginManager.SignUpWithGoogle().Subscribe(observer); TestScheduler.AdvanceBy(TimeSpan.FromSeconds(20).Ticks); Api.User.Received(1).SignUpWithGoogle(Arg.Any <string>()); Api.User.Received(3).GetWithGoogle(); observer.Messages.Single().Value.Exception.Should().BeOfType <UserIsMissingApiTokenException>(); }