package com.nononsenseapps.notepad.test;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import com.nononsenseapps.notepad.data.model.sql.Task;
import com.nononsenseapps.notepad.data.model.sql.TaskList;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.MediumTest;
import static com.nononsenseapps.notepad.data.local.sql.DatabaseHandler.resetTestDatabase;
import static com.nononsenseapps.notepad.data.local.sql.DatabaseHandler.setEmptyTestDatabase;
import static com.nononsenseapps.notepad.data.local.sql.DatabaseHandler.setFreshTestDatabase;
import static com.nononsenseapps.notepad.data.local.sql.DatabaseHandler.setTestDatabase;
public class DBProviderTest extends AndroidTestCase {
private Context context;
private ContentResolver resolver;
@Override
public void setUp() throws Exception {
context = getContext();
setEmptyTestDatabase(context, getClass().getName());
resolver = context.getContentResolver();
}
@Override
public void tearDown() throws Exception {
resetTestDatabase(context, getClass().getName());
}
private void assertUriReturnsResult(final Uri uri, final String[] fields) {
assertUriReturnsResult(uri, fields, null, null, -1);
}
private void assertUriReturnsResult(final Uri uri, final String[] fields,
final String where, final String[] whereArgs, final int count) {
final Cursor c = resolver.query(uri, fields, where, whereArgs, null);
final int cursorCount = c.getCount();
c.close();
if (count < 0) {
assertTrue("Uri did not return a result: " + uri.getEncodedPath(),
cursorCount > 0);
}
else {
assertEquals("Uri did not return expected number of results",
count, cursorCount);
}
}
private TaskList getNewList() {
TaskList result = new TaskList();
result.title = "111aaTestingList";
result.save(context);
return result;
}
private ArrayList<Task> insertSomeTasks(final TaskList list, final int count) {
ArrayList<Task> tasks = new ArrayList<Task>();
for (int i = 0; i < count; i++) {
Task t = new Task();
t.title = "testTask" + i;
t.note = "testNote" + i;
t.due = Calendar.getInstance().getTimeInMillis();
t.dblist = list._id;
t.save(context);
tasks.add(t);
}
return tasks;
}
@MediumTest
public void testTaskListURIs() {
final TaskList list = getNewList();
assertUriReturnsResult(TaskList.URI, TaskList.Columns.FIELDS);
assertUriReturnsResult(TaskList.URI_WITH_COUNT, TaskList.Columns.FIELDS);
list.delete(mContext);
}
@MediumTest
public void testTaskURIs() {
final TaskList list = getNewList();
final int taskCount = 5;
final List<Task> tasks = insertSomeTasks(list, taskCount);
assertUriReturnsResult(Task.URI, Task.Columns.FIELDS);
// Sectioned Date query
assertUriReturnsResult(Task.URI_SECTIONED_BY_DATE, Task.Columns.FIELDS,
Task.Columns.DBLIST + " IS ?",
new String[] { Long.toString(list._id) }, taskCount + 1);
// History query
Task t = tasks.get(0);
final int histCount = 22;
for (int i = 0; i < 22; i++) {
t.title += " hist" + i;
t.save(getContext());
}
// Should return insert (1) + update count (histCount)
assertUriReturnsResult(Task.URI_TASK_HISTORY,
Task.Columns.HISTORY_COLUMNS, Task.Columns.HIST_TASK_ID
+ " IS ?", new String[] { Long.toString(t._id) },
histCount + 1);
// TODO remember legacy uris
// TODO need a projection mapper
// assertUriReturnsResult(LegacyDBHelper.NotePad.Notes.CONTENT_URI,
// new String[] { LegacyDBHelper.NotePad.Notes.COLUMN_NAME_TITLE });
// assertUriReturnsResult(
// LegacyDBHelper.NotePad.Notes.CONTENT_VISIBLE_URI,
// new String[] { LegacyDBHelper.NotePad.Notes.COLUMN_NAME_TITLE });
list.delete(context);
// Should return insert NOTHING since it should have been deleted
assertUriReturnsResult(Task.URI_TASK_HISTORY,
Task.Columns.HISTORY_COLUMNS, Task.Columns.HIST_TASK_ID
+ " IS ?", new String[] { Long.toString(t._id) }, 0);
}
}