test: Simplified `InMemoryWithMongoDbStorageIT`
[demos/kafka/chat] / src / test / java / de / juplo / kafka / chat / backend / InMemoryWithMongoDbStorageIT.java
1 package de.juplo.kafka.chat.backend;
2
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;
22
23 import java.time.Clock;
24
25
26 @Testcontainers
27 @ExtendWith({SpringExtension.class})
28 @EnableAutoConfiguration
29 @AutoConfigureDataMongo
30 @Slf4j
31 public class InMemoryWithMongoDbStorageIT extends AbstractInMemoryStorageIT
32 {
33   @Autowired
34   MongoDbStorageStrategy storageStrategy;
35   @Autowired
36   ChatRoomRepository chatRoomRepository;
37   @Autowired
38   MessageRepository messageRepository;
39
40
41   public InMemoryWithMongoDbStorageIT()
42   {
43     super(Clock.systemDefaultZone());
44   }
45
46
47   @Override
48   protected StorageStrategy getStorageStrategy()
49   {
50     return storageStrategy;
51   }
52
53   @TestConfiguration
54   static class InMemoryWithMongoDbStorageStrategyITConfig
55   {
56     @Bean
57     MongoDbStorageStrategy storageStrategy(
58         ChatRoomRepository chatRoomRepository,
59         MessageRepository messageRepository)
60     {
61       return new MongoDbStorageStrategy(chatRoomRepository, messageRepository);
62     }
63
64     @Bean
65     Clock clock()
66     {
67       return Clock.systemDefaultZone();
68     }
69   }
70
71   @Container
72   @ServiceConnection
73   private static final GenericContainer MONGODB = new MongoDBContainer("mongo:6");
74
75   @BeforeEach
76   void setUpLogging()
77   {
78     Slf4jLogConsumer logConsumer = new Slf4jLogConsumer(log);
79     MONGODB.followOutput(logConsumer);
80     chatRoomRepository.deleteAll();
81     messageRepository.deleteAll();
82   }
83 }