package com.ese2013.mensaunibe.model.mensa.test;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.location.Location;
import android.location.LocationManager;
import android.test.InstrumentationTestCase;
import com.ese2013.mensaunibe.map.MyLocation;
import com.ese2013.mensaunibe.model.mensa.Mensa;
import com.ese2013.mensaunibe.model.mensa.MensaBuilder;
import com.ese2013.mensaunibe.model.menu.WeeklyMenu;
import com.memetix.mst.language.Language;
/**
* @author group7
* @author Sandor Torok
*/
public class MensaTest extends InstrumentationTestCase{
private MensaBuilder mockBuilder;
private Mensa mensa;
@Override
public void setUp() throws Exception {
super.setUp();
//have to add this line for Mockito to work properly
System.setProperty("dexmaker.dexcache", getInstrumentation().getTargetContext().getCacheDir().getPath());
mockBuilder = mock(MensaBuilder.class);
when(mockBuilder.getId()).thenReturn(1);
when(mockBuilder.getName()).thenReturn("Mensa Gesellschaftsstrasse");
when(mockBuilder.getStreet()).thenReturn("Gesellschaftsstrasse 2");
when(mockBuilder.getPlz()).thenReturn("3012 Bern");
when(mockBuilder.getLat()).thenReturn(46.9518);
when(mockBuilder.getLon()).thenReturn(7.438350);
when(mockBuilder.getFav()).thenReturn(true);
mensa = new Mensa(mockBuilder);
verify(mockBuilder).getId();
verify(mockBuilder).getName();
verify(mockBuilder).getStreet();
verify(mockBuilder).getPlz();
verify(mockBuilder).getLat();
verify(mockBuilder).getLon();
verify(mockBuilder).getFav();
}
@Override
public void tearDown() throws Exception{
mensa.setFavorite(false);
}
public void testIsFavorite() {
assertTrue(mensa.isFavorite());
}
public void testIsSection() {
assertTrue(!mensa.isSection());
}
public void testLanguage(){
mensa.setLanguage(Language.ENGLISH);
assertEquals("Language should be English", Language.ENGLISH, mensa.getLanguage());
}
public void testToString() {
WeeklyMenu mockWm = mock(WeeklyMenu.class);
when(mockWm.toString()).thenReturn("Yummi");
mensa.setWeeklyMenu(mockWm);
assertEquals("String should be equal",
"mensa:Mensa Gesellschaftsstrasse,"
+ "street:Gesellschaftsstrasse 2,"
+ "plz:3012 Bern,"
+ "lat:46.951800,"
+ "lon:7.438350,"
+ "id:1,"
+ "menu:Yummi",
mensa.toString());
}
/**
* Testing if distance between canteen and device location gives back
* the correct Strings.
* Under 1 km --> x m
* Between 10 and 1 km --> x.y km
* Above 10 km --> x km
*/
public void testDistance() {
MyLocation mockLocation = mock(MyLocation.class);
Location testLocation = new Location(LocationManager.GPS_PROVIDER);
testLocation.setLatitude(46.9518);
testLocation.setLongitude(7.43835);
when(mockLocation.getLocation()).thenReturn(testLocation);
assertEquals("Should be 0 m", "0 m", mensa.getDistance(mockLocation));
testLocation.setLatitude(46.9536);
testLocation.setLongitude(7.44004);
assertEquals("Should be 237 m", "237 m", mensa.getDistance(mockLocation));
testLocation.setLatitude(46.9726);
testLocation.setLongitude(7.47968);
assertEquals("Should be 3.9 km", "3.9 km", mensa.getDistance(mockLocation));
testLocation.setLatitude(47.9370);
testLocation.setLongitude(10.78988);
assertEquals("Should be 275 km", "275 km", mensa.getDistance(mockLocation));
}
}