diff --git a/modules/jooby-avaje-inject/pom.xml b/modules/jooby-avaje-inject/pom.xml index ff8e2db0ae..0a80f46ea2 100644 --- a/modules/jooby-avaje-inject/pom.xml +++ b/modules/jooby-avaje-inject/pom.xml @@ -39,8 +39,26 @@ - org.mockito - mockito-core + io.jooby + jooby-netty + test + + + + io.jooby + jooby-test + test + + + + io.jooby + jooby-jackson + test + + + + com.squareup.okhttp3 + okhttp test @@ -51,4 +69,34 @@ test + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + test + test-compile + + + + + -parameters + + + + io.jooby + jooby-apt + + + io.avaje + avaje-inject-generator + + + + + + diff --git a/modules/jooby-avaje-inject/src/main/java/io/jooby/avaje/inject/AvajeInjectModule.java b/modules/jooby-avaje-inject/src/main/java/io/jooby/avaje/inject/AvajeInjectModule.java index 7ac6f62a3f..d495c959fa 100644 --- a/modules/jooby-avaje-inject/src/main/java/io/jooby/avaje/inject/AvajeInjectModule.java +++ b/modules/jooby-avaje-inject/src/main/java/io/jooby/avaje/inject/AvajeInjectModule.java @@ -8,8 +8,6 @@ import java.util.List; import java.util.stream.Collectors; -import com.typesafe.config.Config; - import io.avaje.inject.BeanScope; import io.avaje.inject.BeanScopeBuilder; import io.jooby.Extension; @@ -68,7 +66,7 @@ public void install(Jooby application) throws Exception { e -> { final var key = e.getKey(); if (key.getName() == null) { - beanScope.provideDefault(key.getType(), e::getValue); + beanScope.provideDefault(key.getType(), e.getValue()::get); } else { beanScope.bean(key.getName(), key.getType(), e.getValue()); } @@ -80,7 +78,6 @@ public void install(Jooby application) throws Exception { // configuration properties final var config = environment.getConfig(); beanScope.propertyPlugin(new JoobyPropertyPlugin(config)); - beanScope.bean(Config.class, config); for (var entry : config.entrySet()) { String name = entry.getKey(); diff --git a/modules/jooby-avaje-inject/src/test/java/io/jooby/avaje/inject/AvajeInjectModuleTest.java b/modules/jooby-avaje-inject/src/test/java/io/jooby/avaje/inject/AvajeInjectModuleTest.java new file mode 100644 index 0000000000..aeb91e150e --- /dev/null +++ b/modules/jooby-avaje-inject/src/test/java/io/jooby/avaje/inject/AvajeInjectModuleTest.java @@ -0,0 +1,25 @@ +package io.jooby.avaje.inject; + +import io.jooby.avaje.inject.app.TestApp; +import io.jooby.test.JoobyTest; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +import java.io.IOException; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class AvajeInjectModuleTest { + + static OkHttpClient client = new OkHttpClient(); + + @JoobyTest(TestApp.class) + public void shouldPropagateJoobyServicesToAvajeBeanScope(String serverPath) throws IOException { + Request request = new Request.Builder().url(serverPath + "ping").build(); + + try (Response response = client.newCall(request).execute()) { + assertEquals("test", response.body().string()); + } + } +} diff --git a/modules/jooby-avaje-inject/src/test/java/io/jooby/avaje/inject/app/Controller.java b/modules/jooby-avaje-inject/src/test/java/io/jooby/avaje/inject/app/Controller.java new file mode 100644 index 0000000000..f455f6b2a3 --- /dev/null +++ b/modules/jooby-avaje-inject/src/test/java/io/jooby/avaje/inject/app/Controller.java @@ -0,0 +1,36 @@ +package io.jooby.avaje.inject.app; + +import com.fasterxml.jackson.databind.json.JsonMapper; +import com.typesafe.config.Config; +import io.avaje.inject.InjectModule; +import io.jooby.annotation.GET; +import io.jooby.annotation.Path; +import jakarta.inject.Inject; +import jakarta.inject.Named; +import jakarta.inject.Singleton; + +@Singleton +@Path("") +@InjectModule(requires = {JsonMapper.class, Config.class, String.class}) +public class Controller { + + private final JsonMapper jsonMapper; + private final Config config; + private final String env; + + @Inject + public Controller(JsonMapper jsonMapper, Config config, @Named("application.env") String env) { + this.jsonMapper = jsonMapper; + this.config = config; + this.env = env; + } + + @GET + @Path("/ping") + public String ping() { + jsonMapper.version(); + config.isEmpty(); + + return this.env; + } +} diff --git a/modules/jooby-avaje-inject/src/test/java/io/jooby/avaje/inject/app/TestApp.java b/modules/jooby-avaje-inject/src/test/java/io/jooby/avaje/inject/app/TestApp.java new file mode 100644 index 0000000000..f091511c98 --- /dev/null +++ b/modules/jooby-avaje-inject/src/test/java/io/jooby/avaje/inject/app/TestApp.java @@ -0,0 +1,24 @@ +package io.jooby.avaje.inject.app; + +import com.fasterxml.jackson.databind.json.JsonMapper; +import com.typesafe.config.Config; +import io.jooby.Jooby; +import io.jooby.avaje.inject.AvajeInjectModule; +import io.jooby.jackson.JacksonModule; + +public class TestApp extends Jooby { + + { + install(new JacksonModule()); + install(AvajeInjectModule.of()); + + mvc(Controller.class); + + onStarted(() -> { + JsonMapper jsonMapper = require(JsonMapper.class); + Config config = require(Config.class); + jsonMapper.version(); + config.isEmpty(); + }); + } +}