package de.vanmar.android.yarrn.favorites; import android.view.inputmethod.EditorInfo; import com.octo.android.robospice.SpiceManager; import com.octo.android.robospice.request.listener.RequestListener; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.Robolectric; import org.robolectric.util.ActivityController; import de.vanmar.android.yarrn.FragmentFactory; import de.vanmar.android.yarrn.MainActivity; import de.vanmar.android.yarrn.MainActivity_; import de.vanmar.android.yarrn.R; import de.vanmar.android.yarrn.projects.ProjectsFragment; import de.vanmar.android.yarrn.requests.ListFavoritesRequest; import de.vanmar.android.yarrn.util.MyRobolectricTestRunner; import de.vanmar.android.yarrn.util.TestUtil; import static org.junit.Assert.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; @RunWith(MyRobolectricTestRunner.class) public class FavoritesFragmentUnitTest { @Mock private FragmentFactory fragmentFactory; @Mock private SpiceManager spiceManager; @Mock private ProjectsFragment projectsFragment; @Captor private ArgumentCaptor<ListFavoritesRequest> request; private FavoritesFragment favoritesFragment; private MainActivity activity; @Before public void prepare() { MockitoAnnotations.initMocks(this); TestUtil.mockBackgroundExecutor(); favoritesFragment = new FavoritesFragment_(); favoritesFragment.spiceManager = this.spiceManager; ActivityController<MainActivity_> activityController = Robolectric.buildActivity(MainActivity_.class).create(); activity = activityController.get(); favoritesFragment.prefs = activity.prefs; TestUtil.mockValidUser(activity.prefs); activity.fragmentFactory = this.fragmentFactory; given(fragmentFactory.getProjectsFragment()).willReturn(projectsFragment); given(fragmentFactory.getFavoritesFragment()).willReturn(favoritesFragment); activityController.start().resume(); activity.menuMyFavoritesClicked(); } @Test public void shouldLoadAndDisplayList() { // when (starting) // then verify(spiceManager).execute(any(ListFavoritesRequest.class), anyString(), anyInt(), any(RequestListener.class)); } @Test public void shouldSearchForQuery() { // given reset(spiceManager); // when favoritesFragment.query.setText("Doctor"); favoritesFragment.query.onEditorAction(EditorInfo.IME_ACTION_SEARCH); // then verify(spiceManager).execute(request.capture(), anyString(), anyInt(), any(RequestListener.class)); request.getValue().getCacheKey().toString().endsWith("query=Doctor"); // when reset(spiceManager); favoritesFragment.searchOptions.setSelection(0); favoritesFragment.searchOptions.getOnItemSelectedListener().onItemSelected(favoritesFragment.searchOptions, null, 0, 0); // then verify(spiceManager).execute(request.capture(), anyString(), anyInt(), any(RequestListener.class)); request.getValue().getCacheKey().toString().endsWith("tag=Doctor"); } @Test public void shouldEmptyQueryOnDelete() { // given favoritesFragment.query.setText("Doctor"); // when favoritesFragment.getView().findViewById(R.id.delete).performClick(); // then assertEquals("", favoritesFragment.query.getText().toString()); } }