package com.zegoggles.smssync.contacts;
import android.content.ContentResolver;
import android.database.MatrixCursor;
import android.provider.ContactsContract;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import java.util.Map;
import static com.zegoggles.smssync.contacts.ContactAccessor.EVERYBODY_ID;
import static org.fest.assertions.api.Assertions.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks;
@RunWith(RobolectricTestRunner.class)
public class ContactAccessorPost20Test {
ContactAccessorPost20 accessor;
@Mock ContentResolver resolver;
@Before public void before() {
initMocks(this);
accessor = new ContactAccessorPost20();
}
@Test public void shouldAccessContactsWithEverybody() throws Exception {
Map<Integer,Group> groups = accessor.getGroups(resolver, Robolectric.application.getResources());
assertThat(groups).hasSize(1);
Group everybody = groups.get(EVERYBODY_ID);
assertThat(everybody.title).isEqualTo("Everybody");
assertThat(everybody._id).isEqualTo(EVERYBODY_ID);
assertThat(everybody.count).isEqualTo(0);
verify(resolver).query(eq(ContactsContract.Groups.CONTENT_SUMMARY_URI),
any(String[].class),
any(String.class),
any(String[].class),
eq(ContactsContract.Groups.TITLE + " ASC"));
}
@Test
public void shouldGetGroupsFromResolver() throws Exception {
MatrixCursor cursor = new MatrixCursor(
new String[]{ContactsContract.Groups._ID, ContactsContract.Groups.TITLE, ContactsContract.Groups.SUMMARY_COUNT}
);
cursor.addRow(new Object[] { 23, "Testing", 42 });
when(resolver.query(eq(ContactsContract.Groups.CONTENT_SUMMARY_URI),
any(String[].class),
any(String.class),
any(String[].class),
eq(ContactsContract.Groups.TITLE + " ASC"))).thenReturn(
cursor
);
Map<Integer,Group> groups = accessor.getGroups(resolver, Robolectric.application.getResources());
assertThat(groups).hasSize(2);
Group everybody = groups.get(23);
assertThat(everybody.title).isEqualTo("Testing");
assertThat(everybody._id).isEqualTo(23);
assertThat(everybody.count).isEqualTo(42);
}
@Test
public void shouldGetGroupContactIdsEmpty() throws Exception {
ContactGroupIds ids = accessor.getGroupContactIds(resolver, new ContactGroup(1));
assertThat(ids.isEmpty()).isTrue();
verify(resolver).query(
eq(ContactsContract.Data.CONTENT_URI),
eq(new String[]{ContactsContract.CommonDataKinds.GroupMembership.CONTACT_ID, ContactsContract.CommonDataKinds.GroupMembership.RAW_CONTACT_ID,
ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID}),
eq(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID + " = ? AND " + ContactsContract.CommonDataKinds.GroupMembership.MIMETYPE + " = ?"),
eq(new String[]{String.valueOf(1), ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE}),
any(String.class)
);
}
@Test public void shouldGetGroupContactIdsFromResolver() throws Exception {
MatrixCursor cursor = new MatrixCursor(
new String[] {
ContactsContract.CommonDataKinds.GroupMembership.CONTACT_ID,
ContactsContract.CommonDataKinds.GroupMembership.RAW_CONTACT_ID,
ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID
});
cursor.addRow(new Object[] { 123L, 256L, 789L });
when(resolver.query(
eq(ContactsContract.Data.CONTENT_URI),
any(String[].class),
any(String.class),
any(String[].class),
any(String.class))
).thenReturn(cursor);
ContactGroupIds ids = accessor.getGroupContactIds(resolver, new ContactGroup(1));
assertThat(ids.getIds().contains(123L));
assertThat(ids.getRawIds().contains(256L));
}
}