package it.cnr.isti.driver.web;

import static org.mockito.Mockito.stub;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
import it.cnr.isti.driver.test.CommonRSTestCase;
import it.cnr.isti.driver.utils.ResultSet;
import it.cnr.isti.driver.utils.SearchClient;
import it.cnr.isti.driver.utils.SearchServiceLocator;
import it.cnr.isti.driver.utils.StaticSearchServiceLocator;

import org.mockito.MockitoAnnotations.Mock;

public class SynchronousSearchEngineTest extends CommonRSTestCase {

	private static final String cqlQuery = "test=SynchronousSearchEngineTest";
	
	@Mock
	protected SearchClient searchClient;
	
	protected SearchServiceLocator searchLocator;
	protected SynchronousSearchEngine searchEngine;
	
	protected void setUp() throws Exception {
		super.setUp();
		
		stub(searchClient.search(cqlQuery)).toReturn(epr);
		
		StaticSearchServiceLocator locator = new StaticSearchServiceLocator();
		locator.setService(searchClient);
		this.searchLocator = locator;
		
		this.searchEngine = new SynchronousSearchEngine();
		searchEngine.setSearchLocator(searchLocator);
	}

	public void testResultSetForQuery() {
		ResultSet rs = searchEngine.resultSetForQueryOrEpr(cqlQuery, null);
		verify(searchClient).search(cqlQuery);
		assertEquals(epr, rs.getEpr());
	}
	
	public void testResultSetForEpr() {
		ResultSet rs = searchEngine.resultSetForQueryOrEpr(null, epr);
		verifyZeroInteractions(searchClient);
		assertEquals(epr, rs.getEpr());
	}

	public void testPrepareQuery() {
		searchEngine.prepareQuery(cqlQuery);
		verifyZeroInteractions(searchClient);
	}

}
