package org.commcare.android.util; import org.commcare.engine.resource.AppInstallStatus; import org.commcare.tasks.InstallStagedUpdateTask; import org.commcare.tasks.ResultAndError; import org.commcare.tasks.TaskListener; import org.commcare.tasks.TaskListenerRegistrationException; import org.commcare.tasks.UpdateTask; import org.robolectric.Robolectric; import static junit.framework.TestCase.assertEquals; import static org.junit.Assert.fail; /** * @author Phillip Mates (pmates@dimagi.com) */ public class UpdateUtils { public static void installUpdate(String appFolder, AppInstallStatus expectedUpdateStatus, AppInstallStatus expectedInstallStatus) { UpdateTask updateTask = stageUpdate(appFolder, expectedUpdateStatus); assertEquals(expectedInstallStatus, InstallStagedUpdateTask.installStagedUpdate()); updateTask.clearTaskInstance(); } public static UpdateTask stageUpdate(String profileRef, AppInstallStatus expectedInstallStatus) { UpdateTask updateTask = UpdateTask.getNewInstance(); try { updateTask.registerTaskListener(taskListenerFactory(new ResultAndError<>(expectedInstallStatus))); } catch (TaskListenerRegistrationException e) { fail("failed to register listener for update task"); } updateTask.execute(profileRef); Robolectric.flushBackgroundThreadScheduler(); Robolectric.flushForegroundThreadScheduler(); return updateTask; } public static String buildResourceRef(String baseDir, String app, String resource) { return baseDir + app + "/" + resource; } private static TaskListener<Integer, ResultAndError<AppInstallStatus>> taskListenerFactory(final ResultAndError<AppInstallStatus> expectedResult) { return new TaskListener<Integer, ResultAndError<AppInstallStatus>>() { @Override public void handleTaskUpdate(Integer... updateVals) { } @Override public void handleTaskCompletion(ResultAndError<AppInstallStatus> result) { assertEquals(expectedResult.data, result.data); } @Override public void handleTaskCancellation() { } }; } }