package io.searchbox.core;
import com.google.gson.Gson;
import com.google.gson.JsonParser;
import org.json.JSONException;
import org.junit.Test;
import org.skyscreamer.jsonassert.JSONAssert;
import java.util.Arrays;
import java.util.Map;
import static org.junit.Assert.*;
/**
* @author Dogukan Sonmez
*/
public class MultiSearchTest {
@Test
public void singleMultiSearchWithoutIndex() throws JSONException {
String expectedData = " {\"index\" : \"_all\"}\n" +
"{\"query\" : {\"match_all\" : {}}}\n";
Search search = new Search.Builder("{\"query\" : {\"match_all\" : {}}}").build();
MultiSearch multiSearch = new MultiSearch.Builder(search).build();
assertEquals("POST", multiSearch.getRestMethodName());
assertEquals("/_msearch", multiSearch.getURI());
JSONAssert.assertEquals(expectedData, multiSearch.getData(null).toString(), false);
}
@Test
public void singleMultiSearchWitIndex() throws JSONException {
String expectedData = " {\"index\" : \"twitter\"}\n" +
"{\"query\" : {\"match_all\" : {}}}\n";
Search search = new Search.Builder("{\"query\" : {\"match_all\" : {}}}")
.addIndex("twitter")
.build();
MultiSearch multiSearch = new MultiSearch.Builder(search).build();
assertEquals("POST", multiSearch.getRestMethodName());
assertEquals("/_msearch", multiSearch.getURI());
JSONAssert.assertEquals(expectedData, multiSearch.getData(null).toString(), false);
}
@Test
public void multiSearchWitIndex() throws JSONException {
String expectedData = " {\"index\" : \"twitter\"}\n" +
"{\"query\" : {\"match_all\" : {}}}\n" +
"{\"index\" : \"_all\"}\n" +
"{\"query\" : {\"match_all\" : {}}}\n";
Search search = new Search.Builder("{\"query\" : {\"match_all\" : {}}}")
.addIndex("twitter")
.build();
Search search2 = new Search.Builder("{\"query\" : {\"match_all\" : {}}}").build();
MultiSearch multiSearch = new MultiSearch.Builder(search).addSearch(search2).build();
assertEquals("POST", multiSearch.getRestMethodName());
assertEquals("/_msearch", multiSearch.getURI());
JSONAssert.assertEquals(expectedData, multiSearch.getData(null).toString(), false);
}
@Test
public void equals() {
Search search1 = new Search.Builder("{\"match_all\" : {}}")
.addIndex("twitter")
.build();
Search search2 = new Search.Builder("{\"match_all\" : {}}").build();
MultiSearch multiSearch1 = new MultiSearch.Builder(Arrays.asList(search1, search2)).build();
MultiSearch multiSearch1Duplicate = new MultiSearch.Builder(Arrays.asList(search1, search2)).build();
assertEquals(multiSearch1, multiSearch1Duplicate);
}
@Test
public void equalsReturnsFalseForDifferentSearches() {
Search search1 = new Search.Builder("{\"match_all\" : {}}")
.addIndex("twitter")
.build();
Search search2 = new Search.Builder("{\"match_all\" : {}}").build();
MultiSearch multiSearch1 = new MultiSearch.Builder(search1).build();
MultiSearch multiSearch1Duplicate = new MultiSearch.Builder(search2).build();
assertNotEquals(multiSearch1, multiSearch1Duplicate);
}
@Test
public void multiSearchResponse() {
String json = "{\n" +
" \"responses\": [\n" +
" {\n" +
" \"_shards\":{\n" +
" \"total\" : 5,\n" +
" \"successful\" : 5,\n" +
" \"failed\" : 0\n" +
" },\n" +
" \"hits\":{\n" +
" \"total\" : 1,\n" +
" \"hits\" : [\n" +
" {\n" +
" \"_index\" : \"twitter\",\n" +
" \"_type\" : \"tweet\",\n" +
" \"_id\" : \"1\",\n" +
" \"_source\" : {\n" +
" \"user\" : \"kimchy\",\n" +
" \"postDate\" : \"2009-11-15T14:12:12\",\n" +
" \"message\" : \"trying out Elasticsearch\"\n" +
" },\n" +
" \"sort\" : [\n" +
" 1234.5678\n" +
" ]\n" +
" }\n" +
" ]\n" +
" }\n" +
" },\n" +
" {\n" +
" \"_shards\":{\n" +
" \"total\" : 5,\n" +
" \"successful\" : 5,\n" +
" \"failed\" : 0\n" +
" },\n" +
" \"hits\":{\n" +
" \"total\" : 0,\n" +
" \"hits\" : [ ]\n" +
" }\n" +
" },\n" +
" {\n" +
" \"error\": \"There was a \\\"test\\\" error\"\n" +
" }\n" +
" ]\n" +
"}";
MultiSearchResult multiSearchResult = new MultiSearchResult(new Gson());
multiSearchResult.setSucceeded(true);
multiSearchResult.setJsonString(json);
multiSearchResult.setJsonObject(new JsonParser().parse(json).getAsJsonObject());
assertNotNull(multiSearchResult.getResponses());
assertEquals(3, multiSearchResult.getResponses().size());
assertFalse(multiSearchResult.getResponses().get(0).isError);
assertNull(multiSearchResult.getResponses().get(0).errorMessage);
assertNull(multiSearchResult.getResponses().get(0).searchResult.getMaxScore());
assertEquals(1, multiSearchResult.getResponses().get(0).searchResult.getHits(Map.class).size());
assertFalse(multiSearchResult.getResponses().get(1).isError);
assertNull(multiSearchResult.getResponses().get(1).errorMessage);
assertNull(multiSearchResult.getResponses().get(1).searchResult.getMaxScore());
assertEquals(0, multiSearchResult.getResponses().get(1).searchResult.getHits(Map.class).size());
assertTrue(multiSearchResult.getResponses().get(2).isError);
assertEquals("There was a \"test\" error", multiSearchResult.getResponses().get(2).errorMessage);
assertNull(multiSearchResult.getResponses().get(2).searchResult);
}
}