package de.vanmar.android.yarrn; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.Robolectric; import org.robolectric.util.ActivityController; import de.vanmar.android.yarrn.projects.ProjectFragment; import de.vanmar.android.yarrn.projects.ProjectsFragment; import de.vanmar.android.yarrn.util.MyRobolectricTestRunner; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.robolectric.Robolectric.shadowOf; @RunWith(MyRobolectricTestRunner.class) public class MainActivityUnitTest { public static final String USERNAME = "Jillda"; private MainActivity activity; @Mock private FragmentFactory fragmentFactory; @Mock private ProjectsFragment projectsFragment; @Mock private ProjectFragment projectFragment; public static final int PROJECT_ID = 17; @Before public void prepare() { MockitoAnnotations.initMocks(this); ActivityController<MainActivity_> activityController = Robolectric.buildActivity(MainActivity_.class).attach().create(); activity = activityController.get(); activity.fragmentFactory = this.fragmentFactory; given(fragmentFactory.getProjectsFragment()).willReturn(projectsFragment); given(fragmentFactory.getProjectFragment()).willReturn(projectFragment); activityController.start().resume(); } @Test public void shouldStartWithProjectList() { // then assertCorrectFragmentShown(MainActivity.PROJECTS_TAG, projectsFragment); } @Test public void shouldOpenProjectDetailFragment() throws Exception { // assume Bundle args = new Bundle(); args.putInt(ProjectFragment.ARG_PROJECT_ID, PROJECT_ID); args.putString(ProjectFragment.ARG_USERNAME, USERNAME); // when activity.onProjectSelected(PROJECT_ID, USERNAME); // then verify(projectFragment).setArguments(args); verifyNoMoreInteractions(projectFragment); assertCorrectFragmentShown(MainActivity.PROJECT_DETAIL_TAG, projectFragment); } @Test public void shouldCallProjectListFromMenu() { // when activity.onProjectSelected(PROJECT_ID, USERNAME); activity.menuMyProjectsClicked(); // then assertCorrectFragmentShown(MainActivity.PROJECTS_TAG, projectsFragment); // when activity.onBackPressed(); // then assertTrue("activity finished", shadowOf(activity).isFinishing()); } private void assertCorrectFragmentShown(String tag, Fragment fragment) { FragmentManager fragmentManager = activity.getSupportFragmentManager(); String lastBackStackEntry = fragmentManager.getBackStackEntryAt(fragmentManager.getBackStackEntryCount() - 1).getName(); assertEquals("Fragment was added", tag, lastBackStackEntry); assertEquals("Correct Fragment was added", fragment, fragmentManager.findFragmentByTag(lastBackStackEntry)); } }