mirror of https://github.com/tasks/tasks
Fixed unit tests (except for the format strings ones)
parent
2773f7ef8e
commit
0797c7041c
@ -1,328 +0,0 @@
|
||||
package com.todoroo.astrid.repeats;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import android.content.Intent;
|
||||
|
||||
import com.google.ical.values.Frequency;
|
||||
import com.google.ical.values.RRule;
|
||||
import com.timsu.astrid.R;
|
||||
import com.todoroo.andlib.data.TodorooCursor;
|
||||
import com.todoroo.andlib.service.Autowired;
|
||||
import com.todoroo.andlib.sql.Query;
|
||||
import com.todoroo.andlib.utility.DateUtilities;
|
||||
import com.todoroo.andlib.utility.Preferences;
|
||||
import com.todoroo.astrid.api.AstridApiConstants;
|
||||
import com.todoroo.astrid.dao.MetadataDao;
|
||||
import com.todoroo.astrid.dao.TaskDao;
|
||||
import com.todoroo.astrid.data.Metadata;
|
||||
import com.todoroo.astrid.data.Task;
|
||||
import com.todoroo.astrid.test.DatabaseTestCase;
|
||||
import com.todoroo.astrid.utility.Flags;
|
||||
|
||||
public class RepeatTests extends DatabaseTestCase {
|
||||
|
||||
@Autowired
|
||||
TaskDao taskDao;
|
||||
|
||||
@Autowired
|
||||
MetadataDao metadataDao;
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
Preferences.setStringFromInteger(R.string.p_default_urgency_key, 0);
|
||||
RepeatTaskCompleteListener.setSkipActFmCheck(true);
|
||||
}
|
||||
|
||||
/** test that completing a task w/ no repeats does nothing */
|
||||
public void testNoRepeats() throws Exception{
|
||||
Task task = new Task();
|
||||
task.setValue(Task.TITLE, "nothing");
|
||||
taskDao.save(task);
|
||||
|
||||
task.setValue(Task.COMPLETION_DATE, DateUtilities.now());
|
||||
saveAndTriggerRepeatListener(task);
|
||||
TodorooCursor<Task> cursor = taskDao.query(Query.select(Task.ID));
|
||||
try {
|
||||
assertEquals(1, cursor.getCount());
|
||||
} finally {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
|
||||
private void saveAndTriggerRepeatListener(Task task) {
|
||||
Flags.set(Flags.ACTFM_SUPPRESS_SYNC);
|
||||
if(task.isSaved())
|
||||
taskDao.saveExisting(task);
|
||||
else
|
||||
taskDao.createNew(task);
|
||||
|
||||
Intent intent = new Intent(AstridApiConstants.BROADCAST_EVENT_TASK_COMPLETED);
|
||||
intent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, task.getId());
|
||||
new RepeatTaskCompleteListener().onReceive(getContext(), intent);
|
||||
}
|
||||
|
||||
/** test daily repeat from due date, but with no due date set */
|
||||
public void testDailyWithNoDueDate() throws Exception {
|
||||
Task task = new Task();
|
||||
task.setValue(Task.TITLE, "daily");
|
||||
RRule rrule = new RRule();
|
||||
rrule.setInterval(5);
|
||||
rrule.setFreq(Frequency.DAILY);
|
||||
task.setValue(Task.RECURRENCE, rrule.toIcal());
|
||||
taskDao.save(task);
|
||||
|
||||
task.setValue(Task.COMPLETION_DATE, DateUtilities.now());
|
||||
saveAndTriggerRepeatListener(task);
|
||||
|
||||
TodorooCursor<Task> cursor = taskDao.query(Query.select(Task.PROPERTIES));
|
||||
try {
|
||||
assertEquals(2, cursor.getCount());
|
||||
cursor.moveToFirst();
|
||||
task.readFromCursor(cursor);
|
||||
|
||||
assertEquals("daily", task.getValue(Task.TITLE));
|
||||
assertFalse(task.hasDueDate());
|
||||
assertTrue(task.isCompleted());
|
||||
|
||||
cursor.moveToNext();
|
||||
task.readFromCursor(cursor);
|
||||
assertEquals("daily", task.getValue(Task.TITLE));
|
||||
assertFalse(task.isCompleted());
|
||||
long dueDate = task.getValue(Task.DUE_DATE);
|
||||
assertFalse(task.hasDueTime());
|
||||
assertTrue("Due date is '" + new Date(dueDate) + "', expected more like '" +
|
||||
new Date(DateUtilities.now() + 5 * DateUtilities.ONE_DAY) + "'",
|
||||
Math.abs(dueDate - DateUtilities.now() - 5 * DateUtilities.ONE_DAY) < DateUtilities.ONE_DAY);
|
||||
} finally {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
|
||||
/** test weekly repeat from due date, with due date & time set */
|
||||
public void testWeeklyWithDueDate() throws Exception {
|
||||
Task task = new Task();
|
||||
task.setValue(Task.TITLE, "weekly");
|
||||
RRule rrule = new RRule();
|
||||
rrule.setInterval(1);
|
||||
rrule.setFreq(Frequency.WEEKLY);
|
||||
task.setValue(Task.RECURRENCE, rrule.toIcal());
|
||||
long originalDueDate = (DateUtilities.now() - 3 * DateUtilities.ONE_DAY) / 1000L * 1000L;
|
||||
task.setValue(Task.DUE_DATE, Task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME, originalDueDate));
|
||||
taskDao.save(task);
|
||||
|
||||
task.setValue(Task.COMPLETION_DATE, DateUtilities.now());
|
||||
saveAndTriggerRepeatListener(task);
|
||||
|
||||
TodorooCursor<Task> cursor = taskDao.query(Query.select(Task.PROPERTIES));
|
||||
try {
|
||||
assertEquals(2, cursor.getCount());
|
||||
cursor.moveToFirst();
|
||||
task.readFromCursor(cursor);
|
||||
|
||||
assertEquals("weekly", task.getValue(Task.TITLE));
|
||||
assertEquals(originalDueDate, (long)task.getValue(Task.DUE_DATE));
|
||||
assertTrue(task.isCompleted());
|
||||
|
||||
cursor.moveToNext();
|
||||
task.readFromCursor(cursor);
|
||||
assertEquals("weekly", task.getValue(Task.TITLE));
|
||||
assertFalse(task.isCompleted());
|
||||
long dueDate = task.getValue(Task.DUE_DATE);
|
||||
assertTrue(task.hasDueTime());
|
||||
assertEquals("Due date is '" + new Date(dueDate) + "', expected exactly '" +
|
||||
new Date(originalDueDate + DateUtilities.ONE_WEEK) + "': ",
|
||||
originalDueDate + DateUtilities.ONE_WEEK, dueDate);
|
||||
} finally {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
|
||||
/** test hourly repeat from due date, with due date but no time */
|
||||
public void testHourlyFromDueDate() throws Exception {
|
||||
Task task = new Task();
|
||||
task.setValue(Task.TITLE, "hourly");
|
||||
RRule rrule = new RRule();
|
||||
rrule.setInterval(4);
|
||||
rrule.setFreq(Frequency.HOURLY);
|
||||
task.setValue(Task.RECURRENCE, rrule.toIcal());
|
||||
long originalDueDate = (DateUtilities.now() + DateUtilities.ONE_DAY) / 1000L * 1000L;
|
||||
task.setValue(Task.DUE_DATE, Task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME, originalDueDate));
|
||||
taskDao.save(task);
|
||||
|
||||
task.setValue(Task.COMPLETION_DATE, DateUtilities.now());
|
||||
saveAndTriggerRepeatListener(task);
|
||||
|
||||
TodorooCursor<Task> cursor = taskDao.query(Query.select(Task.PROPERTIES));
|
||||
try {
|
||||
assertEquals(2, cursor.getCount());
|
||||
cursor.moveToFirst();
|
||||
task.readFromCursor(cursor);
|
||||
|
||||
assertEquals(originalDueDate, (long)task.getValue(Task.DUE_DATE));
|
||||
assertTrue(task.isCompleted());
|
||||
|
||||
cursor.moveToNext();
|
||||
task.readFromCursor(cursor);
|
||||
assertFalse(task.isCompleted());
|
||||
long dueDate = task.getValue(Task.DUE_DATE);
|
||||
assertTrue(task.hasDueTime());
|
||||
assertEquals("Due date is '" + new Date(dueDate) + "', expected exactly '" +
|
||||
new Date(originalDueDate + 4 * DateUtilities.ONE_HOUR) + "'",
|
||||
originalDueDate + 4 * DateUtilities.ONE_HOUR, dueDate);
|
||||
} finally {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
|
||||
public void testMinutelyFromDueDate() throws Exception {
|
||||
Task task = new Task();
|
||||
task.setValue(Task.TITLE, "minutely");
|
||||
RRule rrule = new RRule();
|
||||
rrule.setInterval(30);
|
||||
rrule.setFreq(Frequency.MINUTELY);
|
||||
task.setValue(Task.RECURRENCE, rrule.toIcal());
|
||||
long originalDueDate = (DateUtilities.now() + DateUtilities.ONE_DAY) / 1000L * 1000L;
|
||||
task.setValue(Task.DUE_DATE, Task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME, originalDueDate));
|
||||
taskDao.save(task);
|
||||
|
||||
task.setValue(Task.COMPLETION_DATE, DateUtilities.now());
|
||||
saveAndTriggerRepeatListener(task);
|
||||
|
||||
TodorooCursor<Task> cursor = taskDao.query(Query.select(Task.PROPERTIES));
|
||||
try {
|
||||
assertEquals(2, cursor.getCount());
|
||||
cursor.moveToFirst();
|
||||
task.readFromCursor(cursor);
|
||||
|
||||
assertEquals(originalDueDate, (long)task.getValue(Task.DUE_DATE));
|
||||
assertTrue(task.isCompleted());
|
||||
|
||||
cursor.moveToNext();
|
||||
task.readFromCursor(cursor);
|
||||
assertFalse(task.isCompleted());
|
||||
long dueDate = task.getValue(Task.DUE_DATE);
|
||||
assertTrue(task.hasDueTime());
|
||||
assertEquals("Due date is '" + new Date(dueDate) + "', expected exactly '" +
|
||||
new Date(originalDueDate + 4 * DateUtilities.ONE_HOUR) + "'",
|
||||
originalDueDate + 30 * DateUtilities.ONE_MINUTE, dueDate);
|
||||
} finally {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
|
||||
/** test after completion flag */
|
||||
public void testRepeatAfterComplete() throws Exception {
|
||||
// create a weekly task due a couple days in the past, but with the 'after completion'
|
||||
// specified. should be due 7 days from now
|
||||
Task task = new Task();
|
||||
task.setValue(Task.TITLE, "afterComplete");
|
||||
RRule rrule = new RRule();
|
||||
rrule.setInterval(1);
|
||||
rrule.setFreq(Frequency.WEEKLY);
|
||||
task.setValue(Task.RECURRENCE, rrule.toIcal());
|
||||
long originalDueDate = (DateUtilities.now() - 3 * DateUtilities.ONE_DAY) / 1000L * 1000L;
|
||||
task.setValue(Task.DUE_DATE, Task.createDueDate(Task.URGENCY_SPECIFIC_DAY, originalDueDate));
|
||||
task.setFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION, true);
|
||||
taskDao.save(task);
|
||||
|
||||
task.setValue(Task.COMPLETION_DATE, DateUtilities.now());
|
||||
saveAndTriggerRepeatListener(task);
|
||||
|
||||
TodorooCursor<Task> cursor = taskDao.query(Query.select(Task.PROPERTIES));
|
||||
try {
|
||||
assertEquals(2, cursor.getCount());
|
||||
cursor.moveToFirst();
|
||||
task.readFromCursor(cursor);
|
||||
|
||||
assertTrue(task.hasDueDate());
|
||||
assertTrue(task.isCompleted());
|
||||
|
||||
cursor.moveToNext();
|
||||
task.readFromCursor(cursor);
|
||||
assertFalse(task.isCompleted());
|
||||
long dueDate = task.getValue(Task.DUE_DATE);
|
||||
assertFalse(task.hasDueTime());
|
||||
|
||||
assertTrue("Due date is '" + new Date(dueDate) + "', expected more like '" +
|
||||
new Date(DateUtilities.now() + DateUtilities.ONE_WEEK) + "'",
|
||||
Math.abs(dueDate - DateUtilities.now() - DateUtilities.ONE_WEEK) < DateUtilities.ONE_DAY);
|
||||
} finally {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
|
||||
/** test that metadata is transferred to new task */
|
||||
public void testMetadataIsCopied() throws Exception {
|
||||
Task task = new Task();
|
||||
task.setValue(Task.TITLE, "meta data test");
|
||||
RRule rrule = new RRule();
|
||||
rrule.setInterval(5);
|
||||
rrule.setFreq(Frequency.DAILY);
|
||||
task.setValue(Task.RECURRENCE, rrule.toIcal());
|
||||
taskDao.save(task);
|
||||
|
||||
Metadata metadata = new Metadata();
|
||||
metadata.setValue(Metadata.KEY, "special");
|
||||
metadata.setValue(Metadata.VALUE1, "sauce");
|
||||
metadata.setValue(Metadata.TASK, task.getId());
|
||||
metadataDao.persist(metadata);
|
||||
|
||||
task.setValue(Task.COMPLETION_DATE, DateUtilities.now());
|
||||
saveAndTriggerRepeatListener(task);
|
||||
|
||||
TodorooCursor<Metadata> cursor = metadataDao.query(Query.select(Metadata.TASK));
|
||||
try {
|
||||
assertEquals(2, cursor.getCount());
|
||||
cursor.moveToFirst();
|
||||
metadata.readFromCursor(cursor);
|
||||
|
||||
assertSame(task.getId(), (long)metadata.getValue(Metadata.TASK));
|
||||
|
||||
cursor.moveToNext();
|
||||
metadata.readFromCursor(cursor);
|
||||
assertNotSame(task.getId(), (long)metadata.getValue(Metadata.TASK));
|
||||
} finally {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
|
||||
/** test hide unitl date is repeated */
|
||||
public void testHideUntilRepeated() throws Exception {
|
||||
Task task = new Task();
|
||||
task.setValue(Task.TITLE, "hideUntil");
|
||||
RRule rrule = new RRule();
|
||||
rrule.setInterval(1);
|
||||
rrule.setFreq(Frequency.WEEKLY);
|
||||
task.setValue(Task.RECURRENCE, rrule.toIcal());
|
||||
task.setValue(Task.DUE_DATE, Task.createDueDate(Task.URGENCY_TODAY, 0));
|
||||
task.setValue(Task.HIDE_UNTIL, task.createHideUntil(Task.HIDE_UNTIL_DAY_BEFORE, 0));
|
||||
taskDao.save(task);
|
||||
|
||||
task.setValue(Task.COMPLETION_DATE, DateUtilities.now());
|
||||
saveAndTriggerRepeatListener(task);
|
||||
|
||||
TodorooCursor<Task> cursor = taskDao.query(Query.select(Task.PROPERTIES));
|
||||
try {
|
||||
assertEquals(2, cursor.getCount());
|
||||
cursor.moveToFirst();
|
||||
task.readFromCursor(cursor);
|
||||
|
||||
assertTrue(task.hasDueDate());
|
||||
assertTrue(task.isCompleted());
|
||||
assertFalse(task.isHidden());
|
||||
|
||||
cursor.moveToNext();
|
||||
task.readFromCursor(cursor);
|
||||
assertFalse(task.isCompleted());
|
||||
assertTrue(task.isHidden());
|
||||
long date = task.getValue(Task.HIDE_UNTIL);
|
||||
assertTrue("Hide Until date is '" + new Date(date) + "', expected more like '" +
|
||||
new Date(DateUtilities.now() + 6 * DateUtilities.ONE_DAY) + "'",
|
||||
Math.abs(date - DateUtilities.now() - 6 * DateUtilities.ONE_DAY) < DateUtilities.ONE_DAY);
|
||||
} finally {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue