package tc.oc;
import java.io.InputStream;
import java.time.Instant;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.inject.Inject;
import javax.inject.Named;
import com.google.gson.Gson;
import com.google.inject.Guice;
import com.google.inject.Provides;
import org.junit.Before;
import tc.oc.api.ApiManifest;
import tc.oc.api.config.ApiConfiguration;
import tc.oc.api.http.HttpClient;
import tc.oc.api.http.HttpManifest;
import tc.oc.api.maps.MapService;
import tc.oc.api.maps.NullMapService;
import tc.oc.api.model.ModelBinders;
import tc.oc.api.model.ModelSync;
import tc.oc.api.queue.QueueClient;
import tc.oc.api.queue.QueueManifest;
import tc.oc.api.servers.NullServerService;
import tc.oc.api.servers.ServerService;
import tc.oc.api.sessions.NullSessionService;
import tc.oc.api.sessions.SessionService;
import tc.oc.api.users.NullUserService;
import tc.oc.api.users.UserService;
import tc.oc.commons.core.inject.HybridManifest;
import tc.oc.commons.core.inject.TestModule;
import tc.oc.inject.ProtectedBinder;
public abstract class ApiTest {
protected static final String ISO_DATE = "2000-01-01T00:00:00Z";
protected static final Instant INSTANT = Instant.parse(ISO_DATE);
class ApiTestModule extends HybridManifest implements ModelBinders {
@Override
protected void configure() {
install(new TestModule());
install(new ApiManifest());
install(new HttpManifest());
install(new QueueManifest());
bind(ExecutorService.class)
.annotatedWith(ModelSync.class)
.toInstance(Executors.newSingleThreadExecutor());
bind(ApiConfiguration.class).toInstance(() -> "primary_queue");
publicBinder().forOptional(ServerService.class).setBinding().to(NullServerService.class);
publicBinder().forOptional(UserService.class).setBinding().to(NullUserService.class);
publicBinder().forOptional(SessionService.class).setBinding().to(NullSessionService.class);
publicBinder().forOptional(MapService.class).setBinding().to(NullMapService.class);
requestInjection(ApiTest.this);
}
@Provides @Named("config.yml")
InputStream configYml() {
return ClassLoader.getSystemResourceAsStream("config.yml");
}
}
protected @Inject Gson gson;
protected @Inject QueueClient queueClient;
protected @Inject HttpClient httpClient;
@Before
public void setUp() {
final ApiTestModule module = new ApiTestModule();
//ElementPrinter.visit(module);
Guice.createInjector(binder -> ProtectedBinder.newProtectedBinder(binder).install(module));
}
}