1 package de.juplo.kafka.chat.backend;
3 import de.juplo.kafka.chat.backend.implementation.StorageStrategy;
4 import de.juplo.kafka.chat.backend.storage.mongodb.ChatRoomRepository;
5 import de.juplo.kafka.chat.backend.storage.mongodb.MessageRepository;
6 import de.juplo.kafka.chat.backend.storage.mongodb.MongoDbStorageStrategy;
7 import lombok.extern.slf4j.Slf4j;
8 import org.junit.jupiter.api.BeforeEach;
9 import org.junit.jupiter.api.extension.ExtendWith;
10 import org.springframework.beans.factory.annotation.Autowired;
11 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
12 import org.springframework.boot.test.autoconfigure.data.mongo.AutoConfigureDataMongo;
13 import org.springframework.boot.test.context.TestConfiguration;
14 import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
15 import org.springframework.context.annotation.Bean;
16 import org.springframework.test.context.junit.jupiter.SpringExtension;
17 import org.testcontainers.containers.GenericContainer;
18 import org.testcontainers.containers.MongoDBContainer;
19 import org.testcontainers.containers.output.Slf4jLogConsumer;
20 import org.testcontainers.junit.jupiter.Container;
21 import org.testcontainers.junit.jupiter.Testcontainers;
23 import java.time.Clock;
27 @ExtendWith({SpringExtension.class})
28 @EnableAutoConfiguration
29 @AutoConfigureDataMongo
31 public class InMemoryWithMongoDbStorageIT extends AbstractInMemoryStorageIT
34 MongoDbStorageStrategy storageStrategy;
36 ChatRoomRepository chatRoomRepository;
38 MessageRepository messageRepository;
41 public InMemoryWithMongoDbStorageIT()
43 super(Clock.systemDefaultZone());
48 protected StorageStrategy getStorageStrategy()
50 return storageStrategy;
54 static class InMemoryWithMongoDbStorageStrategyITConfig
57 MongoDbStorageStrategy storageStrategy(
58 ChatRoomRepository chatRoomRepository,
59 MessageRepository messageRepository)
61 return new MongoDbStorageStrategy(chatRoomRepository, messageRepository);
67 return Clock.systemDefaultZone();
73 private static final GenericContainer MONGODB = new MongoDBContainer("mongo:6");
78 Slf4jLogConsumer logConsumer = new Slf4jLogConsumer(log);
79 MONGODB.followOutput(logConsumer);
80 chatRoomRepository.deleteAll();
81 messageRepository.deleteAll();