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.
280 lines
10 KiB
Java
280 lines
10 KiB
Java
package com.todoroo.astrid.gtasks;
|
|
|
|
import java.util.Date;
|
|
|
|
import android.accounts.Account;
|
|
import android.accounts.AccountManager;
|
|
import android.accounts.AccountManagerFuture;
|
|
import android.content.Intent;
|
|
import android.os.Bundle;
|
|
|
|
import com.google.api.client.googleapis.extensions.android2.auth.GoogleAccountManager;
|
|
import com.google.api.services.tasks.v1.model.Task;
|
|
import com.google.api.services.tasks.v1.model.TaskList;
|
|
import com.google.api.services.tasks.v1.model.TaskLists;
|
|
import com.google.api.services.tasks.v1.model.Tasks;
|
|
import com.todoroo.andlib.service.ContextManager;
|
|
import com.todoroo.andlib.utility.Preferences;
|
|
import com.todoroo.astrid.gtasks.api.GtasksApiUtilities;
|
|
import com.todoroo.astrid.gtasks.api.GtasksService;
|
|
import com.todoroo.astrid.gtasks.api.MoveListRequest;
|
|
import com.todoroo.astrid.gtasks.auth.GtasksTokenValidator;
|
|
import com.todoroo.astrid.test.DatabaseTestCase;
|
|
|
|
@SuppressWarnings("nls")
|
|
public class GtasksApiTest extends DatabaseTestCase {
|
|
|
|
private static final String DEFAULT_LIST = "@default";
|
|
private static final String TEST_ACCOUNT = "sync_tester2@astrid.com";
|
|
private static GtasksService service;
|
|
private static boolean initialized = false;
|
|
private boolean bypassTests = false;
|
|
|
|
public void testCreateTask() throws Exception {
|
|
if(bypassTests) return;
|
|
Task newTask = new Task();
|
|
String title = newTask.title = "New task";
|
|
|
|
service.createGtask(DEFAULT_LIST, newTask);
|
|
assertTrue(taskWithTitleExists(title));
|
|
}
|
|
|
|
public void testUpdateTaskProperties() throws Exception {
|
|
if(bypassTests) return;
|
|
Task newTask = new Task();
|
|
String title = newTask.title = "This title will change";
|
|
|
|
newTask = service.createGtask(DEFAULT_LIST, newTask);
|
|
assertTrue(taskWithTitleExists(title));
|
|
|
|
String title2 = newTask.title = "Changed Title";
|
|
service.updateGtask(DEFAULT_LIST, newTask);
|
|
assertTrue(taskWithTitleExists(title2));
|
|
assertFalse(taskWithTitleExists(title));
|
|
}
|
|
|
|
public void testTaskDateFormatting() throws Exception {
|
|
if(bypassTests) return;
|
|
Task newTask = new Task();
|
|
String title = newTask.title = "Due date will change";
|
|
|
|
newTask = service.createGtask(DEFAULT_LIST, newTask);
|
|
assertTrue(taskWithTitleExists(title));
|
|
|
|
long dueTime = new Date(114, 1, 13).getTime();
|
|
String dueTimeString = GtasksApiUtilities.unixTimeToGtasksTime(dueTime);
|
|
newTask.due = dueTimeString;
|
|
newTask = service.updateGtask(DEFAULT_LIST, newTask);
|
|
assertEquals(dueTimeString, GtasksApiUtilities.gtasksDueTimeStringToLocalTimeString(newTask.due));
|
|
assertEquals(dueTime, GtasksApiUtilities.gtasksDueTimeToUnixTime(newTask.due, 0));
|
|
|
|
long compTime = new Date(115, 2, 14).getTime();
|
|
String compTimeString = GtasksApiUtilities.unixTimeToGtasksTime(compTime);
|
|
newTask.completed = compTimeString;
|
|
newTask.status = "completed";
|
|
newTask = service.updateGtask(DEFAULT_LIST, newTask);
|
|
assertEquals(compTimeString, GtasksApiUtilities.gtasksCompletedTimeStringToLocalTimeString(newTask.completed));
|
|
assertEquals(compTime, GtasksApiUtilities.gtasksCompletedTimeToUnixTime(newTask.completed, 0));
|
|
}
|
|
|
|
public void testTaskDeleted() throws Exception {
|
|
if(bypassTests) return;
|
|
Task newTask = new Task();
|
|
String title = newTask.title = "This task will be deleted";
|
|
|
|
newTask = service.createGtask(DEFAULT_LIST, newTask);
|
|
assertTrue(taskWithTitleExists(title));
|
|
|
|
service.deleteGtask(DEFAULT_LIST, newTask.id);
|
|
assertFalse(taskWithTitleExists(title));
|
|
}
|
|
|
|
public void testTaskMoved() throws Exception {
|
|
if(bypassTests) return;
|
|
Task newTask1 = new Task();
|
|
String title1 = newTask1.title = "Task 1";
|
|
Task newTask2 = new Task();
|
|
String title2 = newTask2.title = "Task 2";
|
|
|
|
newTask1 = service.createGtask(DEFAULT_LIST, newTask1);
|
|
newTask2 = service.createGtask(DEFAULT_LIST, newTask2);
|
|
|
|
assertTrue(taskWithTitleExists(title1));
|
|
assertTrue(taskWithTitleExists(title2));
|
|
|
|
System.err.println("Task 1 id: " + newTask1.id);
|
|
System.err.println("Task 2 id: " + newTask2.id);
|
|
|
|
service.moveGtask(DEFAULT_LIST, newTask1.id, newTask2.id, null);
|
|
newTask1 = service.getGtask(DEFAULT_LIST, newTask1.id);
|
|
newTask2 = service.getGtask(DEFAULT_LIST, newTask2.id);
|
|
|
|
assertEquals(newTask1.parent, newTask2.id);
|
|
|
|
service.moveGtask(DEFAULT_LIST, newTask1.id, null, newTask2.id);
|
|
newTask1 = service.getGtask(DEFAULT_LIST, newTask1.id);
|
|
newTask2 = service.getGtask(DEFAULT_LIST, newTask2.id);
|
|
|
|
assertNull(newTask1.parent);
|
|
assertTrue(newTask2.position.compareTo(newTask1.position) < 0);
|
|
}
|
|
|
|
public void testMoveBetweenLists() throws Exception {
|
|
if(bypassTests) return;
|
|
Task newTask = new Task();
|
|
String title = newTask.title = "This task will move lists";
|
|
|
|
newTask = service.createGtask(DEFAULT_LIST, newTask);
|
|
assertTrue(taskWithTitleExists(title));
|
|
|
|
String listTitle = "New list";
|
|
service.createGtaskList(listTitle);
|
|
TaskList newList;
|
|
|
|
assertNotNull(newList = listWithTitle(listTitle));
|
|
|
|
MoveListRequest moveTask = new MoveListRequest(service, newTask.id, DEFAULT_LIST, newList.id, null);
|
|
moveTask.executePush();
|
|
|
|
assertFalse(taskWithTitleExists(title));
|
|
assertTrue(listHasTaskWithTitle(newList.id, title));
|
|
}
|
|
|
|
private boolean listHasTaskWithTitle(String listId, String title) throws Exception {
|
|
com.google.api.services.tasks.v1.model.Tasks newListTasks = service.getAllGtasksFromListId(listId, false);
|
|
if (newListTasks.items != null) {
|
|
for (Task t : newListTasks.items) {
|
|
if (t.title.equals(title)) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private boolean taskWithTitleExists(String title) throws Exception {
|
|
Tasks defaultList = service.getAllGtasksFromListId(DEFAULT_LIST, false);
|
|
if (defaultList.items != null) {
|
|
for (Task t : defaultList.items) {
|
|
if (t.title.equals(title))
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public void testCreateList() throws Exception {
|
|
if(bypassTests) return;
|
|
String title1 = "My new list!";
|
|
service.createGtaskList(title1);
|
|
assertNotNull(listWithTitle(title1));
|
|
|
|
String title2 = "Another new list!";
|
|
service.createGtaskList("Another new list!");
|
|
assertNotNull(listWithTitle(title2));
|
|
assertNotNull(listWithTitle(title1));
|
|
}
|
|
|
|
public void testDeleteList() throws Exception {
|
|
if(bypassTests) return;
|
|
String title = "This list will be deleted";
|
|
TaskList t = service.createGtaskList(title);
|
|
assertNotNull(listWithTitle(title));
|
|
|
|
service.deleteGtaskList(t.id);
|
|
assertNull(listWithTitle(title));
|
|
}
|
|
|
|
public void testUpdateListProperties() throws Exception {
|
|
if(bypassTests) return;
|
|
String title1 = "This title will change";
|
|
TaskList t = service.createGtaskList(title1);
|
|
assertNotNull(listWithTitle(title1));
|
|
|
|
String title2 = t.title = "New title";
|
|
service.updateGtaskList(t);
|
|
assertNotNull(listWithTitle(title2));
|
|
assertNull(listWithTitle(title1));
|
|
}
|
|
|
|
private TaskList listWithTitle(String title) throws Exception {
|
|
TaskLists allLists = service.allGtaskLists();
|
|
for (TaskList t : allLists.items) {
|
|
if (t.title.equals(title))
|
|
return t;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
protected void setUp() throws Exception {
|
|
super.setUp();
|
|
if (!initialized) {
|
|
GoogleAccountManager manager = new GoogleAccountManager(ContextManager.getContext());
|
|
Account[] accounts = manager.getAccounts();
|
|
Account toUse = null;
|
|
for (Account a : accounts) {
|
|
if (a.name.equals(TEST_ACCOUNT)) {
|
|
toUse = a;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (toUse == null) {
|
|
if (accounts.length == 0) {
|
|
bypassTests = true;
|
|
return;
|
|
}
|
|
toUse = accounts[0];
|
|
}
|
|
|
|
Preferences.setString(GtasksPreferenceService.PREF_USER_NAME, toUse.name);
|
|
AccountManagerFuture<Bundle> accountManagerFuture = manager.manager.getAuthToken(toUse, GtasksService.AUTH_TOKEN_TYPE, true, null, null);
|
|
|
|
Bundle authTokenBundle = accountManagerFuture.getResult();
|
|
if (authTokenBundle.containsKey(AccountManager.KEY_INTENT)) {
|
|
Intent i = (Intent) authTokenBundle.get(AccountManager.KEY_INTENT);
|
|
ContextManager.getContext().startActivity(i);
|
|
return;
|
|
}
|
|
|
|
String authToken = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN);
|
|
authToken = GtasksTokenValidator.validateAuthToken(authToken);
|
|
|
|
service = new GtasksService(authToken);
|
|
|
|
initialized = true;
|
|
}
|
|
deleteAllLists();
|
|
clearDefaultList();
|
|
}
|
|
|
|
private void deleteAllLists() {
|
|
try {
|
|
TaskLists allLists = service.allGtaskLists();
|
|
for (TaskList t : allLists.items) {
|
|
if (!t.title.equals("Default List"))
|
|
service.deleteGtaskList(t.id);
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
fail("Failed to clear lists");
|
|
}
|
|
}
|
|
|
|
private void clearDefaultList() {
|
|
try {
|
|
Tasks tasks = service.getAllGtasksFromListId(DEFAULT_LIST, false);
|
|
if (tasks.items != null) {
|
|
for (Task t : tasks.items) {
|
|
service.deleteGtask(DEFAULT_LIST, t.id);
|
|
}
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
fail("Failed to clear default list");
|
|
}
|
|
}
|
|
|
|
}
|