package com.todoroo.astrid.subtasks; import com.todoroo.andlib.utility.Preferences; import com.todoroo.astrid.core.PluginServices; import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.TagData; @SuppressWarnings("deprecation") public class SubtasksMigrationTest extends SubtasksTestCase { @Override protected void setUp() throws Exception { super.setUp(); Preferences.clear(SubtasksUpdater.ACTIVE_TASKS_ORDER); } /* Starting basic state (see SubtasksTestCase): * * A * B * C * D * E * F */ private void createBasicMetadata(TagData tagData) { createSubtasksMetadata(tagData, 1, 1, 0); createSubtasksMetadata(tagData, 2, 2, 1); createSubtasksMetadata(tagData, 3, 3, 1); createSubtasksMetadata(tagData, 4, 4, 2); createSubtasksMetadata(tagData, 5, 5, 0); createSubtasksMetadata(tagData, 6, 6, 0); } private void createSubtasksMetadata(TagData tagData, long taskId, long order, int indent) { Metadata m = new Metadata(); m.setValue(Metadata.KEY, SubtasksMetadata.METADATA_KEY); m.setValue(Metadata.TASK, taskId); String tagString = (tagData == null ? SubtasksMetadata.LIST_ACTIVE_TASKS : "td:"+tagData.getId()); m.setValue(SubtasksMetadata.TAG, tagString); m.setValue(SubtasksMetadata.ORDER, order); m.setValue(SubtasksMetadata.INDENT, indent); PluginServices.getMetadataService().save(m); } private void basicTest(TagData tagData) { createBasicMetadata(tagData); SubtasksMetadataMigration migrator = new SubtasksMetadataMigration(); migrator.performMigration(); String newSerializedTree = getSerializedTree(tagData); String expectedSerializedTree = DEFAULT_SERIALIZED_TREE_STRING; assertEquals(expectedSerializedTree, newSerializedTree); } private String getSerializedTree(TagData tagData) { if (tagData == null) return Preferences.getStringValue(SubtasksUpdater.ACTIVE_TASKS_ORDER).replaceAll("\\s", ""); tagData = PluginServices.getTagDataService().fetchById(tagData.getId(), TagData.ID, TagData.TAG_ORDERING); return tagData.getValue(TagData.TAG_ORDERING).replaceAll("\\s", ""); } public void testMigrationForActiveTasks() { basicTest(null); } public void testMigrationForTagData() { TagData td = new TagData(); td.setValue(TagData.NAME, "tag"); PluginServices.getTagDataService().save(td); basicTest(td); } /* Starting advanced state * * For active tasks * * A * B * C * D * E * F * * For tag data * * F * E * B * D * C * A */ private static final String ACTIVE_TASKS_TREE = "[\"-1\", [\"1\", \"2\"], [\"3\", [\"4\", \"5\"], \"6\"]]".replaceAll("\\s", ""); private static final String TAG_DATA_TREE = "[\"-1\", \"6\", [\"5\", \"2\", [\"4\",\"3\"]], \"1\"]".replaceAll("\\s", ""); private void createAdvancedMetadata(TagData tagData) { createSubtasksMetadata(tagData, 6, 1, 0); createSubtasksMetadata(tagData, 5, 2, 0); createSubtasksMetadata(tagData, 2, 3, 1); createSubtasksMetadata(tagData, 4, 4, 1); createSubtasksMetadata(tagData, 3, 5, 2); createSubtasksMetadata(tagData, 1, 6, 0); createSubtasksMetadata(null, 1, 1, 0); createSubtasksMetadata(null, 2, 2, 1); createSubtasksMetadata(null, 3, 3, 0); createSubtasksMetadata(null, 4, 4, 1); createSubtasksMetadata(null, 5, 5, 2); createSubtasksMetadata(null, 6, 6, 1); } public void testMigrationWithBothPresent() { TagData td = new TagData(); td.setValue(TagData.NAME, "tag"); PluginServices.getTagDataService().save(td); createAdvancedMetadata(td); SubtasksMetadataMigration migrator = new SubtasksMetadataMigration(); migrator.performMigration(); assertEquals(TAG_DATA_TREE, getSerializedTree(td)); assertEquals(ACTIVE_TASKS_TREE, getSerializedTree(null)); } }