Fixed up unit tests. they compile but aren't passing yet

pull/14/head
Tim Su 14 years ago
parent 561e899eff
commit c1d1fa801f

@ -30,6 +30,13 @@ public class AstridApiConstants {
*/ */
public static final String PERMISSION_WRITE = PACKAGE + ".WRITE"; public static final String PERMISSION_WRITE = PACKAGE + ".WRITE";
// --- Content Provider
/**
* URI to append to base content URI for making groupby queries
*/
public static final String GROUP_BY_URI = "groupby/";
// --- Broadcast Extras // --- Broadcast Extras
/** /**

@ -99,10 +99,12 @@ public class Astrid3ContentProvider extends ContentProvider {
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
for(String uri : new String[] { Task.CONTENT_URI, Metadata.CONTENT_URI, StoreObject.CONTENT_URI }) { for(Uri uri : new Uri[] { Task.CONTENT_URI, Metadata.CONTENT_URI, StoreObject.CONTENT_URI }) {
uriMatcher.addURI(uri, "", URI_DIR); String uriAsString = uri.toString();
uriMatcher.addURI(uri, "#", URI_ITEM); uriMatcher.addURI(uriAsString, "", URI_DIR);
uriMatcher.addURI(uri, "groupby/*", URI_GROUP); uriMatcher.addURI(uriAsString, "#", URI_ITEM);
uriMatcher.addURI(uriAsString,
AstridApiConstants.GROUP_BY_URI + "*", URI_GROUP);
} }
setReadPermission(AstridApiConstants.PERMISSION_READ); setReadPermission(AstridApiConstants.PERMISSION_READ);
@ -147,17 +149,17 @@ public class Astrid3ContentProvider extends ContentProvider {
} }
private UriHelper<?> generateHelper(Uri uri, boolean populateModel) { private UriHelper<?> generateHelper(Uri uri, boolean populateModel) {
if(uri.toString().startsWith(Task.CONTENT_URI)) { if(uri.toString().startsWith(Task.CONTENT_URI.toString())) {
UriHelper<Task> helper = new UriHelper<Task>(); UriHelper<Task> helper = new UriHelper<Task>();
helper.model = populateModel ? new Task() : null; helper.model = populateModel ? new Task() : null;
helper.dao = taskDao; helper.dao = taskDao;
return helper; return helper;
} else if(uri.toString().startsWith(Metadata.CONTENT_URI)) { } else if(uri.toString().startsWith(Metadata.CONTENT_URI.toString())) {
UriHelper<Metadata> helper = new UriHelper<Metadata>(); UriHelper<Metadata> helper = new UriHelper<Metadata>();
helper.model = populateModel ? new Metadata() : null; helper.model = populateModel ? new Metadata() : null;
helper.dao = metadataDao; helper.dao = metadataDao;
return helper; return helper;
} else if(uri.toString().startsWith(StoreObject.CONTENT_URI)) { } else if(uri.toString().startsWith(StoreObject.CONTENT_URI.toString())) {
UriHelper<StoreObject> helper = new UriHelper<StoreObject>(); UriHelper<StoreObject> helper = new UriHelper<StoreObject>();
helper.model = populateModel ? new StoreObject() : null; helper.model = populateModel ? new StoreObject() : null;
helper.dao = storeObjectDao; helper.dao = storeObjectDao;

@ -5,7 +5,11 @@ import android.content.ContentValues;
import android.database.Cursor; import android.database.Cursor;
import android.net.Uri; import android.net.Uri;
import com.todoroo.andlib.data.Property.IntegerProperty;
import com.todoroo.andlib.data.Property.StringProperty;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.model.Metadata; import com.todoroo.astrid.model.Metadata;
import com.todoroo.astrid.model.StoreObject;
import com.todoroo.astrid.model.Task; import com.todoroo.astrid.model.Task;
import com.todoroo.astrid.test.DatabaseTestCase; import com.todoroo.astrid.test.DatabaseTestCase;
@ -102,126 +106,63 @@ public class Astrid3ProviderTests extends DatabaseTestCase {
cursor.close(); cursor.close();
} }
/** Test selecting data with metadata */
public void testSelectionWithMetadata() {
ContentResolver resolver = getContext().getContentResolver();
// insert some tasks
ContentValues task = new ContentValues();
ContentValues metadata = new ContentValues();
task.put(Task.TITLE.name, "turkoglu");
metadata.put("suave-factor", "10");
resolver.insert(Task.CONTENT_URI, task);
resolver.insert(Metadata.CONTENT_URI, metadata);
task.put(Task.TITLE.name, "ichiro");
metadata.put("suave-factor", "30");
resolver.insert(Task.CONTENT_URI, task);
resolver.insert(Metadata.CONTENT_URI, metadata);
task.put(Task.TITLE.name, "oprah");
metadata.put("suave-factor", "-10");
resolver.insert(Task.CONTENT_URI, task);
resolver.insert(Metadata.CONTENT_URI, metadata);
task.put(Task.TITLE.name, "cruise");
metadata.put("suave-factor", "-10");
resolver.insert(Task.CONTENT_URI, task);
resolver.insert(Metadata.CONTENT_URI, metadata);
task.put(Task.TITLE.name, "cruise");
metadata.put("suave-factor", "-10");
resolver.insert(Task.CONTENT_URI, task);
resolver.insert(Metadata.CONTENT_URI, metadata);
task.clear();
task.put(Task.TITLE.name, "oprah");
resolver.insert(uri, task);
String[] projection = new String[] {
Task.ID,
Task.TITLE.name,
"suave-factor"
};
// fetch all tasks with various selection parameters
Cursor cursor = resolver.query(uri, projection, "1", null, null);
assertEquals(3, cursor.getCount());
cursor.close();
cursor = resolver.query(uri, projection, "'suave-factor' = 30", null, null);
assertEquals(1, cursor.getCount());
cursor.moveToFirst();
assertEquals("ichiro", cursor.getString(1));
cursor.close();
cursor = resolver.query(uri, projection, "'suave-factor' < 5", null, null);
assertEquals(1, cursor.getCount());
cursor.moveToFirst();
assertEquals("cruise", cursor.getString(1));
cursor.close();
cursor = resolver.query(uri, projection, "'suave-factor' ISNULL", null, null);
assertEquals(1, cursor.getCount());
cursor.moveToFirst();
assertEquals("oprah", cursor.getString(1));
cursor.close();
}
/** Test updating */ /** Test updating */
public void testUpdating() { public void testUpdating() {
ContentResolver resolver = getContext().getContentResolver(); ContentResolver resolver = getContext().getContentResolver();
Uri allItemsUri = AstridContentProvider.allItemsUri();
// insert some tasks // insert some tasks
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
values.put(Task.TITLE.name, "carlos silva"); values.put(Task.TITLE.name, "carlos silva");
values.put("suckitude", "acute"); values.put(Task.IMPORTANCE.name, Task.IMPORTANCE_SHOULD_DO);
Uri carlosUri = resolver.insert(allItemsUri, values); resolver.insert(Task.CONTENT_URI, values);
Uri carlosUri = resolver.insert(Task.CONTENT_URI, values);
values.clear(); values.clear();
values.put(Task.TITLE.name, "felix hernandez"); values.put(Task.TITLE.name, "felix hernandez");
values.put(Task.URGENCY, Task.URGENCY_WITHIN_A_YEAR); values.put(Task.IMPORTANCE.name, Task.IMPORTANCE_MUST_DO);
resolver.insert(allItemsUri, values); resolver.insert(Task.CONTENT_URI, values);
String[] projection = new String[] { String[] projection = new String[] {
Task.ID, Task.ID.name,
Task.TITLE.name, Task.TITLE.name,
"suckitude" Task.IMPORTANCE.name,
}; };
// test updating with single item URI // test updating with single item URI
Cursor cursor = resolver.query(allItemsUri, projection, "'suckitude' = 'carlos who?'", null, null); Cursor cursor = resolver.query(Task.CONTENT_URI, projection,
Task.TITLE.eq("carlos who?").toString(), null, null);
assertEquals(0, cursor.getCount()); assertEquals(0, cursor.getCount());
cursor.close(); cursor.close();
values.clear(); values.clear();
values.put("suckitude", "carlos who?"); values.put(Task.TITLE.name, "carlos who?");
assertEquals(1, resolver.update(carlosUri, values, null, null)); assertEquals(1, resolver.update(carlosUri, values, null, null));
cursor = resolver.query(allItemsUri, projection, "'suckitude' = 'carlos who?'", null, null); cursor = resolver.query(Task.CONTENT_URI, projection, "'title' = 'carlos who?'", null, null);
assertEquals(1, cursor.getCount()); assertEquals(1, cursor.getCount());
cursor.close(); cursor.close();
// test updating with all items uri // test updating with all items uri
cursor = resolver.query(allItemsUri, PROJECTION, Task.URGENCY + " = " + cursor = resolver.query(Task.CONTENT_URI, PROJECTION,
Task.URGENCY_NONE, null, null); Task.IMPORTANCE.eq(Task.IMPORTANCE_NONE).toString(), null, null);
assertEquals(0, cursor.getCount()); assertEquals(0, cursor.getCount());
cursor.close(); cursor.close();
values.clear(); values.clear();
values.put(Task.URGENCY, Task.URGENCY_NONE); values.put(Task.IMPORTANCE.name, Task.IMPORTANCE_NONE);
assertEquals(1, resolver.update(allItemsUri, values, Task.URGENCY + assertEquals(1, resolver.update(Task.CONTENT_URI, values,
"=" + Task.URGENCY_WITHIN_A_YEAR, null)); Task.IMPORTANCE.eq(Task.IMPORTANCE_SHOULD_DO).toString(), null));
cursor = resolver.query(allItemsUri, PROJECTION, Task.URGENCY + " = " + cursor = resolver.query(Task.CONTENT_URI, PROJECTION,
Task.URGENCY_NONE, null, null); Task.IMPORTANCE.eq(Task.IMPORTANCE_NONE).toString(), null, null);
assertEquals(1, cursor.getCount()); assertEquals(1, cursor.getCount());
cursor.close(); cursor.close();
// test updating with group by uri // test updating with group by uri
try { try {
Uri groupByUri = AstridContentProvider.groupByUri(Task.TITLE.name); Uri groupByUri = Uri.withAppendedPath(Task.CONTENT_URI,
AstridApiConstants.GROUP_BY_URI + Task.TITLE.name);
resolver.update(groupByUri, values, null, null); resolver.update(groupByUri, values, null, null);
fail("Able to update using groupby uri"); fail("Able to update using groupby uri");
} catch (Exception e) { } catch (Exception e) {
@ -232,22 +173,22 @@ public class Astrid3ProviderTests extends DatabaseTestCase {
/** Test deleting */ /** Test deleting */
public void testDeleting() { public void testDeleting() {
ContentResolver resolver = getContext().getContentResolver(); ContentResolver resolver = getContext().getContentResolver();
Uri allItemsUri = AstridContentProvider.allItemsUri(); Uri allItemsUri = Task.CONTENT_URI;
// insert some tasks // insert some tasks
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
values.put(Task.TITLE.name, "modest mouse"); values.put(Task.TITLE.name, "modest mouse");
values.put(Task.IMPORTANCE, Task.IMPORTANCE_DO_OR_DIE); values.put(Task.IMPORTANCE.name, Task.IMPORTANCE_DO_OR_DIE);
Uri modestMouse = resolver.insert(allItemsUri, values); Uri modestMouse = resolver.insert(allItemsUri, values);
values.clear(); values.clear();
values.put(Task.TITLE.name, "death cab"); values.put(Task.TITLE.name, "death cab");
values.put(Task.IMPORTANCE, Task.IMPORTANCE_MUST_DO); values.put(Task.IMPORTANCE.name, Task.IMPORTANCE_MUST_DO);
resolver.insert(allItemsUri, values); resolver.insert(allItemsUri, values);
values.clear(); values.clear();
values.put(Task.TITLE.name, "murder city devils"); values.put(Task.TITLE.name, "murder city devils");
values.put(Task.IMPORTANCE, Task.IMPORTANCE_SHOULD_DO); values.put(Task.IMPORTANCE.name, Task.IMPORTANCE_SHOULD_DO);
resolver.insert(allItemsUri, values); resolver.insert(allItemsUri, values);
// test deleting with single URI // test deleting with single URI
@ -269,7 +210,7 @@ public class Astrid3ProviderTests extends DatabaseTestCase {
assertEquals(1, cursor.getCount()); assertEquals(1, cursor.getCount());
cursor.close(); cursor.close();
assertEquals(1, resolver.delete(allItemsUri, Task.IMPORTANCE + assertEquals(1, resolver.delete(allItemsUri, Task.IMPORTANCE.name +
"<" + Task.IMPORTANCE_MUST_DO, null)); "<" + Task.IMPORTANCE_MUST_DO, null));
cursor = resolver.query(allItemsUri, PROJECTION, Task.TITLE.name + cursor = resolver.query(allItemsUri, PROJECTION, Task.TITLE.name +
@ -279,7 +220,8 @@ public class Astrid3ProviderTests extends DatabaseTestCase {
// test with group by uri // test with group by uri
try { try {
Uri groupByUri = AstridContentProvider.groupByUri(Task.TITLE.name); Uri groupByUri = Uri.withAppendedPath(Task.CONTENT_URI,
AstridApiConstants.GROUP_BY_URI + Task.TITLE.name);
resolver.delete(groupByUri, null, null); resolver.delete(groupByUri, null, null);
fail("Able to delete using groupby uri"); fail("Able to delete using groupby uri");
} catch (Exception e) { } catch (Exception e) {
@ -291,21 +233,27 @@ public class Astrid3ProviderTests extends DatabaseTestCase {
public void testSingleItemCrud() { public void testSingleItemCrud() {
ContentResolver resolver = getContext().getContentResolver(); ContentResolver resolver = getContext().getContentResolver();
Uri uri = AstridContentProvider.allItemsUri(); Uri uri = StoreObject.CONTENT_URI;
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
values.put(Task.TITLE.name, "mf doom?"); values.put(StoreObject.TYPE.name, "rapper");
values.put(StoreObject.ITEM.name, "mf doom?");
Uri firstUri = resolver.insert(uri, values); Uri firstUri = resolver.insert(uri, values);
values.put(Task.TITLE.name, "gm grimm!"); values.put(Task.TITLE.name, "gm grimm!");
Uri secondUri = resolver.insert(uri, values); Uri secondUri = resolver.insert(uri, values);
assertNotSame(firstUri, secondUri); assertNotSame(firstUri, secondUri);
Cursor cursor = resolver.query(uri, PROJECTION, "1", null, null); String[] storeProjection = new String[] {
StoreObject.ITEM.name,
};
Cursor cursor = resolver.query(uri, storeProjection, "1", null, null);
assertEquals(2, cursor.getCount()); assertEquals(2, cursor.getCount());
cursor.close(); cursor.close();
cursor = resolver.query(firstUri, PROJECTION, null, null, null); cursor = resolver.query(firstUri, storeProjection, null, null, null);
assertEquals(1, cursor.getCount()); assertEquals(1, cursor.getCount());
cursor.moveToFirst(); cursor.moveToFirst();
assertEquals("mf doom?", cursor.getString(1)); assertEquals("mf doom?", cursor.getString(1));
@ -313,7 +261,7 @@ public class Astrid3ProviderTests extends DatabaseTestCase {
values.put(Task.TITLE.name, "danger mouse."); values.put(Task.TITLE.name, "danger mouse.");
resolver.update(firstUri, values, null, null); resolver.update(firstUri, values, null, null);
cursor = resolver.query(firstUri, PROJECTION, null, null, null); cursor = resolver.query(firstUri, storeProjection, null, null, null);
assertEquals(1, cursor.getCount()); assertEquals(1, cursor.getCount());
cursor.moveToFirst(); cursor.moveToFirst();
assertEquals("danger mouse.", cursor.getString(1)); assertEquals("danger mouse.", cursor.getString(1));
@ -321,7 +269,7 @@ public class Astrid3ProviderTests extends DatabaseTestCase {
assertEquals(1, resolver.delete(firstUri, null, null)); assertEquals(1, resolver.delete(firstUri, null, null));
cursor = resolver.query(uri, PROJECTION, null, null, null); cursor = resolver.query(uri, storeProjection, null, null, null);
assertEquals(1, cursor.getCount()); assertEquals(1, cursor.getCount());
cursor.close(); cursor.close();
} }
@ -329,7 +277,7 @@ public class Astrid3ProviderTests extends DatabaseTestCase {
/** Test GROUP BY uri */ /** Test GROUP BY uri */
public void testGroupByCrud() { public void testGroupByCrud() {
ContentResolver resolver = getContext().getContentResolver(); ContentResolver resolver = getContext().getContentResolver();
Uri uri = AstridContentProvider.allItemsUri(); Uri uri = Task.CONTENT_URI;
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
values.put(Task.TITLE.name, "catwoman"); values.put(Task.TITLE.name, "catwoman");
@ -344,7 +292,8 @@ public class Astrid3ProviderTests extends DatabaseTestCase {
resolver.insert(uri, values); resolver.insert(uri, values);
resolver.insert(uri, values); resolver.insert(uri, values);
Uri groupByUri = AstridContentProvider.groupByUri(Task.TITLE.name); Uri groupByUri = Uri.withAppendedPath(Task.CONTENT_URI,
AstridApiConstants.GROUP_BY_URI + Task.TITLE.name);
Cursor cursor = resolver.query(groupByUri, PROJECTION, null, null, Task.TITLE.name); Cursor cursor = resolver.query(groupByUri, PROJECTION, null, null, Task.TITLE.name);
assertEquals(3, cursor.getCount()); assertEquals(3, cursor.getCount());
cursor.moveToFirst(); cursor.moveToFirst();
@ -356,86 +305,33 @@ public class Astrid3ProviderTests extends DatabaseTestCase {
cursor.close(); cursor.close();
// test "group-by" with metadata // test "group-by" with metadata
values.put("age", 50);
values.put("size", "large");
resolver.insert(uri, values);
values.put("age", 40);
values.put("size", "large");
resolver.insert(uri, values);
values.put("age", 20);
values.put("size", "small");
resolver.insert(uri, values);
Uri groupByAgeUri = AstridContentProvider.groupByUri("size");
cursor = resolver.query(groupByUri, PROJECTION, null, null, Task.TITLE.name);
assertEquals(3, cursor.getCount());
}
/** Test updating and deleting with metadata */
public void testMetadataUpdateDelete() {
ContentResolver resolver = getContext().getContentResolver();
Uri allItemsUri = AstridContentProvider.allItemsUri();
// insert some tasks
ContentValues values = new ContentValues();
values.put(Task.TITLE.name, "chicago");
values.put("pizza", "delicious");
values.put("temperature", 20);
resolver.insert(allItemsUri, values);
values.clear();
values.put(Task.TITLE.name, "san francisco");
values.put("pizza", "meh");
values.put("temperature", 60);
resolver.insert(allItemsUri, values);
values.clear(); values.clear();
values.put(Task.TITLE.name, "new york"); IntegerProperty age = new IntegerProperty(Metadata.TABLE, Metadata.VALUE1.name);
values.put("pizza", "yum"); StringProperty size = Metadata.VALUE2;
values.put("temperature", 30);
resolver.insert(allItemsUri, values);
// test updating with standard URI (shouldn't work)
values.clear();
values.put("pizza", "nonexistent, the city is underwater");
assertEquals(0, resolver.update(allItemsUri, values,
"'pizza'='yum'", null));
String[] projection = new String[] {
Task.ID,
Task.TITLE.name,
"pizza",
"temperature"
};
Cursor cursor = resolver.query(allItemsUri, projection, "'pizza' = 'yum'", null, null);
assertEquals(1, cursor.getCount());
cursor.close();
// test updating with metadata uri values.put(age.name, 50);
Uri pizzaUri = AstridContentProvider.allItemsWithMetadataUri(new String[] {"pizza"}); values.put(size.name, "large");
assertEquals(1, resolver.update(pizzaUri, values, resolver.insert(uri, values);
"'pizza'='yum'", null));
cursor = resolver.query(allItemsUri, projection, "'pizza' = 'yum'", null, null); values.put(age.name, 40);
assertEquals(0, cursor.getCount()); values.put(size.name, "large");
cursor.close(); resolver.insert(uri, values);
// test deleting with metadata uri values.put(age.name, 20);
Uri pizzaTempUri = AstridContentProvider.allItemsWithMetadataUri(new String[] {"pizza", values.put(size.name, "small");
"temperature"}); resolver.insert(uri, values);
cursor = resolver.query(allItemsUri, projection, Task.TITLE.name + " = 'chicago'", null, null); String[] metadataProjection = new String[] { "AVERAGE(" + age + ")" };
assertEquals(0, cursor.getCount());
cursor.close();
// SQLITE: the deliverer of BAD NEWS Uri groupBySizeUri = Uri.withAppendedPath(Metadata.CONTENT_URI,
assertEquals(0, resolver.delete(pizzaTempUri, "pizza='delicious' AND temperature > 50", null)); AstridApiConstants.GROUP_BY_URI + size.name);
assertEquals(1, resolver.delete(pizzaTempUri, "pizza='delicious' AND temperature < 50", null)); cursor = resolver.query(groupBySizeUri, metadataProjection, null, null, size.name);
assertEquals(2, cursor.getCount());
cursor = resolver.query(allItemsUri, projection, Task.TITLE.name + " = 'chicago'", null, null); cursor.moveToFirst();
assertEquals(0, cursor.getCount()); assertEquals(45, cursor.getInt(0));
cursor.close(); cursor.moveToNext();
assertEquals(20, cursor.getInt(0));
} }
} }

Loading…
Cancel
Save