package org.jooby.elasticsearch;
import static org.easymock.EasyMock.expect;
import static org.junit.Assert.assertEquals;
import java.util.List;
import org.elasticsearch.client.RestClient;
import org.jooby.Env;
import org.jooby.test.MockUnit;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import com.google.inject.Binder;
import com.google.inject.binder.AnnotatedBindingBuilder;
import com.google.inject.multibindings.Multibinder;
import com.typesafe.config.Config;
import com.typesafe.config.ConfigFactory;
import javaslang.control.Try.CheckedRunnable;
@RunWith(PowerMockRunner.class)
@PrepareForTest({Elasticsearch.class, Multibinder.class})
@PowerMockIgnore("javax.net.ssl.*")
public class ElasticsearchTest {
private MockUnit.Block onStop = unit -> {
Env env = unit.get(Env.class);
expect(env.onStop(unit.capture(CheckedRunnable.class))).andReturn(env);
};
private MockUnit.Block nb = unit -> {
RestClient client = unit.mock(RestClient.class);
unit.registerMock(RestClient.class, client);
};
@SuppressWarnings("unchecked")
private MockUnit.Block bindings = unit -> {
AnnotatedBindingBuilder<RestClient> abbclient = unit.mock(AnnotatedBindingBuilder.class);
abbclient.toInstance(unit.capture(RestClient.class));
//abbclient.toInstance(anyObject(RestClient.class));
Binder binder = unit.get(Binder.class);
expect(binder.bind(RestClient.class)).andReturn(abbclient);
};
@Test
public void defaults() throws Exception {
new MockUnit(Env.class, Config.class, Binder.class)
.expect(nb)
.expect(bindings)
.expect(onStop)
.run(unit -> {
new Elasticsearch()
.configure(unit.get(Env.class), unit.get(Config.class), unit.get(Binder.class));
}, unit -> {
List<RestClient> captured = unit.captured(RestClient.class);
assert captured.size() == 1;
List<CheckedRunnable> callbacks = unit.captured(CheckedRunnable.class);
callbacks.get(0).run();
});
}
@Test
public void config() throws Exception {
Config config = ConfigFactory.parseResources(Elasticsearch.class, "es.conf");
assertEquals(config, new Elasticsearch().config());
}
}