package com.nilhcem.bblfr.jobs.splashscreen.checkdata;
import android.location.Location;
import android.os.Build;
import com.nilhcem.bblfr.BuildConfig;
import com.nilhcem.bblfr.core.map.LocationProvider;
import com.nilhcem.bblfr.core.prefs.Preferences;
import com.nilhcem.bblfr.model.baggers.City;
import com.nilhcem.bblfr.model.baggers.dao.BaggersDao;
import com.nilhcem.bblfr.model.baggers.dao.CitiesDao;
import com.nilhcem.bblfr.model.locations.dao.LocationsDao;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.M)
public class CheckDataServiceTest {
@Mock Location location;
private CheckDataService service;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
service = new CheckDataService(
mock(Preferences.class),
mock(CitiesDao.class),
mock(BaggersDao.class),
mock(LocationsDao.class),
mock(LocationProvider.class));
}
@Test
public void should_return_null_if_location_or_cities_are_null() {
// Given
List<City> cities = new ArrayList<>();
// When
City closestCity1 = service.findClosestCity(null, cities);
City closestCity2 = service.findClosestCity(location, null);
// Then
assertThat(closestCity1).isEqualTo(closestCity2);
assertThat(closestCity1).isNull();
}
@Test
public void should_return_closest_city() {
// Given
when(location.getLatitude()).thenReturn(24.4);
when(location.getLongitude()).thenReturn(12.0);
City city1 = new City();
city1.lat = 42.0;
city1.lng = 2.1;
City city2 = new City();
city2.lat = 24.4;
city2.lng = 12.2;
City city3 = new City();
city3.lat = 7.2;
city3.lng = 14.3;
// When
City closestCity = service.findClosestCity(location, Arrays.asList(city1, city2, city3));
// Then
assertThat(closestCity).isEqualTo(city2);
}
}