mirror of https://github.com/tasks/tasks
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
151 lines
4.5 KiB
Java
151 lines
4.5 KiB
Java
package com.todoroo.astrid.sync;
|
|
|
|
import android.text.TextUtils;
|
|
|
|
import com.todoroo.andlib.data.Property;
|
|
import com.todoroo.andlib.data.Table;
|
|
import com.todoroo.andlib.data.TodorooCursor;
|
|
import com.todoroo.andlib.service.Autowired;
|
|
import com.todoroo.andlib.sql.Query;
|
|
import com.todoroo.astrid.dao.MetadataDao;
|
|
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
|
|
import com.todoroo.astrid.dao.RemoteModelDao;
|
|
import com.todoroo.astrid.data.Metadata;
|
|
import com.todoroo.astrid.data.RemoteModel;
|
|
import com.todoroo.astrid.data.TagData;
|
|
import com.todoroo.astrid.data.Task;
|
|
import com.todoroo.astrid.tags.Astrid44SyncMigrator;
|
|
import com.todoroo.astrid.tags.TagMetadata;
|
|
|
|
public class Astrid44MigrationTest extends NewSyncTestCase {
|
|
|
|
@Autowired
|
|
private MetadataDao metadataDao;
|
|
|
|
public void testAstrid44Migration() {
|
|
setupOldDatabase();
|
|
new Astrid44SyncMigrator().performMigration();
|
|
assertAllModelsHaveRemoteId();
|
|
assertAllTagsHaveTagData();
|
|
assertAllMetadataHasAllFields();
|
|
}
|
|
|
|
private void setupOldDatabase() {
|
|
// Init 5 unsynced tasks and tags
|
|
for (int i = 1; i <= 5; i++) {
|
|
Task task = createTask("Task " + i);
|
|
task.setValue(Task.REMOTE_ID, null);
|
|
taskDao.save(task);
|
|
|
|
TagData tag = createTagData("Tag " + i);
|
|
tag.setValue(TagData.REMOTE_ID, null);
|
|
tagDataDao.saveExisting(tag);
|
|
}
|
|
|
|
Metadata m = new Metadata();
|
|
m.setValue(Metadata.KEY, TagMetadata.KEY);
|
|
m.setValue(Metadata.TASK, 1L);
|
|
m.setValue(TagMetadata.TAG_NAME, "Tag 1");
|
|
metadataDao.createNew(m);
|
|
m.clear();
|
|
|
|
m.setValue(Metadata.KEY, TagMetadata.KEY);
|
|
m.setValue(Metadata.TASK, 2L);
|
|
m.setValue(TagMetadata.TAG_NAME, "New tag");
|
|
metadataDao.createNew(m);
|
|
m.clear();
|
|
|
|
m.setValue(Metadata.KEY, TagMetadata.KEY);
|
|
m.setValue(Metadata.TASK, 3L);
|
|
m.setValue(TagMetadata.TAG_NAME, "Tag 3");
|
|
metadataDao.createNew(m);
|
|
m.clear();
|
|
|
|
m.setValue(Metadata.KEY, TagMetadata.KEY);
|
|
m.setValue(Metadata.TASK, 3L);
|
|
m.setValue(TagMetadata.TAG_NAME, "Tag 4");
|
|
metadataDao.createNew(m);
|
|
m.clear();
|
|
|
|
m.setValue(Metadata.KEY, TagMetadata.KEY);
|
|
m.setValue(Metadata.TASK, 5L);
|
|
m.setValue(TagMetadata.TAG_NAME, "Tag 1");
|
|
metadataDao.createNew(m);
|
|
m.clear();
|
|
|
|
m.setValue(Metadata.KEY, TagMetadata.KEY);
|
|
m.setValue(Metadata.TASK, 5L);
|
|
m.setValue(TagMetadata.TAG_NAME, "Tag 5");
|
|
metadataDao.createNew(m);
|
|
|
|
m.setValue(Metadata.KEY, TagMetadata.KEY);
|
|
m.setValue(Metadata.TASK, 5L);
|
|
m.setValue(TagMetadata.TAG_NAME, "New tag 2");
|
|
metadataDao.createNew(m);
|
|
|
|
// State (task: tags)
|
|
// Task 1: Tag 1
|
|
// Task 2: New tag
|
|
// Task 3: Tag 3, Tag 4
|
|
// Task 4: (nothing)
|
|
// Task 5: Tag 5, New tag 2
|
|
}
|
|
|
|
private void assertAllModelsHaveRemoteId() {
|
|
assertRemoteIds(Task.TABLE, new Task(), taskDao, Task.ID, Task.REMOTE_ID);
|
|
assertRemoteIds(TagData.TABLE, new TagData(), tagDataDao, TagData.ID, TagData.REMOTE_ID);
|
|
}
|
|
|
|
private <TYPE extends RemoteModel> void assertRemoteIds(Table table, TYPE instance, RemoteModelDao<TYPE> dao, Property<?>... properties) {
|
|
TodorooCursor<TYPE> cursor = dao.query(Query.select(properties).from(table));
|
|
try {
|
|
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
|
|
instance.clear();
|
|
instance.readPropertiesFromCursor(cursor);
|
|
Long remoteId = instance.getValue(RemoteModel.REMOTE_ID_PROPERTY);
|
|
if (remoteId == null || remoteId == 0) {
|
|
fail(instance.getClass().getName() + instance.getId() + " didn't have a remote id");
|
|
}
|
|
}
|
|
} finally {
|
|
cursor.close();
|
|
}
|
|
}
|
|
|
|
private void assertAllTagsHaveTagData() {
|
|
for (int i = 1; i <= 5; i++) {
|
|
String name = "Tag " + i;
|
|
assertTagForName(name);
|
|
}
|
|
assertTagForName("New tag");
|
|
assertTagForName("New tag 2");
|
|
}
|
|
|
|
private void assertTagForName(String name) {
|
|
TodorooCursor<TagData> tagData = tagDataDao.query(Query.select(TagData.NAME).where(TagData.NAME.eq(name)));
|
|
try {
|
|
assertEquals(tagData.getCount(), 1);
|
|
} finally {
|
|
tagData.close();
|
|
}
|
|
}
|
|
|
|
private void assertAllMetadataHasAllFields() {
|
|
TodorooCursor<Metadata> tagMetadata = metadataDao.query(Query.select(Metadata.PROPERTIES)
|
|
.where(MetadataCriteria.withKey(TagMetadata.KEY)));
|
|
try {
|
|
assertEquals(tagMetadata.getCount(), 7);
|
|
Metadata m = new Metadata();
|
|
for (tagMetadata.moveToFirst(); !tagMetadata.isAfterLast(); tagMetadata.moveToNext()) {
|
|
m.readFromCursor(tagMetadata);
|
|
assertTrue(!TextUtils.isEmpty(m.getValue(TagMetadata.TAG_NAME)));
|
|
assertTrue(m.getValue(TagMetadata.TASK_UUID) != 0);
|
|
assertTrue(m.getValue(TagMetadata.TAG_UUID) != 0);
|
|
}
|
|
} finally {
|
|
tagMetadata.close();
|
|
}
|
|
}
|
|
|
|
}
|