package com.rapidftr.controllers; import static junit.framework.Assert.assertEquals; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.json.me.JSONArray; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import com.rapidftr.Key; import com.rapidftr.controllers.internal.Dispatcher; import com.rapidftr.datastore.ChildrenRecordStore; import com.rapidftr.datastore.FormStore; import com.rapidftr.datastore.MockStore; import com.rapidftr.form.Forms; import com.rapidftr.model.Child; import com.rapidftr.model.ChildFactory; import com.rapidftr.screens.ManageChildScreen; import com.rapidftr.screens.internal.UiStack; import com.rapidftr.utilities.CustomDialog; import com.rapidftr.utilities.DateFormatter; public class ManageChildControllerTest { private static final String CURRENT_DATE_TIME = "2010-11-2 01:00:00GMT"; private ManageChildScreen screen; private UiStack uiStack; private FormStore formStore; private ChildrenRecordStore childRecordStore; private Dispatcher dispatcher; private ManageChildController manageChildController; private DateFormatter dateFormatter; private Forms forms; private CustomDialog customDialog; @Before public void setup() throws Exception { screen = mock(ManageChildScreen.class); dispatcher = mock(Dispatcher.class); uiStack = mock(UiStack.class); childRecordStore = new ChildrenRecordStore(new MockStore(new Key("childrenrecord"))); formStore = new FormStore(new MockStore(new Key("forms"))); manageChildController = new ManageChildController(screen, uiStack, formStore, childRecordStore, dispatcher); dateFormatter = mock(DateFormatter.class); when(dateFormatter.getCurrentFormattedDateTime()).thenReturn(CURRENT_DATE_TIME); forms = new Forms(new JSONArray(twoForms())); customDialog = mock(CustomDialog.class); manageChildController.setCustomDialog(customDialog); } @Test public void shouldCreateAndSaveANewChild(){ Mockito.doNothing().when(customDialog).alert(anyString()); assertChild(); } private void assertChild() { manageChildController.validateOnSave(forms, dateFormatter); assertEquals(1,childRecordStore.getAll().count()); Child actualChild = childRecordStore.getChildAt(0); assertEquals("New",actualChild.childStatus().getStatusString()); assertEquals(CURRENT_DATE_TIME,actualChild.getField("created_at")); verify(customDialog, times(0)).alert(anyString()); } @Test public void shouldUpdateAnExistingChild(){ Mockito.doNothing().when(customDialog).alert(anyString()); manageChildController.setChild(ChildFactory.existingChild("id")); assertChild(); Child actualChild = childRecordStore.getChildAt(0); assertEquals("id", actualChild.getField("_id")); assertEquals("uniqueid", actualChild.getField("unique_identifier")); } private String twoForms() { return "[{'name':'Basic Details','unique_id':'basic_details', 'enabled':true},{'name':'Family Details','unique_id':'family_details', 'enabled':true}]"; } }