package zenproject.meditation.android.ui.menu.dialogs; import android.app.FragmentManager; import org.fest.assertions.api.Assertions; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; import zenproject.meditation.android.BuildConfig; import zenproject.meditation.android.ContextRetriever; import zenproject.meditation.android.RobolectricLauncherGradleTestRunner; import zenproject.meditation.android.ZenTestBase; import zenproject.meditation.android.activities.ZenActivity; import zenproject.meditation.android.ui.menu.dialogs.brush.BrushOptionsDialog; import zenproject.meditation.android.ui.menu.dialogs.flower.FlowerOptionsDialog; import zenproject.meditation.android.ui.menu.dialogs.flower.FlowerSelectedListener; import static org.mockito.Mockito.*; @RunWith(RobolectricLauncherGradleTestRunner.class) @Config(constants = BuildConfig.class) public class NavigatorTest extends ZenTestBase { @Mock private BrushOptionsDialog brushOptionsDialog; @Mock private FlowerOptionsDialog flowerOptionsDialog; @Mock private FragmentManager fragmentManager; @Mock private FlowerSelectedListener flowerSelectedListener; @Mock private ZenActivity zenActivity; private Navigator navigator; @Before public void setUp() { MockitoAnnotations.initMocks(this); navigator = new Navigator(fragmentManager, brushOptionsDialog, flowerOptionsDialog); } @Test public void testThatWhenOpenBrushSelectionDialogIfDialogNotAlreadyAddedThenShowWillBeCalled() { navigator.openBrushSelectionDialog(); verify(brushOptionsDialog).show(fragmentManager, BrushOptionsDialog.TAG); } @Test public void testThatWhenOpenBrushSelectionDialogIfDialogAlreadyIsNotAddedThenShowWillNotBeCalled() { givenThatBrushOptionsDialogIsAdded(); navigator.openBrushSelectionDialog(); verify(brushOptionsDialog, never()).show(any(FragmentManager.class), anyString()); } private void givenThatBrushOptionsDialogIsAdded() { when(brushOptionsDialog.isAdded()).thenReturn(true); } @Test public void testThatWhenOpenFlowerSelectionDialogIfDialogNotAlreadyAddedThenShowWillBeCalled() { navigator.openFlowerSelectionDialog(); verify(flowerOptionsDialog).show(fragmentManager, FlowerOptionsDialog.TAG); } @Test public void testThatWhenOpenFlowerSelectionDialogIfDialogAlreadyIsNotAddedThenShowWillNotBeCalled() { givenThatFlowerOptionsDialogIsAdded(); navigator.openFlowerSelectionDialog(); verify(flowerOptionsDialog, never()).show(any(FragmentManager.class), anyString()); } private void givenThatFlowerOptionsDialogIsAdded() { when(flowerOptionsDialog.isAdded()).thenReturn(true); } @Test public void testThatNewInstanceReturnsNotNullNavigator() { givenThatHasActivity(); Assertions.assertThat(Navigator.newInstance()).isNotNull(); } @Test public void testThatNewInstanceReturnsANewInstance() { givenThatHasActivity(); Navigator firstInstance = Navigator.newInstance(); Navigator secondInstance = Navigator.newInstance(); Assertions.assertThat(firstInstance).isNotEqualTo(secondInstance); } private void givenThatHasActivity() { ContextRetriever.INSTANCE.inject(zenActivity); } }