From ed28990e1eb098aace97ff61372a56e957b2eb5a Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Fri, 16 Nov 2012 17:46:22 -0800 Subject: [PATCH] Improved checking of whether outstanding entries should be recorded; added unit test for ReplayOutstandingEntries --- .../astrid/actfm/sync/messages/NameMaps.java | 9 +++++++++ .../com/todoroo/astrid/dao/TagDataDao.java | 10 ++-------- .../src/com/todoroo/astrid/dao/TaskDao.java | 16 ++-------------- .../todoroo/astrid/sync/NewSyncTestCase.java | 6 +++++- .../todoroo/astrid/sync/SyncMessageTest.java | 19 +++++++++++++++++++ 5 files changed, 37 insertions(+), 23 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/messages/NameMaps.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/messages/NameMaps.java index 511fc8dcc..2b749ab3d 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/messages/NameMaps.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/messages/NameMaps.java @@ -124,6 +124,15 @@ public class NameMaps { return map.get(col); } + public static boolean shouldRecordOutstandingColumnForTable(String table, String column) { + if (TABLE_ID_TASKS.equals(table)) { + return TASK_COLUMN_NAMES_TO_PROPERTIES.containsKey(column); + } else if (TABLE_ID_TAGS.equals(table)) { + return TAG_DATA_COLUMN_NAMES_TO_PROPERTIES.containsKey(column); + } + return false; + } + public static String localColumnNameToServerColumnName(String table, String localColumn) { return mapColumnName(table, localColumn, TASK_COLUMNS_LOCAL_TO_SERVER, TAG_DATA_COLUMNS_LOCAL_TO_SERVER); } diff --git a/astrid/src/com/todoroo/astrid/dao/TagDataDao.java b/astrid/src/com/todoroo/astrid/dao/TagDataDao.java index 2d19825f9..e85d7953a 100644 --- a/astrid/src/com/todoroo/astrid/dao/TagDataDao.java +++ b/astrid/src/com/todoroo/astrid/dao/TagDataDao.java @@ -8,7 +8,7 @@ package com.todoroo.astrid.dao; import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.sql.Criterion; -import com.todoroo.andlib.utility.AndroidUtilities; +import com.todoroo.astrid.actfm.sync.messages.NameMaps; import com.todoroo.astrid.data.TagData; /** @@ -28,15 +28,9 @@ public class TagDataDao extends RemoteModelDao { setDatabase(database); } - private static final String[] IGNORE_OUTSTANDING_COLUMNS = new String[] { - TagData.MODIFICATION_DATE.name, - TagData.UUID.name, - TagData.PUSHED_AT.name, - }; - @Override protected boolean shouldRecordOutstandingEntry(String columnName) { - return AndroidUtilities.indexOf(IGNORE_OUTSTANDING_COLUMNS, columnName) < 0; + return NameMaps.shouldRecordOutstandingColumnForTable(NameMaps.TABLE_ID_TAGS, columnName); } // --- SQL clause generators diff --git a/astrid/src/com/todoroo/astrid/dao/TaskDao.java b/astrid/src/com/todoroo/astrid/dao/TaskDao.java index de74c5ab9..a3ad54c56 100644 --- a/astrid/src/com/todoroo/astrid/dao/TaskDao.java +++ b/astrid/src/com/todoroo/astrid/dao/TaskDao.java @@ -20,9 +20,9 @@ import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Field; import com.todoroo.andlib.sql.Functions; import com.todoroo.andlib.sql.Query; -import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.Preferences; +import com.todoroo.astrid.actfm.sync.messages.NameMaps; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria; import com.todoroo.astrid.data.Task; @@ -315,21 +315,9 @@ public class TaskDao extends RemoteModelDao { Task.RECURRENCE }; - private static final String[] IGNORE_OUTSTANDING_COLUMNS = new String[] { - Task.MODIFICATION_DATE.name, - Task.DETAILS.name, - Task.DETAILS_DATE.name, - Task.CALENDAR_URI.name, - Task.UUID.name, - Task.PUSHED_AT.name, - Task.LAST_SYNC.name, - Task.ESTIMATED_SECONDS.name, - Task.TIMER_START.name, - }; - @Override protected boolean shouldRecordOutstandingEntry(String columnName) { - return AndroidUtilities.indexOf(IGNORE_OUTSTANDING_COLUMNS, columnName) < 0; + return NameMaps.shouldRecordOutstandingColumnForTable(NameMaps.TABLE_ID_TASKS, columnName); } public void saveExistingWithSqlConstraintCheck(Task item) { diff --git a/tests-sync/src/com/todoroo/astrid/sync/NewSyncTestCase.java b/tests-sync/src/com/todoroo/astrid/sync/NewSyncTestCase.java index f394aee69..c12a0f174 100644 --- a/tests-sync/src/com/todoroo/astrid/sync/NewSyncTestCase.java +++ b/tests-sync/src/com/todoroo/astrid/sync/NewSyncTestCase.java @@ -25,6 +25,7 @@ public class NewSyncTestCase extends DatabaseTestCase { protected Task createTask(String title, boolean suppress) { Task task = new Task(); task.setValue(Task.TITLE, title); + task.setValue(Task.IMPORTANCE, SYNC_TASK_IMPORTANCE); if (suppress) task.putTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES, true); @@ -36,8 +37,11 @@ public class NewSyncTestCase extends DatabaseTestCase { return createTask(false); } + public static final String SYNC_TASK_TITLE = "new title"; + public static final int SYNC_TASK_IMPORTANCE = Task.IMPORTANCE_MUST_DO; + protected Task createTask(boolean suppress) { - return createTask("new title", suppress); + return createTask(SYNC_TASK_TITLE, suppress); } protected TagData createTagData(String name, boolean suppress) { diff --git a/tests-sync/src/com/todoroo/astrid/sync/SyncMessageTest.java b/tests-sync/src/com/todoroo/astrid/sync/SyncMessageTest.java index a8abd6847..3ad68546d 100644 --- a/tests-sync/src/com/todoroo/astrid/sync/SyncMessageTest.java +++ b/tests-sync/src/com/todoroo/astrid/sync/SyncMessageTest.java @@ -7,9 +7,13 @@ import org.json.JSONObject; import com.todoroo.astrid.actfm.sync.ActFmSyncThread.ModelType; import com.todoroo.astrid.actfm.sync.messages.ChangesHappened; import com.todoroo.astrid.actfm.sync.messages.NameMaps; +import com.todoroo.astrid.actfm.sync.messages.ReplayOutstandingEntries; import com.todoroo.astrid.actfm.sync.messages.ServerToClientMessage; import com.todoroo.astrid.data.RemoteModel; +import com.todoroo.astrid.data.SyncFlags; import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.data.TaskOutstanding; + public class SyncMessageTest extends NewSyncTestCase { @@ -64,4 +68,19 @@ public class SyncMessageTest extends NewSyncTestCase { } } + public void testReplayOutstandingEntries() { + Task t = createTask(); + + t.setValue(Task.TITLE, "change title"); + t.setValue(Task.IMPORTANCE, Task.IMPORTANCE_NONE); + t.putTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES, true); + taskDao.save(t); + + new ReplayOutstandingEntries(Task.class, NameMaps.TABLE_ID_TASKS, taskDao, taskOutstandingDao).execute(); + + t = taskDao.fetch(t.getId(), Task.TITLE, Task.IMPORTANCE); + assertEquals(SYNC_TASK_TITLE, t.getValue(Task.TITLE)); + assertEquals(SYNC_TASK_IMPORTANCE, t.getValue(Task.IMPORTANCE).intValue()); + } + }