package io.graceland.inject;
import javax.servlet.Filter;
import org.junit.Test;
import com.google.common.collect.ImmutableList;
import com.google.inject.Guice;
import com.google.inject.Injector;
import io.graceland.filter.FilterSpec;
import io.graceland.plugin.AbstractPlugin;
import io.graceland.testing.TestBundle;
import io.graceland.testing.TestCommand;
import io.graceland.testing.TestFilter;
import io.graceland.testing.TestHealthCheck;
import io.graceland.testing.TestManaged;
import io.graceland.testing.TestTask;
import static org.hamcrest.Matchers.empty;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
public class InjectorWrapperTest {
@Test
public void build_with_an_injector() {
Injector injector = mock(Injector.class);
InjectorWrapper.wrap(injector);
}
@Test(expected = NullPointerException.class)
public void injector_cannot_be_null() {
InjectorWrapper.wrap(null);
}
@Test
public void returns_empty_sets_when_nothing_bound() {
Injector injector = Guice.createInjector();
InjectorWrapper wrapper = InjectorWrapper.wrap(injector);
assertThat(wrapper.getJerseyComponents(), is(empty()));
assertThat(wrapper.getHealthChecks(), is(empty()));
assertThat(wrapper.getTasks(), is(empty()));
assertThat(wrapper.getManaged(), is(empty()));
assertThat(wrapper.getBundles(), is(empty()));
assertThat(wrapper.getCommands(), is(empty()));
}
@Test
public void returns_items_from_both_a_class_and_an_instance() {
Injector injector = Guice.createInjector(
new AbstractPlugin() {
@Override
protected void configure() {
bindJerseyComponent(new Object());
bindJerseyComponent(Object.class);
bindHealthCheck(new TestHealthCheck());
bindHealthCheck(TestHealthCheck.class);
bindTask(new TestTask());
bindTask(TestTask.class);
bindManaged(new TestManaged());
bindManaged(TestManaged.class);
bindBundle(new TestBundle());
bindBundle(TestBundle.class);
bindCommand(new TestCommand());
bindCommand(TestCommand.class);
buildFilter(new TestFilter()).bind();
buildFilter(TestFilter.class).bind();
}
}
);
InjectorWrapper wrapper = InjectorWrapper.wrap(injector);
assertThat(wrapper.getJerseyComponents().size(), is(2));
assertThat(wrapper.getHealthChecks().size(), is(2));
assertThat(wrapper.getTasks().size(), is(2));
assertThat(wrapper.getManaged().size(), is(2));
assertThat(wrapper.getBundles().size(), is(2));
assertThat(wrapper.getCommands().size(), is(2));
assertThat(wrapper.getFilterSpecs().size(), is(2));
}
@Test
public void returns_filters_in_priority_order() {
final Filter filter1 = mock(Filter.class);
final Filter filter2 = mock(Filter.class);
final Filter filter3 = mock(Filter.class);
Injector injector = Guice.createInjector(
new AbstractPlugin() {
@Override
protected void configure() {
buildFilter(filter2).withPriority(0).bind();
buildFilter(filter1).withPriority(-10).bind();
buildFilter(filter3).withPriority(100).bind();
}
}
);
InjectorWrapper wrapper = InjectorWrapper.wrap(injector);
ImmutableList<FilterSpec> filterSpecs = wrapper.getFilterSpecs();
assertThat(filterSpecs.get(0).getFilter(), is(filter1));
assertThat(filterSpecs.get(1).getFilter(), is(filter2));
assertThat(filterSpecs.get(2).getFilter(), is(filter3));
}
}