package org.ovirt.engine.ui.frontend.server.gwt;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.Spy;
import org.mockito.junit.MockitoJUnitRunner;
import org.ovirt.engine.core.common.interfaces.BackendLocal;
import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import com.google.gwt.user.client.rpc.SerializationException;
@RunWith(MockitoJUnitRunner.class)
public class GenericApiGWTServiceImplTest {
@Mock
private BackendLocal backendLocal;
@Mock
private HttpSession session;
private HttpServletRequest request;
private HttpServletResponse response;
@Spy
private GenericApiGWTServiceImpl underTest = new GenericApiGWTServiceImpl() {
// add an instance initializer to insert request and response
{
this.perThreadRequest = new InheritableThreadLocal<>();
this.perThreadResponse = new InheritableThreadLocal<>();
request = mock(HttpServletRequest.class);
response = mock(HttpServletResponse.class);
this.perThreadRequest.set(request);
this.perThreadResponse.set(response);
}
};
@Before
public void setup() throws ServletException, IOException, SerializationException {
underTest.setBackend(backendLocal);
when(request.getSession()).thenReturn(session);
}
@Test
public void multiQueryWithNulls() {
underTest.runMultipleQueries(null, null);
Mockito.verifyZeroInteractions(backendLocal);
}
@Test
public void multiQueryWithOddParams() {
ArrayList<VdcQueryType> queryTypeList = new ArrayList<>(Arrays.asList(
VdcQueryType.Search));
ArrayList<VdcQueryParametersBase> queryParamsList = new ArrayList<>(Arrays.asList(
new VdcQueryParametersBase(),
new VdcQueryParametersBase()));
underTest.runMultipleQueries(queryTypeList, queryParamsList);
Mockito.verifyZeroInteractions(backendLocal);
}
@Test
public void multiQueryValid() {
ArrayList<VdcQueryType> queryTypeList = new ArrayList<>(Arrays.asList(
VdcQueryType.Search,
VdcQueryType.Search));
ArrayList<VdcQueryParametersBase> queryParamsList = new ArrayList<>(Arrays.asList(
new VdcQueryParametersBase(),
new VdcQueryParametersBase()));
underTest.runMultipleQueries(queryTypeList, queryParamsList);
Mockito.verify(backendLocal, Mockito.times(2)).runQuery(any(VdcQueryType.class),
any(VdcQueryParametersBase.class));
}
}