package com.rapidftr.controllers; import com.rapidftr.controllers.internal.Dispatcher; import com.rapidftr.datastore.Children; import com.rapidftr.datastore.ChildrenRecordStore; import com.rapidftr.model.Child; import com.rapidftr.model.ChildFactory; import com.rapidftr.screens.ViewChildrenScreen; import com.rapidftr.screens.internal.UiStack; import org.junit.Before; import org.junit.Test; import static org.mockito.Mockito.*; public class ViewChildrenControllerTest { private ViewChildrenScreen viewChildrenScreen; private UiStack uiStack; private ChildrenRecordStore recordStore; private ViewChildrenController controller; private Dispatcher dispatcher; @Before public void setup() { viewChildrenScreen = mock(ViewChildrenScreen.class); uiStack = mock(UiStack.class); recordStore = mock(ChildrenRecordStore.class); dispatcher = mock(Dispatcher.class); controller = new ViewChildrenController(this.viewChildrenScreen, uiStack, recordStore, dispatcher); } @Test public void shouldShowChildrenSortedByName() { Children children = new Children(new Child[]{new Child("10/10/2010"), new Child("10/10/2011")}); when(recordStore.getAllSortedByName()).thenReturn(children); controller.sortByName(); verify(viewChildrenScreen).setChildren(children); } @Test public void shouldShowChildrenSortedByRecentlyAdded() { Children children = new Children(new Child[]{new Child("10/10/2010"), new Child("10/10/2011")}); when(recordStore.getAllSortedByRecentlyAdded()).thenReturn(children); controller.sortByRecentlyAdded(); verify(viewChildrenScreen).setChildren(children); } @Test public void shouldShowChildrenSortedByRecentlyUpdated() { Children children = new Children(new Child[]{new Child("10/10/2010"), new Child("10/10/2011")}); when(recordStore.getAllSortedByRecentlyUpdated()).thenReturn(children); controller.sortByRecentlyUpdated(); verify(viewChildrenScreen).setChildren(children); } @Test public void shouldViewAllChildrenSortedByLastSortState() { Children childrenSortedByName = new Children(new Child[]{new Child("10/10/2010"), new Child("10/10/2011")}); Children childrenSortedByRecentAddition = new Children(new Child[]{new Child("12/11/2011"), new Child("11/11/2011")}); when(recordStore.getAllSortedByName()).thenReturn(childrenSortedByName); when(recordStore.getAllSortedByRecentlyAdded()).thenReturn(childrenSortedByRecentAddition); controller.sortByName(); verify(viewChildrenScreen).setChildren(childrenSortedByName); controller.sortByRecentlyAdded(); controller.viewAllChildren(); verify(viewChildrenScreen, times(2)).setChildren(childrenSortedByRecentAddition); } @Test public void shouldRefreshViewChildrenScreenAndGoToHomeScreen() { controller.popScreen(); verify(viewChildrenScreen).refresh(); verify(uiStack).clear(); verify(dispatcher).homeScreen(); } @Test public void shouldInvokeEditChild() { Child child = ChildFactory.newChild(); controller.editChild(child); verify(dispatcher).editChild(child, null); } }