Made significant progress getting upgrade tests to pass.

pull/14/head
Tim Su 16 years ago
parent cd43ffa0e9
commit a1b12d15ef

@ -132,8 +132,9 @@ abstract public class AbstractDatabase {
* Close the database if it has been opened previously * Close the database if it has been opened previously
*/ */
public synchronized final void close() { public synchronized final void close() {
if(database != null) if(database != null) {
database.close(); database.close();
}
database = null; database = null;
} }

@ -152,7 +152,8 @@ public abstract class AbstractModel implements Parcelable {
/** /**
* Utility method to get the identifier of the model, if it exists. * Utility method to get the identifier of the model, if it exists.
* Returns 0 *
* @return {@value #NO_ID} if this model was not added to the database
*/ */
abstract public long getId(); abstract public long getId();
@ -175,6 +176,18 @@ public abstract class AbstractModel implements Parcelable {
setValues.put(ID_PROPERTY_NAME, id); setValues.put(ID_PROPERTY_NAME, id);
} }
/**
* @param property
* @return true if setValues or values contains this property
*/
public boolean containsValue(Property<?> property) {
if(setValues != null && setValues.containsKey(property.name))
return true;
if(values != null && values.containsKey(property.name))
return true;
return false;
}
// --- data storage // --- data storage
/** /**

@ -3,7 +3,7 @@ package com.todoroo.andlib.data.sql;
import static com.todoroo.andlib.data.sql.Constants.AS; import static com.todoroo.andlib.data.sql.Constants.AS;
import static com.todoroo.andlib.data.sql.Constants.SPACE; import static com.todoroo.andlib.data.sql.Constants.SPACE;
public abstract class DBObject<T extends DBObject<?>> { public abstract class DBObject<T extends DBObject<?>> implements Cloneable {
protected String alias; protected String alias;
protected final String expression; protected final String expression;
@ -12,8 +12,13 @@ public abstract class DBObject<T extends DBObject<?>> {
} }
public T as(String newAlias) { public T as(String newAlias) {
this.alias = newAlias; try {
return (T) this; T clone = (T) clone();
clone.alias = newAlias;
return clone;
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
} }
public boolean hasAlias() { public boolean hasAlias() {

@ -22,17 +22,17 @@ public class Query {
private Table table; private Table table;
private List<Criterion> criterions = new ArrayList<Criterion>(); private List<Criterion> criterions = new ArrayList<Criterion>();
private List<Property<?>> fields = new ArrayList<Property<?>>(); private List<Field> fields = new ArrayList<Field>();
private List<Join> joins = new ArrayList<Join>(); private List<Join> joins = new ArrayList<Join>();
private List<Field> groupBies = new ArrayList<Field>(); private List<Field> groupBies = new ArrayList<Field>();
private List<Order> orders = new ArrayList<Order>(); private List<Order> orders = new ArrayList<Order>();
private List<Criterion> havings = new ArrayList<Criterion>(); private List<Criterion> havings = new ArrayList<Criterion>();
private Query(Property<?>... fields) { private Query(Field... fields) {
this.fields.addAll(asList(fields)); this.fields.addAll(asList(fields));
} }
public static Query select(Property<?>... fields) { public static Query select(Field... fields) {
return new Query(fields); return new Query(fields);
} }

@ -9,6 +9,7 @@ import android.content.ContentValues;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import com.todoroo.andlib.data.AbstractModel;
import com.todoroo.andlib.data.GenericDao; import com.todoroo.andlib.data.GenericDao;
import com.todoroo.andlib.data.sql.Criterion; import com.todoroo.andlib.data.sql.Criterion;
import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.Autowired;
@ -126,14 +127,11 @@ public class TaskDao extends GenericDao<Task> {
boolean saveSuccessful; boolean saveSuccessful;
if (task.getId() == Task.NO_ID) { if (task.getId() == Task.NO_ID) {
task.setValue(Task.CREATION_DATE, DateUtilities.now());
task.setValue(Task.MODIFICATION_DATE, DateUtilities.now());
saveSuccessful = createItem(task); saveSuccessful = createItem(task);
} else { } else {
ContentValues values = task.getSetValues(); ContentValues values = task.getSetValues();
if(values.size() == 0) if(values.size() == 0)
return true; return true;
task.setValue(Task.MODIFICATION_DATE, DateUtilities.now());
beforeSave(task, values, duringSync); beforeSave(task, values, duringSync);
saveSuccessful = saveItem(task); saveSuccessful = saveItem(task);
afterSave(task, values, duringSync); afterSave(task, values, duringSync);
@ -142,6 +140,20 @@ public class TaskDao extends GenericDao<Task> {
return saveSuccessful; return saveSuccessful;
} }
@Override
public boolean createItem(AbstractModel item) {
if(!item.containsValue(Task.CREATION_DATE))
item.setValue(Task.CREATION_DATE, DateUtilities.now());
item.setValue(Task.MODIFICATION_DATE, DateUtilities.now());
return super.createItem(item);
}
@Override
public boolean saveItem(AbstractModel item) {
item.setValue(Task.MODIFICATION_DATE, DateUtilities.now());
return super.saveItem(item);
}
/** /**
* Called before the task is saved. * Called before the task is saved.
* <ul> * <ul>

@ -271,19 +271,22 @@ public class Astrid2To3UpgradeHelper {
long tagId = -1; long tagId = -1;
String tag = null; String tag = null;
for(mapCursor.moveToFirst(); !mapCursor.isAfterLast(); mapCursor.moveToNext()) { for(mapCursor.moveToFirst(); !mapCursor.isAfterLast(); mapCursor.moveToNext()) {
long mapTagId = mapCursor.getLong(1); long mapTagId = mapCursor.getLong(0);
while(mapTagId > tagId && !tagCursor.isLast()) { while(mapTagId > tagId && !tagCursor.isLast()) {
tagCursor.moveToNext(); tagCursor.moveToNext();
tagId = tagCursor.getLong(1); tagId = tagCursor.getLong(0);
tag = null;
} }
if(mapTagId == tagId) { if(mapTagId == tagId) {
if(tag == null) if(tag == null)
tag = tagCursor.getString(2); tag = tagCursor.getString(1);
long task = mapCursor.getLong(2); long task = mapCursor.getLong(1);
metadata.clear();
metadata.setValue(Metadata.TASK, task); metadata.setValue(Metadata.TASK, task);
metadata.setValue(Metadata.VALUE, tag); metadata.setValue(Metadata.VALUE, tag);
Log.e("PUT PUT", "PUT task " + task + " and tag " + tag);
metadataDao.createItem(metadata); metadataDao.createItem(metadata);
} }
} }

@ -69,7 +69,7 @@ public class MetadataService {
*/ */
public TodorooCursor<Metadata> fetchWithCount(CountProperty count, public TodorooCursor<Metadata> fetchWithCount(CountProperty count,
Criterion where, Order order, boolean onlyCountsGreaterThanZero) { Criterion where, Order order, boolean onlyCountsGreaterThanZero) {
Query query = Query.select(Metadata.VALUE, count). Query query = Query.select(Metadata.VALUE.as(Metadata.VALUE.name), count).
where(where).orderBy(order); where(where).orderBy(order);
if(onlyCountsGreaterThanZero) if(onlyCountsGreaterThanZero)
query.having(count.gt(0)); query.having(count.gt(0));

@ -2,7 +2,6 @@ package com.todoroo.astrid.test;
import java.io.File; import java.io.File;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.service.TestDependencyInjector; import com.todoroo.andlib.service.TestDependencyInjector;
import com.todoroo.andlib.test.TodorooTestCase; import com.todoroo.andlib.test.TodorooTestCase;
@ -24,8 +23,7 @@ public class DatabaseTestCase extends TodorooTestCase {
private static final String TAGS_TEST = "tagstest"; private static final String TAGS_TEST = "tagstest";
private static final String TASKS_TEST = "taskstest"; private static final String TASKS_TEST = "taskstest";
@Autowired public static Database database = new TestDatabase();
public Database database;
public AlarmsDatabase alarmsDatabase; public AlarmsDatabase alarmsDatabase;
@ -39,7 +37,7 @@ public class DatabaseTestCase extends TodorooTestCase {
injector.addInjectable("tagTaskTable", TAG_TASK_TEST); injector.addInjectable("tagTaskTable", TAG_TASK_TEST);
injector.addInjectable("alertsTable", ALERTS_TEST); injector.addInjectable("alertsTable", ALERTS_TEST);
injector.addInjectable("syncTable", SYNC_TEST); injector.addInjectable("syncTable", SYNC_TEST);
injector.addInjectable("database", new TestDatabase()); injector.addInjectable("database", database);
} }
@Override @Override
@ -49,7 +47,7 @@ public class DatabaseTestCase extends TodorooTestCase {
DependencyInjectionService.getInstance().inject(this); DependencyInjectionService.getInstance().inject(this);
// empty out test databases // empty out test databases
database.clear(); database.clear();
deleteDatabase(TASKS_TEST); deleteDatabase(TASKS_TEST);
deleteDatabase(TAGS_TEST); deleteDatabase(TAGS_TEST);
deleteDatabase(TAG_TASK_TEST); deleteDatabase(TAG_TASK_TEST);

@ -50,6 +50,7 @@ public class Astrid2To3UpgradeTests extends DatabaseTestCase {
taskController.close(); taskController.close();
upgrade2To3(); upgrade2To3();
database.openForReading();
TodorooCursor<Task> tasks = taskDao.query(Query.select(Task.PROPERTIES)); TodorooCursor<Task> tasks = taskDao.query(Query.select(Task.PROPERTIES));
assertEquals(0, tasks.getCount()); assertEquals(0, tasks.getCount());
} }
@ -228,8 +229,8 @@ public class Astrid2To3UpgradeTests extends DatabaseTestCase {
// create some ish // create some ish
TaskModelForEdit christmas = new TaskModelForEdit(); TaskModelForEdit christmas = new TaskModelForEdit();
taskController.saveTask(christmas, false); taskController.saveTask(christmas, false);
Date x1 = new Date(0,11,25); Date x1 = new Date(90,11,25);
Date x2 = new Date(1,11,25); Date x2 = new Date(91,11,25);
alertController.addAlert(christmas.getTaskIdentifier(), x1); alertController.addAlert(christmas.getTaskIdentifier(), x1);
alertController.addAlert(christmas.getTaskIdentifier(), x2); alertController.addAlert(christmas.getTaskIdentifier(), x2);

Loading…
Cancel
Save