package com.zegoggles.smssync.service;
import android.database.Cursor;
import android.database.MatrixCursor;
import com.zegoggles.smssync.contacts.ContactGroupIds;
import com.zegoggles.smssync.mail.DataType;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.robolectric.RobolectricTestRunner;
import java.util.EnumSet;
import static com.zegoggles.smssync.mail.DataType.MMS;
import static com.zegoggles.smssync.mail.DataType.SMS;
import static org.fest.assertions.api.Assertions.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.*;
import static org.mockito.MockitoAnnotations.initMocks;
@RunWith(RobolectricTestRunner.class)
public class BulkFetcherTest {
@Mock BackupItemsFetcher fetcher;
BulkFetcher bulkFetcher;
@Before public void before() {
initMocks(this);
bulkFetcher = new BulkFetcher(fetcher);
}
@Test public void shouldFetchAllItems() throws Exception {
when(fetcher.getItemsForDataType(SMS, null, 50)).thenReturn(cursor(3));
when(fetcher.getItemsForDataType(MMS, null, 47)).thenReturn(cursor(5));
BackupCursors cursors = bulkFetcher.fetch(EnumSet.of(SMS, MMS), null, 50);
assertThat(cursors.count()).isEqualTo(8);
assertThat(cursors.count(SMS)).isEqualTo(3);
assertThat(cursors.count(MMS)).isEqualTo(5);
}
@Test public void shouldFetchAllItemsRespectingMaxItems() throws Exception {
when(fetcher.getItemsForDataType(SMS, null, 5)).thenReturn(cursor(5));
BackupCursors cursors = bulkFetcher.fetch(EnumSet.of(SMS, MMS), null, 5);
assertThat(cursors.count()).isEqualTo(5);
assertThat(cursors.count(SMS)).isEqualTo(5);
verify(fetcher, never()).getItemsForDataType(eq(DataType.MMS), any(ContactGroupIds.class), anyInt());
}
@Test public void shouldFetchAllItemsEmptyList() throws Exception {
BackupCursors cursors = bulkFetcher.fetch(EnumSet.noneOf(DataType.class), null, 50);
assertThat(cursors.count()).isEqualTo(0);
}
private Cursor cursor(int rows) {
MatrixCursor c = new MatrixCursor(new String[] {});
for (int i=0; i<rows; i++) {
c.addRow(new Object[] {});
}
return c;
}
}