package org.glucosio.android.presenter;
import org.glucosio.android.db.DatabaseHandler;
import org.glucosio.android.db.GlucoseReading;
import org.glucosio.android.db.User;
import org.glucosio.android.view.OverviewView;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.Days;
import org.joda.time.tz.UTCProvider;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.Arrays;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Matchers.anyLong;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class OverviewPresenterTest {
private OverviewPresenter presenter;
@Mock
private OverviewView viewMock;
@Mock
private DatabaseHandler dbMock;
@Mock
private User userMock;
@Before
public void setUp() throws Exception {
//to remove joda error printing
DateTimeZone.setProvider(new UTCProvider());
presenter = new OverviewPresenter(viewMock, dbMock);
when(dbMock.getUser(anyLong())).thenReturn(userMock);
}
@Test
public void ShouldAddZerosBetweenReadings_WhenAsked() throws Exception {
DateTime now = DateTime.now();
DateTime fiveDaysAgo = now.minusDays(5);
when(dbMock.getLastMonthGlucoseReadings()).thenReturn(
Arrays.asList(
new GlucoseReading(12, "test", fiveDaysAgo.toDate(), ""),
new GlucoseReading(21, "test", now.toDate(), ""))
);
presenter.loadDatabase(true);
final List<Integer> readings = presenter.getGlucoseReadings();
DateTime minDateTime = DateTime.now().minusMonths(1).minusDays(15);
assertThat(readings).hasSize(Days.daysBetween(minDateTime, now).getDays());
assertThat(readings).containsSequence(12, 0, 0, 0, 0, 21);
}
@Test
public void ShouldSortReadingsChronologically_WhenAsked() throws Exception {
DateTime now = DateTime.now();
DateTime twoDaysAgo = now.minusDays(2);
when(dbMock.getLastMonthGlucoseReadings()).thenReturn(
Arrays.asList(
new GlucoseReading(33, "test", now.toDate(), ""),
new GlucoseReading(11, "test", twoDaysAgo.toDate(), ""))
);
presenter.loadDatabase(true);
final List<Integer> readings = presenter.getGlucoseReadings();
assertThat(readings).containsSequence(11, 0, 33);
}
}