diff --git a/README.md b/README.md index cdf6203..3bf22a5 100644 --- a/README.md +++ b/README.md @@ -102,7 +102,7 @@ class PostgresSpringTest { ### Example 2: Using Spring-TestContainers ```java -import io.flowinquiry.testcontainers.jdbc.EnablePostgreSQL; +import io.flowinquiry.testcontainers.jdbc.postgresql.EnablePostgreSQL; import org.junit.jupiter.api.Test; @ExtendWith(SpringExtension.class) diff --git a/examples/spring-postgresql/src/test/java/io/flowinquiry/testcontainers/examples/postgresql/PostgresqlTest.java b/examples/spring-postgresql/src/test/java/io/flowinquiry/testcontainers/examples/postgresql/PostgresqlTest.java index 327ad0d..aba2c08 100644 --- a/examples/spring-postgresql/src/test/java/io/flowinquiry/testcontainers/examples/postgresql/PostgresqlTest.java +++ b/examples/spring-postgresql/src/test/java/io/flowinquiry/testcontainers/examples/postgresql/PostgresqlTest.java @@ -7,7 +7,7 @@ import io.flowinquiry.testcontainers.examples.postgresql.config.PostgresqlConfig; import io.flowinquiry.testcontainers.examples.postgresql.entity.Store; import io.flowinquiry.testcontainers.examples.postgresql.repository.StoreRepository; -import io.flowinquiry.testcontainers.jdbc.EnablePostgreSQL; +import io.flowinquiry.testcontainers.jdbc.postgresql.EnablePostgreSQL; import java.util.List; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; diff --git a/examples/springboot-mysql/src/test/java/io/flowinquiry/testcontainers/examples/mysql/MySqlDemoAppTest.java b/examples/springboot-mysql/src/test/java/io/flowinquiry/testcontainers/examples/mysql/MySqlDemoAppTest.java index 1790e39..e2bb2c4 100644 --- a/examples/springboot-mysql/src/test/java/io/flowinquiry/testcontainers/examples/mysql/MySqlDemoAppTest.java +++ b/examples/springboot-mysql/src/test/java/io/flowinquiry/testcontainers/examples/mysql/MySqlDemoAppTest.java @@ -6,7 +6,7 @@ import io.flowinquiry.testcontainers.examples.mysql.entity.Store; import io.flowinquiry.testcontainers.examples.mysql.repository.StoreRepository; -import io.flowinquiry.testcontainers.jdbc.EnableMySQL; +import io.flowinquiry.testcontainers.jdbc.mysql.EnableMySQL; import java.util.List; import org.junit.jupiter.api.Test; import org.slf4j.Logger; diff --git a/examples/springboot-postgresql/src/test/java/io/flowinquiry/testcontainers/examples/postgresql/PostgresqlDemoAppTest.java b/examples/springboot-postgresql/src/test/java/io/flowinquiry/testcontainers/examples/postgresql/PostgresqlDemoAppTest.java index 2ace2b1..088283f 100644 --- a/examples/springboot-postgresql/src/test/java/io/flowinquiry/testcontainers/examples/postgresql/PostgresqlDemoAppTest.java +++ b/examples/springboot-postgresql/src/test/java/io/flowinquiry/testcontainers/examples/postgresql/PostgresqlDemoAppTest.java @@ -6,7 +6,7 @@ import io.flowinquiry.testcontainers.examples.postgresql.entity.Store; import io.flowinquiry.testcontainers.examples.postgresql.repository.StoreRepository; -import io.flowinquiry.testcontainers.jdbc.EnablePostgreSQL; +import io.flowinquiry.testcontainers.jdbc.postgresql.EnablePostgreSQL; import java.util.List; import org.junit.jupiter.api.Test; import org.slf4j.Logger; diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 529c0b9..487a71f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ [versions] junit-jupiter = "5.12.2" -testcontainers = "1.21.1" +testcontainers = "1.21.2" spotless = "7.0.3" logback = "1.5.18" slf4j = "2.0.17" @@ -24,6 +24,7 @@ junit-platform-launcher = { group = "org.junit.platform", name = "junit-platform spring-bom = { group = "org.springframework", name = "spring-framework-bom", version.ref = "spring" } spring-boot-bom = { group = "org.springframework.boot", name = "spring-boot-dependencies", version.ref = "spring-boot" } spring-ai-bom = { group = "org.springframework.ai", name = "spring-ai-bom", version.ref = "spring-ai" } +testcontainers = { group = "org.testcontainers", name = "testcontainers", version.ref = "testcontainers" } testcontainers-jdbc = { group = "org.testcontainers", name = "jdbc", version.ref = "testcontainers" } testcontainers-mysql = { group = "org.testcontainers", name = "mysql", version.ref = "testcontainers" } testcontainers-postgresql = { group = "org.testcontainers", name = "postgresql", version.ref = "testcontainers" } diff --git a/modules/jdbc/build.gradle b/modules/jdbc/build.gradle new file mode 100644 index 0000000..13ba692 --- /dev/null +++ b/modules/jdbc/build.gradle @@ -0,0 +1,16 @@ +plugins { + id("buildlogic.java-library-conventions") +} + +repositories { + mavenCentral() +} + +dependencies { + api(project(":spring-testcontainers")) + api(libs.testcontainers.jdbc) +} + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/spring-testcontainers/src/main/java/io/flowinquiry/testcontainers/jdbc/EnableJdbcContainer.java b/modules/jdbc/src/main/java/io/flowinquiry/testcontainers/jdbc/EnableJdbcContainer.java similarity index 100% rename from spring-testcontainers/src/main/java/io/flowinquiry/testcontainers/jdbc/EnableJdbcContainer.java rename to modules/jdbc/src/main/java/io/flowinquiry/testcontainers/jdbc/EnableJdbcContainer.java diff --git a/spring-testcontainers/src/main/java/io/flowinquiry/testcontainers/jdbc/JdbcContainerExtension.java b/modules/jdbc/src/main/java/io/flowinquiry/testcontainers/jdbc/JdbcContainerExtension.java similarity index 96% rename from spring-testcontainers/src/main/java/io/flowinquiry/testcontainers/jdbc/JdbcContainerExtension.java rename to modules/jdbc/src/main/java/io/flowinquiry/testcontainers/jdbc/JdbcContainerExtension.java index 4502d5d..87b9be6 100644 --- a/spring-testcontainers/src/main/java/io/flowinquiry/testcontainers/jdbc/JdbcContainerExtension.java +++ b/modules/jdbc/src/main/java/io/flowinquiry/testcontainers/jdbc/JdbcContainerExtension.java @@ -1,9 +1,8 @@ package io.flowinquiry.testcontainers.jdbc; -import static io.flowinquiry.testcontainers.ServiceLoaderContainerFactory.getProvider; - import io.flowinquiry.testcontainers.ContainerLifecycleExtension; import io.flowinquiry.testcontainers.ContainerType; +import io.flowinquiry.testcontainers.ServiceLoaderContainerFactory; import io.flowinquiry.testcontainers.SpringAwareContainerProvider; import java.lang.annotation.Annotation; import java.lang.reflect.Method; @@ -39,7 +38,7 @@ protected EnableJdbcContainer getResolvedAnnotation(Class testClass) { @Override protected SpringAwareContainerProvider> initProvider(EnableJdbcContainer enableJdbcContainer) { - return getProvider( + return ServiceLoaderContainerFactory.getProvider( enableJdbcContainer, p -> p.getContainerType() == enableJdbcContainer.rdbms(), (prov, ann) -> prov.initContainerInstance(ann)); diff --git a/spring-testcontainers/src/main/java/io/flowinquiry/testcontainers/jdbc/SpringAwareJdbcContainerProvider.java b/modules/jdbc/src/main/java/io/flowinquiry/testcontainers/jdbc/SpringAwareJdbcContainerProvider.java similarity index 100% rename from spring-testcontainers/src/main/java/io/flowinquiry/testcontainers/jdbc/SpringAwareJdbcContainerProvider.java rename to modules/jdbc/src/main/java/io/flowinquiry/testcontainers/jdbc/SpringAwareJdbcContainerProvider.java diff --git a/modules/kafka/build.gradle b/modules/kafka/build.gradle new file mode 100644 index 0000000..9e5d0e4 --- /dev/null +++ b/modules/kafka/build.gradle @@ -0,0 +1,19 @@ +plugins { + id("buildlogic.java-library-conventions") +} + +repositories { + mavenCentral() +} + +dependencies { + api(project(":spring-testcontainers")) + implementation(platform(libs.spring.bom)) + testImplementation(platform(libs.junit.bom)) + testImplementation(libs.junit.jupiter) + testImplementation(libs.junit.platform.launcher) +} + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/modules/kafka/src/main/java/io/flowinquiry/testcontainers/kafka/KafkaContainerProvider.java b/modules/kafka/src/main/java/io/flowinquiry/testcontainers/kafka/KafkaContainerProvider.java new file mode 100644 index 0000000..d2e16ce --- /dev/null +++ b/modules/kafka/src/main/java/io/flowinquiry/testcontainers/kafka/KafkaContainerProvider.java @@ -0,0 +1,3 @@ +package io.flowinquiry.testcontainers.kafka; + +public class KafkaContainerProvider {} diff --git a/modules/kafka/src/main/resources/META-INF/services/io.flowinquiry.testcontainers.SpringAwareContainerProvider b/modules/kafka/src/main/resources/META-INF/services/io.flowinquiry.testcontainers.SpringAwareContainerProvider new file mode 100644 index 0000000..45b3d79 --- /dev/null +++ b/modules/kafka/src/main/resources/META-INF/services/io.flowinquiry.testcontainers.SpringAwareContainerProvider @@ -0,0 +1 @@ +io.flowinquiry.testcontainers.kafka.KafkaContainerProvider \ No newline at end of file diff --git a/modules/mysql/build.gradle.kts b/modules/mysql/build.gradle.kts index 5cc6685..2fc47ce 100644 --- a/modules/mysql/build.gradle.kts +++ b/modules/mysql/build.gradle.kts @@ -7,7 +7,7 @@ repositories { } dependencies { - api(project(":spring-testcontainers")) + api(project(":modules:jdbc")) implementation(platform(libs.spring.bom)) implementation(libs.testcontainers.jdbc) implementation(libs.testcontainers.mysql) diff --git a/spring-testcontainers/src/main/java/io/flowinquiry/testcontainers/jdbc/EnableMySQL.java b/modules/mysql/src/main/java/io/flowinquiry/testcontainers/jdbc/mysql/EnableMySQL.java similarity index 82% rename from spring-testcontainers/src/main/java/io/flowinquiry/testcontainers/jdbc/EnableMySQL.java rename to modules/mysql/src/main/java/io/flowinquiry/testcontainers/jdbc/mysql/EnableMySQL.java index 267f5c3..8c5aa31 100644 --- a/spring-testcontainers/src/main/java/io/flowinquiry/testcontainers/jdbc/EnableMySQL.java +++ b/modules/mysql/src/main/java/io/flowinquiry/testcontainers/jdbc/mysql/EnableMySQL.java @@ -1,10 +1,11 @@ -package io.flowinquiry.testcontainers.jdbc; +package io.flowinquiry.testcontainers.jdbc.mysql; -import static io.flowinquiry.testcontainers.ContainerType.MYSQL; import static java.lang.annotation.ElementType.ANNOTATION_TYPE; import static java.lang.annotation.ElementType.TYPE; import static java.lang.annotation.RetentionPolicy.RUNTIME; +import io.flowinquiry.testcontainers.ContainerType; +import io.flowinquiry.testcontainers.jdbc.EnableJdbcContainer; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.Target; @@ -12,7 +13,7 @@ @Target({ANNOTATION_TYPE, TYPE}) @Retention(RUNTIME) @Documented -@EnableJdbcContainer(rdbms = MYSQL) +@EnableJdbcContainer(rdbms = ContainerType.MYSQL) public @interface EnableMySQL { /** * Specifies the version of the MySQL Docker image to use. diff --git a/spring-testcontainers/src/main/java/io/flowinquiry/testcontainers/ai/EnableOllamaContainer.java b/modules/ollama/src/main/java/io/flowinquiry/testcontainers/ai/EnableOllamaContainer.java similarity index 100% rename from spring-testcontainers/src/main/java/io/flowinquiry/testcontainers/ai/EnableOllamaContainer.java rename to modules/ollama/src/main/java/io/flowinquiry/testcontainers/ai/EnableOllamaContainer.java diff --git a/spring-testcontainers/src/main/java/io/flowinquiry/testcontainers/ai/OllamaContainerExtension.java b/modules/ollama/src/main/java/io/flowinquiry/testcontainers/ai/OllamaContainerExtension.java similarity index 100% rename from spring-testcontainers/src/main/java/io/flowinquiry/testcontainers/ai/OllamaContainerExtension.java rename to modules/ollama/src/main/java/io/flowinquiry/testcontainers/ai/OllamaContainerExtension.java diff --git a/spring-testcontainers/src/main/java/io/flowinquiry/testcontainers/ai/OllamaOptions.java b/modules/ollama/src/main/java/io/flowinquiry/testcontainers/ai/OllamaOptions.java similarity index 100% rename from spring-testcontainers/src/main/java/io/flowinquiry/testcontainers/ai/OllamaOptions.java rename to modules/ollama/src/main/java/io/flowinquiry/testcontainers/ai/OllamaOptions.java diff --git a/modules/postgresql/build.gradle.kts b/modules/postgresql/build.gradle.kts index 5b03bcf..79d321d 100644 --- a/modules/postgresql/build.gradle.kts +++ b/modules/postgresql/build.gradle.kts @@ -7,13 +7,9 @@ repositories { } dependencies { - api(project(":spring-testcontainers")) + api(project(":modules:jdbc")) implementation(platform(libs.spring.bom)) - implementation(libs.testcontainers.jdbc) implementation(libs.testcontainers.postgresql) - testImplementation(platform(libs.junit.bom)) - testImplementation(libs.junit.jupiter) - testImplementation(libs.junit.platform.launcher) } tasks.test { diff --git a/spring-testcontainers/src/main/java/io/flowinquiry/testcontainers/jdbc/EnablePostgreSQL.java b/modules/postgresql/src/main/java/io/flowinquiry/testcontainers/jdbc/postgresql/EnablePostgreSQL.java similarity index 90% rename from spring-testcontainers/src/main/java/io/flowinquiry/testcontainers/jdbc/EnablePostgreSQL.java rename to modules/postgresql/src/main/java/io/flowinquiry/testcontainers/jdbc/postgresql/EnablePostgreSQL.java index 7f54b3b..bcb7974 100644 --- a/spring-testcontainers/src/main/java/io/flowinquiry/testcontainers/jdbc/EnablePostgreSQL.java +++ b/modules/postgresql/src/main/java/io/flowinquiry/testcontainers/jdbc/postgresql/EnablePostgreSQL.java @@ -1,11 +1,12 @@ -package io.flowinquiry.testcontainers.jdbc; +package io.flowinquiry.testcontainers.jdbc.postgresql; -import static io.flowinquiry.testcontainers.ContainerType.POSTGRESQL; import static java.lang.annotation.ElementType.ANNOTATION_TYPE; import static java.lang.annotation.ElementType.TYPE; import static java.lang.annotation.RetentionPolicy.RUNTIME; import io.flowinquiry.testcontainers.ContainerType; +import io.flowinquiry.testcontainers.jdbc.EnableJdbcContainer; +import io.flowinquiry.testcontainers.jdbc.JdbcContainerExtension; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.Target; @@ -48,7 +49,7 @@ @Target({ANNOTATION_TYPE, TYPE}) @Retention(RUNTIME) @Documented -@EnableJdbcContainer(rdbms = POSTGRESQL) +@EnableJdbcContainer(rdbms = ContainerType.POSTGRESQL) public @interface EnablePostgreSQL { /** * Specifies the version of the PostgreSQL Docker image to use. diff --git a/settings.gradle.kts b/settings.gradle.kts index 0a738c4..9c111b8 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -33,4 +33,6 @@ include("examples") include("examples:springboot-postgresql") include("examples:spring-postgresql") include("examples:springboot-mysql") -include("examples:springboot-ollama") \ No newline at end of file +include("examples:springboot-ollama") +include("modules:kafka") +include("modules:jdbc") \ No newline at end of file diff --git a/spring-testcontainers/build.gradle.kts b/spring-testcontainers/build.gradle.kts index 6ad792d..37a6890 100644 --- a/spring-testcontainers/build.gradle.kts +++ b/spring-testcontainers/build.gradle.kts @@ -1,18 +1,15 @@ -/* - * This file was generated by the Gradle 'init' task. - */ - plugins { id("buildlogic.java-library-conventions") } dependencies { - implementation(platform(libs.junit.bom)) - implementation(platform(libs.spring.bom)) - implementation(libs.junit.jupiter.api) - implementation(libs.junit.jupiter.engine) - implementation(libs.junit.platform.launcher) - implementation(libs.testcontainers.jdbc) - implementation(libs.spring.test) - implementation(libs.spring.context) + api(platform(libs.junit.bom)) + api(platform(libs.spring.bom)) + api(libs.junit.jupiter.api) + api(libs.junit.jupiter.engine) + api(libs.junit.platform.launcher) + api(libs.spring.test) + api(libs.spring.context) + api(libs.slf4j.api) + api(libs.testcontainers) }