From c531e8df7b65c20ac1f335f99c46ac321a0ccc59 Mon Sep 17 00:00:00 2001 From: Oliver Drotbohm Date: Tue, 17 Jun 2025 09:17:33 +0200 Subject: [PATCH] GH-1249 - Switch to Testcontainers for MongoDB integration tests. --- .../spring-modulith-events-mongodb/pom.xml | 37 +++++++++++++++++-- ...MongoDbEventPublicationRepositoryTest.java | 24 +++++++++++- 2 files changed, 56 insertions(+), 5 deletions(-) diff --git a/spring-modulith-events/spring-modulith-events-mongodb/pom.xml b/spring-modulith-events/spring-modulith-events-mongodb/pom.xml index 41424b9a..5ac27465 100644 --- a/spring-modulith-events/spring-modulith-events-mongodb/pom.xml +++ b/spring-modulith-events/spring-modulith-events-mongodb/pom.xml @@ -15,6 +15,18 @@ spring.modulith.events.mongodb + + + + org.testcontainers + testcontainers-bom + ${testcontainers.version} + pom + import + + + + @@ -46,10 +58,29 @@ test + + - de.flapdoodle.embed - de.flapdoodle.embed.mongo.spring3x - ${flapdoodle-mongodb.version} + org.springframework.boot + spring-boot-testcontainers + test + + + + org.testcontainers + testcontainers + test + + + + org.testcontainers + junit-jupiter + test + + + + org.testcontainers + mongodb test diff --git a/spring-modulith-events/spring-modulith-events-mongodb/src/test/java/org/springframework/modulith/events/mongodb/MongoDbEventPublicationRepositoryTest.java b/spring-modulith-events/spring-modulith-events-mongodb/src/test/java/org/springframework/modulith/events/mongodb/MongoDbEventPublicationRepositoryTest.java index e121dcc4..d46b7b71 100644 --- a/spring-modulith-events/spring-modulith-events-mongodb/src/test/java/org/springframework/modulith/events/mongodb/MongoDbEventPublicationRepositoryTest.java +++ b/spring-modulith-events/spring-modulith-events-mongodb/src/test/java/org/springframework/modulith/events/mongodb/MongoDbEventPublicationRepositoryTest.java @@ -32,6 +32,10 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.boot.testcontainers.service.connection.ServiceConnection; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Import; import org.springframework.core.env.Environment; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.modulith.events.core.PublicationTargetIdentifier; @@ -40,17 +44,32 @@ import org.springframework.modulith.events.support.CompletionMode; import org.springframework.modulith.testapp.TestApplication; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; +import org.testcontainers.containers.MongoDBContainer; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.utility.DockerImageName; /** * @author Björn Kieling * @author Dmitry Belyaev * @author Oliver Drotbohm */ +@Testcontainers(disabledWithoutDocker = true) class MongoDbEventPublicationRepositoryTest { private static final PublicationTargetIdentifier TARGET_IDENTIFIER = PublicationTargetIdentifier.of("listener"); + @TestConfiguration(proxyBeanMethods = false) + static class Infrastructure { + + @Bean + @ServiceConnection + MongoDBContainer mongoDBContainer() { + return new MongoDBContainer(DockerImageName.parse("mongo:latest")); + } + } + @DataMongoTest + @Import(Infrastructure.class) @ContextConfiguration(classes = TestApplication.class) static abstract class TestBase { @@ -84,8 +103,9 @@ class MongoDbEventPublicationRepositoryTest { assertThat(eventPublications.get(0).getEvent()).isEqualTo(publication.getEvent()); assertThat(eventPublications.get(0).getTargetIdentifier()).isEqualTo(publication.getTargetIdentifier()); - assertThat(repository.findIncompletePublicationsByEventAndTargetIdentifier(new TestEvent("abc"), TARGET_IDENTIFIER)) - .isPresent(); + assertThat( + repository.findIncompletePublicationsByEventAndTargetIdentifier(new TestEvent("abc"), TARGET_IDENTIFIER)) + .isPresent(); // Complete publication repository.markCompleted(publication, Instant.now());