1 package de.juplo.kafka.chat.backend.storage.mongodb;
3 import de.juplo.kafka.chat.backend.domain.Message;
4 import org.junit.jupiter.api.BeforeEach;
5 import org.junit.jupiter.api.Test;
6 import org.springframework.beans.factory.annotation.Autowired;
7 import org.springframework.boot.test.context.SpringBootTest;
8 import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
9 import org.springframework.data.domain.Example;
10 import org.testcontainers.containers.MongoDBContainer;
11 import org.testcontainers.junit.jupiter.Container;
12 import org.testcontainers.junit.jupiter.Testcontainers;
14 import java.time.Clock;
15 import java.time.LocalDateTime;
16 import java.util.UUID;
18 import static pl.rzrz.assertj.reactor.Assertions.assertThat;
22 webEnvironment = SpringBootTest.WebEnvironment.NONE,
24 "spring.data.mongodb.host=localhost",
25 "spring.data.mongodb.database=test",
26 "chat.backend.inmemory.storage-strategy=mongodb" })
28 public class MessageRepositoryIT
33 static MongoDBContainer MONGO_DB = new MongoDBContainer("mongo:6");
36 MessageRepository repository;
39 MessageTo foo_1, foo_2, bar_1, bar_2, bar_3;
44 repository.deleteAll();
46 foo = UUID.randomUUID();
47 bar = UUID.randomUUID();
50 LocalDateTime now = LocalDateTime.now(Clock.systemDefaultZone());
52 foo_1 = repository.save(MessageTo.from(
55 Message.MessageKey.of("peter", 1l),
57 now.plusSeconds(serial),
58 "Nachricht #" + serial)));
59 foo_2 = repository.save(MessageTo.from(
62 Message.MessageKey.of("ute", 2l),
64 now.plusSeconds(serial),
65 "Nachricht #" + serial)));
66 bar_1 = repository.save(MessageTo.from(
69 Message.MessageKey.of("klaus", 1l),
71 now.plusSeconds(serial),
72 "Nachricht #" + serial)));
73 bar_2 = repository.save(MessageTo.from(
76 Message.MessageKey.of("beate", 2l),
78 now.plusSeconds(serial),
79 "Nachricht #" + serial)));
80 bar_3 = repository.save(MessageTo.from(
83 Message.MessageKey.of("peter", 3l),
85 now.plusSeconds(serial),
86 "Nachricht #" + serial)));
90 public void findsAll()
92 assertThat(repository.findAll()).containsExactly(foo_1, foo_2, bar_1, bar_2, bar_3);
96 public void findsByExample_chatRoomId()
98 assertThat(repository.findAll(Example.of(new MessageTo(foo.toString(), null, null, null, null, null)))).containsExactly(foo_1, foo_2);
99 assertThat(repository.findAll(Example.of(new MessageTo(bar.toString(), null, null, null, null, null)))).containsExactly(bar_1, bar_2, bar_3);
103 public void findsByExample_user()
105 assertThat(repository.findAll(Example.of(new MessageTo(null, "peter", null, null, null, null)))).containsExactly(foo_1, bar_3);
106 assertThat(repository.findAll(Example.of(new MessageTo(null, "klaus", null, null, null, null)))).containsExactly(bar_1);
107 assertThat(repository.findAll(Example.of(new MessageTo(null, "ute", null, null, null, null)))).containsExactly(foo_2);
108 assertThat(repository.findAll(Example.of(new MessageTo(null, "beate", null, null, null, null)))).containsExactly(bar_2);
112 public void findsByExample_id()
114 assertThat(repository.findAll(Example.of(new MessageTo(null, null, 1l, null, null, null)))).containsExactly(foo_1, bar_1);
115 assertThat(repository.findAll(Example.of(new MessageTo(null, null, 2l, null, null, null)))).containsExactly(foo_2, bar_2);
116 assertThat(repository.findAll(Example.of(new MessageTo(null, null, 3l, null, null, null)))).containsExactly(bar_3);