package com.patloew.rxlocation;
import android.app.PendingIntent;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.Status;
import com.google.android.gms.location.GeofencingRequest;
import com.google.android.gms.location.LocationServices;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareOnlyThisForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.Single;
import static org.mockito.Mockito.when;
@SuppressWarnings("MissingPermission")
@RunWith(PowerMockRunner.class)
@PrepareOnlyThisForTest({ LocationServices.class, com.google.android.gms.location.ActivityRecognition.class, Status.class, ConnectionResult.class, RxLocationBaseOnSubscribe.class })
public class GeofencingOnSubscribeTest extends BaseOnSubscribeTest {
@Mock GeofencingRequest geofencingRequest;
@Mock PendingIntent pendingIntent;
List<String> geofenceRequestIds;
@Override
@Before
public void setup() throws Exception {
MockitoAnnotations.initMocks(this);
super.setup();
geofenceRequestIds = new ArrayList<>(0);
}
// GeofencingAddSingle
@Test
public void GeofencingAddSingle_Success() {
GeofencingAddSingleOnSubscribe single = PowerMockito.spy(new GeofencingAddSingleOnSubscribe(rxLocation, geofencingRequest, pendingIntent, null, null));
setPendingResultValue(status);
when(status.isSuccess()).thenReturn(true);
when(geofencingApi.addGeofences(apiClient, geofencingRequest, pendingIntent)).thenReturn(pendingResult);
setupBaseSingleSuccess(single);
assertSingleValue(Single.create(single).test(), status);
}
@Test
public void GeofencingAddSingle_StatusException() {
GeofencingAddSingleOnSubscribe single = PowerMockito.spy(new GeofencingAddSingleOnSubscribe(rxLocation, geofencingRequest, pendingIntent, null, null));
setPendingResultValue(status);
when(status.isSuccess()).thenReturn(false);
when(geofencingApi.addGeofences(apiClient, geofencingRequest, pendingIntent)).thenReturn(pendingResult);
setupBaseSingleSuccess(single);
assertError(Single.create(single).test(), StatusException.class);
}
// GeofencingRemoveSingle
@Test
public void GeofencingRemoveSingle_PendingIntent_Success() {
GeofencingRemoveSingleOnSubscribe single = PowerMockito.spy(new GeofencingRemoveSingleOnSubscribe(rxLocation, null, pendingIntent, null, null));
setPendingResultValue(status);
when(status.isSuccess()).thenReturn(true);
when(geofencingApi.removeGeofences(apiClient, pendingIntent)).thenReturn(pendingResult);
setupBaseSingleSuccess(single);
assertSingleValue(Single.create(single).test(), status);
}
@Test
public void GeofencingRemoveSingle_PendingIntent_StatusException() {
GeofencingRemoveSingleOnSubscribe single = PowerMockito.spy(new GeofencingRemoveSingleOnSubscribe(rxLocation, null, pendingIntent, null, null));
setPendingResultValue(status);
when(status.isSuccess()).thenReturn(false);
when(geofencingApi.removeGeofences(apiClient, pendingIntent)).thenReturn(pendingResult);
setupBaseSingleSuccess(single);
assertError(Single.create(single).test(), StatusException.class);
}
@Test
public void GeofencingRemoveSingle_IdList_Success() {
GeofencingRemoveSingleOnSubscribe single = PowerMockito.spy(new GeofencingRemoveSingleOnSubscribe(rxLocation, geofenceRequestIds, null, null, null));
setPendingResultValue(status);
when(status.isSuccess()).thenReturn(true);
when(geofencingApi.removeGeofences(apiClient, geofenceRequestIds)).thenReturn(pendingResult);
setupBaseSingleSuccess(single);
assertSingleValue(Single.create(single).test(), status);
}
@Test
public void GeofencingRemoveSingle_IdList_StatusException() {
GeofencingRemoveSingleOnSubscribe single = PowerMockito.spy(new GeofencingRemoveSingleOnSubscribe(rxLocation, geofenceRequestIds, null, null, null));
setPendingResultValue(status);
when(status.isSuccess()).thenReturn(false);
when(geofencingApi.removeGeofences(apiClient, geofenceRequestIds)).thenReturn(pendingResult);
setupBaseSingleSuccess(single);
assertError(Single.create(single).test(), StatusException.class);
}
}