Made significant progress getting upgrade tests to pass.

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

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

@ -152,7 +152,8 @@ public abstract class AbstractModel implements Parcelable {
/**
* 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();
@ -175,6 +176,18 @@ public abstract class AbstractModel implements Parcelable {
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
/**

@ -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.SPACE;
public abstract class DBObject<T extends DBObject<?>> {
public abstract class DBObject<T extends DBObject<?>> implements Cloneable {
protected String alias;
protected final String expression;
@ -12,8 +12,13 @@ public abstract class DBObject<T extends DBObject<?>> {
}
public T as(String newAlias) {
this.alias = newAlias;
return (T) this;
try {
T clone = (T) clone();
clone.alias = newAlias;
return clone;
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
}
public boolean hasAlias() {

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

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

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

@ -69,7 +69,7 @@ public class MetadataService {
*/
public TodorooCursor<Metadata> fetchWithCount(CountProperty count,
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);
if(onlyCountsGreaterThanZero)
query.having(count.gt(0));

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

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

Loading…
Cancel
Save