/** * Copyright (c) 2012 Todoroo Inc * * See the file "LICENSE" for the full license governing this code. */ package com.todoroo.astrid.gtasks; import java.util.ArrayList; import java.util.List; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import com.google.api.services.tasks.model.TaskList; import com.google.api.services.tasks.model.TaskLists; import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.core.PluginServices; import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.test.DatabaseTestCase; public class GtasksDetailExposerTest extends DatabaseTestCase { @Autowired private GtasksListService gtasksListService; private final GtasksTestPreferenceService preferences = new GtasksTestPreferenceService(); private final DetailListener detailListener = new DetailListener(); private Task task; private String detail; public void testExposeNotLoggedIn() { givenTwoListSetup(); givenLoggedInStatus(false); givenTaskWithList("listone-id"); whenRequestingDetails(); thenExpectNoDetail(); } public void testExposeListOne() { givenTwoListSetup(); givenLoggedInStatus(true); givenTaskWithList("listone-id"); whenRequestingDetails(); thenExpectDetail("List One"); } public void testExposeListTwo() { givenTwoListSetup(); givenLoggedInStatus(true); givenTaskWithList("listtwo-id"); whenRequestingDetails(); thenExpectDetail("List Two"); } public void testExposeListDoesntExist() { givenTwoListSetup(); givenLoggedInStatus(true); givenTaskWithList("blah"); whenRequestingDetails(); thenExpectNoDetail(); } public void testExposeListNotSet() { givenTwoListSetup(); givenLoggedInStatus(true); givenTaskWithList(null); whenRequestingDetails(); thenExpectNoDetail(); } // --- helpers private void thenExpectNoDetail() { assertNull("no detail", detail); } private void thenExpectDetail(String expected) { assertNotNull("detail not null", detail); assertTrue("detail was '" + detail + "', '" + expected + "' expected", detail.contains(expected)); } private void givenTwoListSetup() { TaskLists lists = new TaskLists(); List<TaskList> newLists = new ArrayList<TaskList>(); TaskList list = new TaskList(); list.setId("listone-id"); list.setTitle("List One"); //new GoogleTaskListInfo("listone-id", "List One"); newLists.add(list); list = new TaskList(); list.setId("listtwo-id"); list.setTitle("List Two"); //("listtwo-id", "List Two"); newLists.add(list); lists.setItems(newLists); gtasksListService.updateLists(lists); } private Task givenTaskWithList(String list) { Task newTask = new Task(); PluginServices.getTaskService().save(newTask); Metadata metadata = GtasksMetadata.createEmptyMetadata(newTask.getId()); if(list != null) metadata.setValue(GtasksMetadata.LIST_ID, list); PluginServices.getMetadataService().save(metadata); return task = newTask; } @Override protected void addInjectables() { super.addInjectables(); testInjector.addInjectable("gtasksPreferenceService", preferences); } private void whenRequestingDetails() { Intent intent = new Intent(AstridApiConstants.BROADCAST_REQUEST_DETAILS); intent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, task.getId()); detail = null; new GtasksDetailExposer().onReceive(getContext(), intent); AndroidUtilities.sleepDeep(500); } private void givenLoggedInStatus(boolean status) { preferences.setLoggedIn(status); } @Override protected void setUp() throws Exception { super.setUp(); getContext().registerReceiver(detailListener, new IntentFilter(AstridApiConstants.BROADCAST_SEND_DETAILS)); } @Override protected void tearDown() throws Exception { super.tearDown(); getContext().unregisterReceiver(detailListener); } private class DetailListener extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { detail = intent.getExtras().getString(AstridApiConstants.EXTRAS_RESPONSE); } } }//*/