package com.patloew.rxlocation; import android.support.v4.content.ContextCompat; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.api.Api; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.common.api.ResultCallback; import com.google.android.gms.common.api.Scope; import com.google.android.gms.common.api.Status; import com.google.android.gms.location.ActivityRecognition; import com.google.android.gms.location.LocationServices; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Matchers; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.powermock.core.classloader.annotations.PrepareOnlyThisForTest; import org.powermock.modules.junit4.PowerMockRunner; import static junit.framework.Assert.assertEquals; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; @RunWith(PowerMockRunner.class) @PrepareOnlyThisForTest({ ContextCompat.class, Status.class, LocationServices.class, ActivityRecognition.class, ConnectionResult.class, GoogleApiClient.Builder.class }) public class RxLocationBaseOnSubscribeTest extends BaseOnSubscribeTest { @Before public void setup() throws Exception { MockitoAnnotations.initMocks(this); super.setup(); } @Test public void setupFitnessPendingResult_NoTimeout() { RxLocationBaseOnSubscribe<Object> rxLocationBaseOnSubscribe = spy(new RxLocationBaseOnSubscribe<Object>(rxLocation, null, null) { }); ResultCallback resultCallback = Mockito.mock(ResultCallback.class); rxLocationBaseOnSubscribe.setupLocationPendingResult(pendingResult, resultCallback); verify(pendingResult).setResultCallback(resultCallback); } @Test public void setupFitnessPendingResult_Timeout() { RxLocationBaseOnSubscribe<Object> rxLocationBaseOnSubscribe = spy(new RxLocationBaseOnSubscribe<Object>(rxLocation, TIMEOUT_TIME, TIMEOUT_TIMEUNIT) { }); ResultCallback resultCallback = Mockito.mock(ResultCallback.class); rxLocationBaseOnSubscribe.setupLocationPendingResult(pendingResult, resultCallback); verify(pendingResult).setResultCallback(resultCallback, TIMEOUT_TIME, TIMEOUT_TIMEUNIT); } @Test public void createApiClient_NoScopes() { GoogleApiClient.Builder builder = Mockito.mock(GoogleApiClient.Builder.class); RxLocationBaseOnSubscribe<Object> rxLocationBaseOnSubscribe = spy(new RxLocationBaseOnSubscribe<Object>(ctx, new Api[]{ LocationServices.API }, null) { }); doReturn(builder).when(rxLocationBaseOnSubscribe).getApiClientBuilder(); doReturn(apiClient).when(builder).build(); RxLocationBaseOnSubscribe.ApiClientConnectionCallbacks callbacks = Mockito.mock(RxLocationBaseOnSubscribe.ApiClientConnectionCallbacks.class); assertEquals(apiClient, rxLocationBaseOnSubscribe.createApiClient(callbacks)); verify(builder).addApi(LocationServices.API); verify(builder).addConnectionCallbacks(callbacks); verify(builder).addOnConnectionFailedListener(callbacks); verify(builder, never()).addScope(Matchers.any(Scope.class)); verify(callbacks).setClient(Matchers.any(GoogleApiClient.class)); } @Test public void createApiClient_Scopes() { GoogleApiClient.Builder builder = Mockito.mock(GoogleApiClient.Builder.class); Scope scope = new Scope("Test"); RxLocationBaseOnSubscribe<Object> rxLocationBaseOnSubscribe = spy(new RxLocationBaseOnSubscribe<Object>(ctx, new Api[]{ LocationServices.API }, new Scope[]{ scope } ) { }); doReturn(builder).when(rxLocationBaseOnSubscribe).getApiClientBuilder(); doReturn(apiClient).when(builder).build(); RxLocationBaseOnSubscribe.ApiClientConnectionCallbacks callbacks = Mockito.mock(RxLocationBaseOnSubscribe.ApiClientConnectionCallbacks.class); assertEquals(apiClient, rxLocationBaseOnSubscribe.createApiClient(callbacks)); verify(builder).addApi(LocationServices.API); verify(builder).addScope(scope); verify(builder).addConnectionCallbacks(callbacks); verify(builder).addOnConnectionFailedListener(callbacks); verify(callbacks).setClient(Matchers.any(GoogleApiClient.class)); } }