package com.rapidftr.controllers;
import com.rapidftr.controllers.internal.Dispatcher;
import com.rapidftr.datastore.Children;
import com.rapidftr.datastore.ChildrenRecordStore;
import com.rapidftr.datastore.StringField;
import com.rapidftr.model.Child;
import com.rapidftr.model.ChildBuilder;
import com.rapidftr.screens.SearchChildScreen;
import com.rapidftr.screens.internal.UiStack;
import org.junit.Before;
import org.junit.Test;
import static org.mockito.Mockito.*;
public class SearchChildControllerTest {
private SearchChildScreen searchChildScreen;
private UiStack uiStack;
private ChildrenRecordStore recordStore;
private Dispatcher dispatcher;
private SearchChildController controller;
@Before
public void setup() {
searchChildScreen = mock(SearchChildScreen.class);
uiStack = mock(UiStack.class);
recordStore = mock(ChildrenRecordStore.class);
dispatcher = mock(Dispatcher.class);
controller = new SearchChildController(searchChildScreen, uiStack, recordStore, dispatcher);
}
@Test
public void shouldSearchChildrenBasedOnCertainQueryAndDisplayThemSortedByName() {
String query = "some search query";
Child firstChild = new ChildBuilder().withName("aaaaaa").build();
Child secondChild = new ChildBuilder().withName("cccccc").build();
Child thirdChild = new ChildBuilder().withName("bbbbbb").build();
Children children = mock(Children.class);
Children childrenSortedByName = new Children(new Child[]{firstChild, thirdChild, secondChild});
when(recordStore.search(query)).thenReturn(children);
when(children.count()).thenReturn(1);
when(children.sortBy(new StringField("name"))).thenReturn(childrenSortedByName);
controller.searchAndDisplayChildren(query);
verify(recordStore).search(query);
verify(dispatcher).viewChildren(childrenSortedByName);
}
@Test
public void shouldShowNoSearchResultAlertWhenNoChildrenFound() {
String query = "some search query";
Children emptyChildren = new Children(new Child[0]);
when(recordStore.search(query)).thenReturn(emptyChildren);
controller.searchAndDisplayChildren(query);
verify(searchChildScreen).showNoSearchResultsAlert();
}
}