package io.robe.common.service.search;
import com.google.common.collect.Lists;
import io.robe.common.service.search.model.SearchModel;
import org.junit.Test;
import javax.ws.rs.core.MultivaluedHashMap;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.UriInfo;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class SearchFactoryTest {
@Test
public void provide() throws Exception {
SearchModel expected = new SearchModel();
expected.setQ("qparam");
expected.setOffset(1);
expected.setLimit(10);
expected.setFields(new String[]{"field1", "field2"});
expected.setSort(new String[]{"+field1", "-field2"});
expected.setFilterExpression("field1=1");
MultivaluedMap<String, String> queryParameters = new MultivaluedHashMap<>();
queryParameters.put("_q", Lists.newArrayList("qparam"));
queryParameters.put("_offset", Lists.newArrayList("1"));
queryParameters.put("_limit", Lists.newArrayList("10"));
queryParameters.put("_fields", Lists.newArrayList("field1,field2"));
queryParameters.put("_sort", Lists.newArrayList("+field1,-field2"));
queryParameters.put("_filter", Lists.newArrayList("field1=1"));
queryParameters.put("_none", Lists.newArrayList("none"));
UriInfo uriInfo = mock(UriInfo.class);
when(uriInfo.getQueryParameters()).thenReturn(queryParameters);
SearchFactory factory = mock(SearchFactory.class);
when(factory.getUriInfo()).thenReturn(uriInfo);
when(factory.getMethod()).thenReturn("GET");
when(factory.provide()).thenCallRealMethod();
assertEquals(uriInfo, factory.getUriInfo());
assertEquals("GET", factory.getMethod());
SearchModel actual = factory.provide();
assertEquals(expected, actual);
}
}