diff --git a/backend/pom.xml b/backend/pom.xml index b288d8f..2784326 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -81,6 +81,11 @@ spring-security-test test + + org.testcontainers + testcontainers-mongodb + test + @@ -107,6 +112,17 @@ org.springframework.boot spring-boot-maven-plugin + + maven-failsafe-plugin + + + + integration-test + verify + + + + org.jacoco jacoco-maven-plugin diff --git a/backend/src/test/java/fr/nessar/lmnporganizer/backend/integration/ApartmentPersistenceIT.java b/backend/src/test/java/fr/nessar/lmnporganizer/backend/integration/ApartmentPersistenceIT.java new file mode 100644 index 0000000..55216d8 --- /dev/null +++ b/backend/src/test/java/fr/nessar/lmnporganizer/backend/integration/ApartmentPersistenceIT.java @@ -0,0 +1,70 @@ +package fr.nessar.lmnporganizer.backend.integration; + +import fr.nessar.lmnporganizer.backend.model.Apartment; +import fr.nessar.lmnporganizer.backend.repository.ApartmentRepository; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.SpringBootConfiguration; +import org.springframework.boot.autoconfigure.AutoConfigurationPackage; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; +import org.testcontainers.mongodb.MongoDBContainer; + +import static org.assertj.core.api.Assertions.assertThat; + +@SpringBootTest( + classes = ApartmentPersistenceIT.MongoTestApplication.class, + webEnvironment = SpringBootTest.WebEnvironment.NONE +) +class ApartmentPersistenceIT { + + private static final MongoDBContainer mongoDb = startMongoDb(); + + @Autowired + private ApartmentRepository apartmentRepository; + + @BeforeEach + @AfterEach + void clearApartments() { + apartmentRepository.deleteAll(); + } + + @DynamicPropertySource + static void configureMongoDb(DynamicPropertyRegistry registry) { + if (mongoDb != null) { + registry.add("spring.mongodb.uri", () -> mongoDb.getConnectionString() + "/lmnp-integration"); + } + } + + @Test + void savesAndLoadsAnApartmentWithMongoDB() { + Apartment saved = apartmentRepository.save(new Apartment(null, "default-landlord", "Studio République", + "12 rue de la République, Lyon", 150000, "Deuxième étage")); + + Apartment apartment = apartmentRepository.findById(saved.getId()).orElseThrow(); + assertThat(apartment.getBailleurId()).isEqualTo("default-landlord"); + assertThat(apartment.getAddress()).isEqualTo("12 rue de la République, Lyon"); + } + + private static MongoDBContainer startMongoDb() { + if (System.getenv("SPRING_MONGODB_URI") != null) { + return null; + } + + MongoDBContainer container = new MongoDBContainer("mongo:8.0"); + container.start(); + return container; + } + + @SpringBootConfiguration + @EnableAutoConfiguration + @AutoConfigurationPackage(basePackageClasses = Apartment.class) + @EnableMongoRepositories(basePackageClasses = ApartmentRepository.class) + static class MongoTestApplication { + } +}