@Test public void BaseObservable_ApiClient_ConnectionFailed_Resolution() { final Object object = new Object(); BaseObservable<Object> observable = spy(new BaseObservable<Object>(rxFit, null, null) { @Override protected void onGoogleApiClientReady(GoogleApiClient apiClient, ObservableEmitter<? super Object> subscriber) { subscriber.onNext(object); subscriber.onComplete(); } }); doReturn(true).when(connectionResult).hasResolution(); doAnswer(invocation -> { BaseRx.ApiClientConnectionCallbacks callbacks = invocation.getArgumentAt(0, BaseRx.ApiClientConnectionCallbacks.class); callbacks.setClient(apiClient); callbacks.onConnectionFailed(connectionResult); return apiClient; }).when(observable).createApiClient(Matchers.any(BaseRx.ApiClientConnectionCallbacks.class)); TestObserver<Object> sub = Observable.create(observable).test(); sub.assertNoValues(); sub.assertNotTerminated(); verify(ctx).startActivity(Matchers.any(Intent.class)); }
@Test public void BaseObservable_ApiClient_Connected() { final Object object = new Object(); BaseSingle<Object> single = spy(new BaseSingle<Object>(ctx, new Api[] {}, null) { @Override protected void onGoogleApiClientReady(GoogleApiClient apiClient, SingleEmitter<? super Object> subscriber) { subscriber.onSuccess(object); } }); doAnswer(invocation -> { BaseRx.ApiClientConnectionCallbacks callbacks = invocation.getArgumentAt(0, BaseRx.ApiClientConnectionCallbacks.class); callbacks.setClient(apiClient); callbacks.onConnected(null); return apiClient; }).when(single).createApiClient(Matchers.any(BaseRx.ApiClientConnectionCallbacks.class)); TestObserver<Object> sub = Single.create(single).test(); sub.assertValue(object); sub.assertComplete(); }
@Test public void BaseObservable_ApiClient_ConnectionSuspended() { final Object object = new Object(); BaseSingle<Object> single = spy(new BaseSingle<Object>(ctx, new Api[] {}, null) { @Override protected void onGoogleApiClientReady(GoogleApiClient apiClient, SingleEmitter<? super Object> subscriber) { subscriber.onSuccess(object); } }); doAnswer(invocation -> { BaseRx.ApiClientConnectionCallbacks callbacks = invocation.getArgumentAt(0, BaseRx.ApiClientConnectionCallbacks.class); callbacks.setClient(apiClient); callbacks.onConnectionSuspended(0); return apiClient; }).when(single).createApiClient(Matchers.any(BaseRx.ApiClientConnectionCallbacks.class)); TestObserver<Object> sub = Single.create(single).test(); sub.assertNoValues(); sub.assertError(GoogleAPIConnectionSuspendedException.class); }
@Test public void BaseObservable_ApiClient_ConnectionFailed_NoResulution() { final Object object = new Object(); BaseSingle<Object> single = spy(new BaseSingle<Object>(ctx, new Api[] {}, null) { @Override protected void onGoogleApiClientReady(GoogleApiClient apiClient, SingleEmitter<? super Object> subscriber) { subscriber.onSuccess(object); } }); doReturn(false).when(connectionResult).hasResolution(); doAnswer(invocation -> { BaseRx.ApiClientConnectionCallbacks callbacks = invocation.getArgumentAt(0, BaseRx.ApiClientConnectionCallbacks.class); callbacks.setClient(apiClient); callbacks.onConnectionFailed(connectionResult); return apiClient; }).when(single).createApiClient(Matchers.any(BaseRx.ApiClientConnectionCallbacks.class)); TestObserver<Object> sub = Single.create(single).test(); sub.assertNoValues(); sub.assertError(GoogleAPIConnectionException.class); }
@Test public void BaseObservable_ApiClient_ConnectionFailed_Resolution() { final Object object = new Object(); BaseSingle<Object> single = spy(new BaseSingle<Object>(rxFit, null, null) { @Override protected void onGoogleApiClientReady(GoogleApiClient apiClient, SingleEmitter<? super Object> subscriber) { subscriber.onSuccess(object); } }); doReturn(true).when(connectionResult).hasResolution(); doAnswer(invocation -> { BaseRx.ApiClientConnectionCallbacks callbacks = invocation.getArgumentAt(0, BaseRx.ApiClientConnectionCallbacks.class); callbacks.setClient(apiClient); callbacks.onConnectionFailed(connectionResult); return apiClient; }).when(single).createApiClient(Matchers.any(BaseRx.ApiClientConnectionCallbacks.class)); TestObserver<Object> sub = Single.create(single).test(); sub.assertNoValues(); sub.assertNotTerminated(); verify(ctx).startActivity(Matchers.any(Intent.class)); }
@Test public void createApiClient_Scopes() { GoogleApiClient.Builder builder = Mockito.mock(GoogleApiClient.Builder.class); BaseRx<Object> baseRx = spy(new BaseRx<Object>(ctx, new Api[]{ Fitness.HISTORY_API}, new Scope[]{ Fitness.SCOPE_ACTIVITY_READ }) { @Override protected void handleResolutionResult(int resultCode, ConnectionResult connectionResult) {} }); doReturn(builder).when(baseRx).getApiClientBuilder(); doReturn(apiClient).when(builder).build(); BaseRx.ApiClientConnectionCallbacks callbacks = Mockito.mock(BaseRx.ApiClientConnectionCallbacks.class); assertEquals(apiClient, baseRx.createApiClient(callbacks)); verify(builder).addApi(Fitness.HISTORY_API); verify(builder).addScope(Fitness.SCOPE_ACTIVITY_READ); verify(builder).addConnectionCallbacks(callbacks); verify(builder).addOnConnectionFailedListener(callbacks); verify(callbacks).setClient(Matchers.any(GoogleApiClient.class)); }
@Test public void BaseObservable_ApiClient_ConnectionFailed_NoResulution() { final Object object = new Object(); BaseObservable<Object> observable = spy(new BaseObservable<Object>(ctx, new Api[] {}, null) { @Override protected void onGoogleApiClientReady(GoogleApiClient apiClient, ObservableEmitter<? super Object> subscriber) { subscriber.onNext(object); subscriber.onComplete(); } }); doReturn(false).when(connectionResult).hasResolution(); doAnswer(invocation -> { BaseRx.ApiClientConnectionCallbacks callbacks = invocation.getArgumentAt(0, BaseRx.ApiClientConnectionCallbacks.class); callbacks.setClient(apiClient); callbacks.onConnectionFailed(connectionResult); return apiClient; }).when(observable).createApiClient(Matchers.any(BaseRx.ApiClientConnectionCallbacks.class)); TestObserver<Object> sub = Observable.create(observable).test(); sub.assertNoValues(); sub.assertError(GoogleAPIConnectionException.class); }
@Test public void createApiClient_NoScopes() { GoogleApiClient.Builder builder = Mockito.mock(GoogleApiClient.Builder.class); BaseRx<Object> baseRx = spy(new BaseRx<Object>(ctx, new Api[]{ Fitness.HISTORY_API}, null) { @Override protected void handleResolutionResult(int resultCode, ConnectionResult connectionResult) {} }); doReturn(builder).when(baseRx).getApiClientBuilder(); doReturn(apiClient).when(builder).build(); BaseRx.ApiClientConnectionCallbacks callbacks = Mockito.mock(BaseRx.ApiClientConnectionCallbacks.class); assertEquals(apiClient, baseRx.createApiClient(callbacks)); verify(builder).addApi(Fitness.HISTORY_API); verify(builder).addConnectionCallbacks(callbacks); verify(builder).addOnConnectionFailedListener(callbacks); verify(builder, never()).addScope(Matchers.any(Scope.class)); verify(callbacks).setClient(Matchers.any(GoogleApiClient.class)); }
protected GoogleApiClient createApiClient(ApiClientConnectionCallbacks apiClientConnectionCallbacks) { GoogleApiClient.Builder apiClientBuilder = getApiClientBuilder(); for (Api<? extends Api.ApiOptions.NotRequiredOptions> service : services) { apiClientBuilder.addApi(service); } if(scopes != null) { for (Scope scope : scopes) { apiClientBuilder.addScope(scope); } } apiClientBuilder.addConnectionCallbacks(apiClientConnectionCallbacks); apiClientBuilder.addOnConnectionFailedListener(apiClientConnectionCallbacks); GoogleApiClient apiClient = apiClientBuilder.build(); apiClientConnectionCallbacks.setClient(apiClient); return apiClient; }
@Override public Object answer(InvocationOnMock invocation) throws Throwable { BaseRx.ApiClientConnectionCallbacks callbacks = invocation.getArgumentAt(0, BaseRx.ApiClientConnectionCallbacks.class); callbacks.setClient(apiClient); callbacks.onConnected(null); return apiClient; } }).when(observable).createApiClient(Matchers.any(BaseRx.ApiClientConnectionCallbacks.class));
@Override public Object answer(InvocationOnMock invocation) throws Throwable { BaseRx.ApiClientConnectionCallbacks callbacks = invocation.getArgumentAt(0, BaseRx.ApiClientConnectionCallbacks.class); callbacks.setClient(apiClient); callbacks.onConnectionSuspended(0); return apiClient; } }).when(observable).createApiClient(Matchers.any(BaseRx.ApiClientConnectionCallbacks.class));