package com.prasanna.android.stacknetwork.model;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import java.util.Arrays;
import java.util.Map;
import org.junit.Test;
import com.prasanna.android.stacknetwork.model.SearchCriteria.SearchSort;
public class SearchCriteriaTest {
private static final String QUERY = "query";
@Test
public void build() {
SearchCriteria searchCriteria =
SearchCriteria.newCriteria(QUERY).includeTags(Arrays.asList("tag1", "tag2"))
.excludeTags(Arrays.asList("tag3", "tag4")).mustBeAnswered().setMinAnswers(5).sortBy(SearchSort.VOTES)
.build();
assertNotNull(searchCriteria);
assertCriteriaMap(searchCriteria, "1");
assertCriteriaMap(searchCriteria.nextPage(), "2");
clearBuildAndAssert(searchCriteria);
}
@Test
public void buildHandlesError() {
SearchCriteria searchCriteria =
SearchCriteria.newCriteria(null).includeTags(null).excludeTags(null).setMinAnswers(-1).sortBy(null).build();
assertNotNull(searchCriteria);
assertNull(searchCriteria.getMap().get(SearchCriteria.Q));
assertNull(searchCriteria.getMap().get(SearchCriteria.TAGGED));
assertNull(searchCriteria.getMap().get(SearchCriteria.NOT_TAGGED));
assertNull(searchCriteria.getMap().get(SearchCriteria.ANSWERS));
assertNull(searchCriteria.getMap().get(SearchCriteria.ACCEPTED));
assertNull(searchCriteria.getMap().get(SearchCriteria.SORT));
}
private void clearBuildAndAssert(SearchCriteria searchCriteria) {
searchCriteria.clear();
searchCriteria =
SearchCriteria.newCriteria().includeTags(Arrays.asList("tag5", "tag6")).sortBy(SearchSort.CREATION).build();
assertNotNull(searchCriteria);
assertNull(searchCriteria.getMap().get(SearchCriteria.Q));
assertNull(searchCriteria.getMap().get(SearchCriteria.NOT_TAGGED));
assertNull(searchCriteria.getMap().get(SearchCriteria.ANSWERS));
assertNull(searchCriteria.getMap().get(SearchCriteria.ACCEPTED));
assertEquals("tag5;tag6", searchCriteria.getMap().get(SearchCriteria.TAGGED));
assertEquals(SearchSort.CREATION.getValue(), searchCriteria.getMap().get(SearchCriteria.SORT));
assertEquals("1", searchCriteria.getMap().get(SearchCriteria.PAGE));
assertEquals(String.valueOf(SearchCriteria.DEFAULT_PAGE_SIZE), searchCriteria.getMap().get(SearchCriteria.PAGESIZE));
}
private void assertCriteriaMap(SearchCriteria builtCriteria, String page) {
Map<String, String> criteriaMap = builtCriteria.getMap();
assertNotNull(criteriaMap);
assertEquals(QUERY, criteriaMap.get(SearchCriteria.Q));
assertEquals(String.valueOf(true), criteriaMap.get(SearchCriteria.ACCEPTED));
assertEquals("5", criteriaMap.get(SearchCriteria.ANSWERS));
assertEquals("tag2;tag1", criteriaMap.get(SearchCriteria.TAGGED));
assertEquals("tag4;tag3", criteriaMap.get(SearchCriteria.NOT_TAGGED));
assertEquals(SearchSort.VOTES.getValue(), criteriaMap.get(SearchCriteria.SORT));
assertEquals(page, criteriaMap.get(SearchCriteria.PAGE));
assertEquals(String.valueOf(SearchCriteria.DEFAULT_PAGE_SIZE), criteriaMap.get(SearchCriteria.PAGESIZE));
}
}