package com.zegoggles.smssync.service; import android.net.Uri; import com.zegoggles.smssync.contacts.ContactAccessor; 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.mockito.MockitoAnnotations; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; import static org.fest.assertions.api.Assertions.assertThat; @RunWith(RobolectricTestRunner.class) public class BackupQueryBuilderTest { BackupQueryBuilder builder; @Mock private ContactAccessor accessor; @Before public void before() { MockitoAnnotations.initMocks(this); builder = new BackupQueryBuilder(Robolectric.application); } @Test public void shouldBuildQueryForSMS() throws Exception { BackupQueryBuilder.Query query = builder.buildQueryForDataType(DataType.SMS, null, 200); assertThat(query.uri).isEqualTo(Uri.parse("content://sms")); assertThat(query.projection).isNull(); assertThat(query.selection).isEqualTo("date > ? AND type <> ?"); assertThat(query.selectionArgs).isEqualTo(new String[] { "-1", "3"} ); assertThat(query.sortOrder).isEqualTo("date LIMIT 200"); } @Test public void shouldBuildQueryForSMSIncludingContactGroup() throws Exception { ContactGroupIds ids = new ContactGroupIds(); ids.add(1L, 20L); BackupQueryBuilder.Query query = builder.buildQueryForDataType(DataType.SMS, ids, 200); assertThat(query.uri).isEqualTo(Uri.parse("content://sms")); assertThat(query.projection).isNull(); assertThat(query.selection).isEqualTo("date > ? AND type <> ? AND (type = 2 OR person IN (20))"); assertThat(query.selectionArgs).isEqualTo(new String[] { "-1", "3"} ); assertThat(query.sortOrder).isEqualTo("date LIMIT 200"); } @Test public void shouldBuildQueryForMMS() throws Exception { BackupQueryBuilder.Query query = builder.buildQueryForDataType(DataType.MMS, null, 200); assertThat(query.uri).isEqualTo(Uri.parse("content://mms")); assertThat(query.projection).isNull(); assertThat(query.selection).isEqualTo("date > ? AND m_type <> ?"); assertThat(query.selectionArgs).isEqualTo(new String[] { "-1", "134"} ); assertThat(query.sortOrder).isEqualTo("date LIMIT 200"); } @Test public void shouldBuildQueryForMMSWithSyncedDate() throws Exception { long nowInSecs = (long) (System.currentTimeMillis() / 1000.0); DataType.MMS.setMaxSyncedDate(Robolectric.application, nowInSecs); BackupQueryBuilder.Query query = builder.buildQueryForDataType(DataType.MMS, null, 200); assertThat(query.uri).isEqualTo(Uri.parse("content://mms")); assertThat(query.projection).isNull(); assertThat(query.selection).isEqualTo("date > ? AND m_type <> ?"); assertThat(query.selectionArgs).isEqualTo(new String[] { String.valueOf(nowInSecs), "134" }); assertThat(query.sortOrder).isEqualTo("date LIMIT 200"); } @Test public void shouldBuildQueryForCallLog() throws Exception { BackupQueryBuilder.Query query = builder.buildQueryForDataType(DataType.CALLLOG, null, 200); assertThat(query.uri).isEqualTo(Uri.parse("content://call_log/calls")); assertThat(query.projection).isEqualTo(new String[] { "_id", "number", "duration", "date", "type" }); assertThat(query.selection).isEqualTo("date > ?"); assertThat(query.selectionArgs).isEqualTo(new String[] { "-1" } ); assertThat(query.sortOrder).isEqualTo("date LIMIT 200"); } @Test public void shouldBuildMostRecentQueryForSMS() throws Exception { BackupQueryBuilder.Query query = builder.buildMostRecentQueryForDataType(DataType.SMS); assertThat(query.uri).isEqualTo(Uri.parse("content://sms")); assertThat(query.projection).isEqualTo(new String[] { "date" } ); assertThat(query.selection).isEqualTo("type <> ?"); assertThat(query.selectionArgs).isEqualTo(new String[] { "3"} ); assertThat(query.sortOrder).isEqualTo("date DESC LIMIT 1"); } @Test public void shouldBuildMostRecentQueryForMMS() throws Exception { BackupQueryBuilder.Query query = builder.buildMostRecentQueryForDataType(DataType.MMS); assertThat(query.uri).isEqualTo(Uri.parse("content://mms")); assertThat(query.projection).isEqualTo(new String[] { "date" } ); assertThat(query.selection).isNull(); assertThat(query.selectionArgs).isNull(); assertThat(query.sortOrder).isEqualTo("date DESC LIMIT 1"); } @Test public void shouldBuildMostRecentQueryForCallLog() throws Exception { BackupQueryBuilder.Query query = builder.buildMostRecentQueryForDataType(DataType.CALLLOG); assertThat(query.uri).isEqualTo(Uri.parse("content://call_log/calls")); assertThat(query.projection).isEqualTo(new String[] { "date" } ); assertThat(query.selection).isNull(); assertThat(query.selectionArgs).isNull(); assertThat(query.sortOrder).isEqualTo("date DESC LIMIT 1"); } }