package pl.edu.icm.saos.search.search.service;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.when;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.util.NamedList;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.runners.MockitoJUnitRunner;
import org.mockito.stubbing.Answer;
import pl.edu.icm.saos.search.search.model.JudgmentSearchResult;
import pl.edu.icm.saos.search.search.model.SearchResults;
/**
* @author madryk
*/
@RunWith(MockitoJUnitRunner.class)
public class SearchResultTranslatorImplTest {
private SearchResultsTranslatorImpl<JudgmentSearchResult> resultsTranslator = new SearchResultsTranslatorImpl<JudgmentSearchResult>();
@Mock
private SearchResultTranslator<JudgmentSearchResult> searchResultTranslator;
@Before
public void setUp() {
resultsTranslator.setSearchResultTranslator(searchResultTranslator);
}
//------------------------ LOGIC --------------------------
@Test
public void translate() {
when(searchResultTranslator.translateSingle(any(SolrDocument.class))).thenAnswer(new Answer<JudgmentSearchResult>() {
@Override
public JudgmentSearchResult answer(InvocationOnMock invocation) throws Throwable {
SolrDocument argument = (SolrDocument) invocation.getArguments()[0];
JudgmentSearchResult result = new JudgmentSearchResult();
result.setId((int) argument.getFieldValue("databaseId"));
return result;
}
});
SolrDocument firstDocument = fetchBasicDocument(1);
SolrDocument secondDocument = fetchBasicDocument(2);
SolrDocument thirdDocument = fetchBasicDocument(4);
QueryResponse response = createBasicSolrResponse(205, firstDocument, secondDocument, thirdDocument);
SearchResults<JudgmentSearchResult> results = resultsTranslator.translate(response);
assertEquals(3, results.getResults().size());
assertEquals(205, results.getTotalResults());
JudgmentSearchResult firstResult = results.getResults().get(0);
assertEquals(1, firstResult.getId());
JudgmentSearchResult secondResult = results.getResults().get(1);
assertEquals(2, secondResult.getId());
JudgmentSearchResult thirdResult = results.getResults().get(2);
assertEquals(4, thirdResult.getId());
}
//------------------------ PRIVATE --------------------------
private SolrDocument fetchBasicDocument(int databaseId) {
SolrDocument doc = new SolrDocument();
doc.addField("databaseId", databaseId);
return doc;
}
private QueryResponse createBasicSolrResponse(long totalResults, SolrDocument ... documents) {
QueryResponse response = new QueryResponse();
SolrDocumentList documentList = new SolrDocumentList();
documentList.setNumFound(totalResults);
for (SolrDocument doc : documents) {
documentList.add(doc);
}
NamedList<Object> namedList = new NamedList<Object>();
namedList.add("response", documentList);
response.setResponse(namedList);
return response;
}
}