package com.plusonelabs.calendar; import android.test.InstrumentationTestCase; import com.plusonelabs.calendar.calendar.CalendarQueryResultsStorage; import com.plusonelabs.calendar.calendar.MockCalendarContentProvider; import com.plusonelabs.calendar.prefs.ApplicationPreferences; import com.plusonelabs.calendar.widget.CalendarEntry; import org.joda.time.DateTime; import org.json.JSONException; import java.io.IOException; /** * @author yvolk@yurivolkov.com */ public class BirthdayTest extends InstrumentationTestCase { private static final String TAG = BirthdayTest.class.getSimpleName(); private MockCalendarContentProvider provider = null; private EventRemoteViewsFactory factory = null; @Override protected void setUp() throws Exception { super.setUp(); provider = MockCalendarContentProvider.getContentProvider(this); factory = new EventRemoteViewsFactory(provider.getContext(), provider.getWidgetId()); } @Override protected void tearDown() throws Exception { provider.tearDown(); super.tearDown(); } public void testBirthdayOneDayOnly() throws IOException, JSONException { CalendarQueryResultsStorage inputs = provider.loadResults(this.getInstrumentation().getContext(), com.plusonelabs.calendar.tests.R.raw.birthday); provider.startEditing(); ApplicationPreferences.setEventsEnded(provider.getContext(), EndedSomeTimeAgo.NONE); ApplicationPreferences.setShowPastEventsWithDefaultColor(provider.getContext(), false); ApplicationPreferences.setEventRange(provider.getContext(), 30); provider.saveSettings(); playAtOneTime(inputs, dateTime(2015, 8, 1, 17, 0), 0); playAtOneTime(inputs, dateTime(2015, 8, 9, 23, 59), 0); playAtOneTime(inputs, dateTime(2015, 8, 10, 0, 0).plusMillis(1), 2); playAtOneTime(inputs, dateTime(2015, 8, 10, 0, 1), 2); playAtOneTime(inputs, dateTime(2015, 9, 8, 17, 0), 2); playAtOneTime(inputs, dateTime(2015, 9, 8, 23, 30), 2); playAtOneTime(inputs, dateTime(2015, 9, 9, 0, 30), 2); playAtOneTime(inputs, dateTime(2015, 9, 9, 11, 0), 2); playAtOneTime(inputs, dateTime(2015, 9, 9, 17, 0), 2); playAtOneTime(inputs, dateTime(2015, 9, 9, 23, 30), 2); playAtOneTime(inputs, dateTime(2015, 9, 10, 0, 30), 0); playAtOneTime(inputs, dateTime(2015, 9, 10, 11, 0), 0); ApplicationPreferences.setEventsEnded(provider.getContext(), EndedSomeTimeAgo.ONE_HOUR); provider.saveSettings(); playAtOneTime(inputs, dateTime(2015, 9, 10, 0, 30), 2); playAtOneTime(inputs, dateTime(2015, 9, 10, 1, 30), 0); ApplicationPreferences.setEventsEnded(provider.getContext(), EndedSomeTimeAgo.TODAY); provider.saveSettings(); playAtOneTime(inputs, dateTime(2015, 9, 10, 1, 30), 0); ApplicationPreferences.setEventsEnded(provider.getContext(), EndedSomeTimeAgo.FOUR_HOURS); provider.saveSettings(); playAtOneTime(inputs, dateTime(2015, 9, 10, 1, 30), 2); playAtOneTime(inputs, dateTime(2015, 9, 10, 3, 59), 2); playAtOneTime(inputs, dateTime(2015, 9, 10, 4, 0), 0); ApplicationPreferences.setEventsEnded(provider.getContext(), EndedSomeTimeAgo.YESTERDAY); provider.saveSettings(); playAtOneTime(inputs, dateTime(2015, 9, 10, 4, 0), 2); playAtOneTime(inputs, dateTime(2015, 9, 10, 11, 0), 2); playAtOneTime(inputs, dateTime(2015, 9, 10, 17, 0), 2); playAtOneTime(inputs, dateTime(2015, 9, 10, 23, 30), 2); playAtOneTime(inputs, dateTime(2015, 9, 11, 0, 0), 0); playAtOneTime(inputs, dateTime(2015, 9, 11, 0, 30), 0); ApplicationPreferences.setShowPastEventsWithDefaultColor(provider.getContext(), true); provider.saveSettings(); playAtOneTime(inputs, dateTime(2015, 9, 11, 0, 30), 0); // TODO: This doesn't work yet. We need to inject a MockCalendarContentProvider deeper, // so it could work in a normal Context also provider.refreshWidget(); } private DateTime dateTime( int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minuteOfHour) { return new DateTime(year, monthOfYear, dayOfMonth, hourOfDay, minuteOfHour, 0, 0, provider.getSettings().getTimeZone()); } private void playAtOneTime(CalendarQueryResultsStorage inputs, DateTime now, int numberOfEntriesExpected) { provider.addResults(inputs.getResults()); DateUtil.setNow(now); factory.onDataSetChanged(); factory.logWidgetEntries(TAG); assertEquals(numberOfEntriesExpected, factory.getWidgetEntries().size()); if (numberOfEntriesExpected > 0) { CalendarEntry birthday = (CalendarEntry) factory.getWidgetEntries().get(1); assertEquals(9, birthday.getStartDate().dayOfMonth().get()); assertEquals(0, birthday.getStartDate().hourOfDay().get()); assertEquals(0, birthday.getStartDate().minuteOfHour().get()); assertEquals(0, birthday.getStartDate().millisOfDay().get()); assertEquals(true, birthday.isAllDay()); } } }