package org.yaac.server.service;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.Map;
import java.util.logging.Logger;
import org.junit.Before;
import org.junit.Test;
import org.yaac.server.conf.YaacModule;
import org.yaac.server.delegate.UserServiceDelegate;
import org.yaac.server.egql.SelectStatement;
import org.yaac.server.egql.StatementContext;
import org.yaac.shared.egql.Request;
import org.yaac.shared.egql.Response;
import com.google.appengine.api.users.User;
import com.google.common.collect.ImmutableMap;
import com.google.appengine.tools.pipeline.Job2;
import com.google.appengine.tools.pipeline.PipelineService;
import com.google.inject.Guice;
import com.google.inject.Injector;
/**
* @author Max Zhu (thebbsky@gmail.com)
*
*/
public class EGQLServiceImplTest {
private static Injector injector;
private static Logger logger;
@Before
public void setup() {
injector = Guice.createInjector(new YaacModule());
logger = injector.getInstance(Logger.class);
}
@SuppressWarnings("unchecked")
@Test
public void testExecute() {
// setup service
PipelineService mockPipeline = mock(PipelineService.class);
when(mockPipeline.startNewPipeline(
any(Job2.class), any(SelectStatement.class), any(StatementContext.class)
)).thenReturn("key1").thenReturn("key2");
UserServiceDelegate mockUserService = mock(UserServiceDelegate.class);
when(mockUserService.getCurrentUser()).thenReturn(new User("testing@gmail.com", "google"));
EGQLServiceImpl service = new EGQLServiceImpl(logger, mockPipeline, mockUserService);
// testing data
String command = "select a, b, c from d \n select e, f, g from h";
Request req = new Request(command, 100, 200);
// test
Response resp = service.execute(req);
Map<String, String> expected = ImmutableMap.<String, String>of(
"key1", "select a, b, c from d",
"key2", "select e, f, g from h");
assertEquals(expected, resp.getResponseMap());
}
}