package com.zegoggles.smssync.calendar;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.MatrixCursor;
import android.net.Uri;
import android.os.Build;
import android.provider.CalendarContract;
import android.text.format.Time;
import org.fest.assertions.data.MapEntry;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import java.util.Date;
import java.util.Map;
import static android.provider.CalendarContract.Events;
import static org.fest.assertions.api.Assertions.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
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 CalendarAccessorPost40Test {
CalendarAccessor accessor;
@Mock ContentResolver resolver;
@Before public void before() {
initMocks(this);
accessor = new CalendarAccessorPost40(resolver);
}
@Test
public void shouldEnableSync() throws Exception {
when(resolver.update(eq(Uri.parse("content://com.android.calendar/calendars/123")),
any(ContentValues.class),
anyString(),
any(String[].class)))
.thenReturn(1);
assertThat(accessor.enableSync(123)).isTrue();
}
@Test
@Config(reportSdk = Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public void shouldAddEntry() throws Exception {
ArgumentCaptor<Uri> uri = ArgumentCaptor.forClass(Uri.class);
ArgumentCaptor<ContentValues> values = ArgumentCaptor.forClass(ContentValues.class);
Date when = new Date();
accessor.addEntry(
12,
when, 100, "Title", "Desc");
verify(resolver).insert(uri.capture(), values.capture());
assertThat(uri.getValue().toString()).isEqualTo("content://com.android.calendar/events");
ContentValues cv = values.getValue();
assertThat(cv.getAsString(Events.TITLE)).isEqualTo("Title");
assertThat(cv.getAsString(Events.DESCRIPTION)).isEqualTo("Desc");
assertThat(cv.getAsLong(Events.DTSTART)).isEqualTo(when.getTime());
assertThat(cv.getAsLong(Events.DTEND)).isGreaterThan(when.getTime());
assertThat(cv.getAsInteger(Events.ACCESS_LEVEL)).isEqualTo(CalendarContract.Events.ACCESS_DEFAULT);
assertThat(cv.getAsInteger(Events.STATUS)).isEqualTo(CalendarContract.Events.STATUS_CONFIRMED);
assertThat(cv.getAsLong(Events.CALENDAR_ID)).isEqualTo(12L);
assertThat(cv.getAsString(Events.EVENT_TIMEZONE)).isEqualTo(Time.getCurrentTimezone());
}
@Test
public void shouldGetCalendars() throws Exception {
MatrixCursor cursor = new MatrixCursor(new String[] { "_id", "name", "sync_events" } );
cursor.addRow(new Object[] { "12", "Testing", 1 });
when(resolver.query(eq(CalendarContract.Calendars.CONTENT_URI), any(String[].class),
any(String.class),
any(String[].class),
eq(CalendarContract.Calendars.NAME + " ASC"))).thenReturn(
cursor
);
Map<String, String> calendars = accessor.getCalendars();
assertThat(calendars).hasSize(1);
assertThat(calendars).contains(MapEntry.entry("12", "Testing"));
}
}