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
32 static MongoDBContainer MONGODB = new MongoDBContainer("mongo:6");
35 MessageRepository repository;
38 MessageTo foo_1, foo_2, bar_1, bar_2, bar_3;
43 repository.deleteAll().block();
45 foo = UUID.randomUUID();
46 bar = UUID.randomUUID();
49 LocalDateTime now = LocalDateTime.now(Clock.systemDefaultZone());
51 foo_1 = repository.save(MessageTo.from(
54 Message.MessageKey.of("peter", 1l),
56 now.plusSeconds(serial),
57 "Nachricht #" + serial))).block();
58 foo_2 = repository.save(MessageTo.from(
61 Message.MessageKey.of("ute", 2l),
63 now.plusSeconds(serial),
64 "Nachricht #" + serial))).block();
65 bar_1 = repository.save(MessageTo.from(
68 Message.MessageKey.of("klaus", 1l),
70 now.plusSeconds(serial),
71 "Nachricht #" + serial))).block();
72 bar_2 = repository.save(MessageTo.from(
75 Message.MessageKey.of("beate", 2l),
77 now.plusSeconds(serial),
78 "Nachricht #" + serial))).block();
79 bar_3 = repository.save(MessageTo.from(
82 Message.MessageKey.of("peter", 3l),
84 now.plusSeconds(serial),
85 "Nachricht #" + serial))).block();
89 public void findsAll()
91 assertThat(repository.findAll()).emitsExactly(foo_1, foo_2, bar_1, bar_2, bar_3);
95 public void findsByExample_chatRoomId()
97 assertThat(repository.findAll(Example.of(new MessageTo(foo.toString(), null, null, null, null, null)))).emitsExactly(foo_1, foo_2);
98 assertThat(repository.findAll(Example.of(new MessageTo(bar.toString(), null, null, null, null, null)))).emitsExactly(bar_1, bar_2, bar_3);
102 public void findsByExample_user()
104 assertThat(repository.findAll(Example.of(new MessageTo(null, "peter", null, null, null, null)))).emitsExactly(foo_1, bar_3);
105 assertThat(repository.findAll(Example.of(new MessageTo(null, "klaus", null, null, null, null)))).emitsExactly(bar_1);
106 assertThat(repository.findAll(Example.of(new MessageTo(null, "ute", null, null, null, null)))).emitsExactly(foo_2);
107 assertThat(repository.findAll(Example.of(new MessageTo(null, "beate", null, null, null, null)))).emitsExactly(bar_2);
111 public void findsByExample_id()
113 assertThat(repository.findAll(Example.of(new MessageTo(null, null, 1l, null, null, null)))).emitsExactly(foo_1, bar_1);
114 assertThat(repository.findAll(Example.of(new MessageTo(null, null, 2l, null, null, null)))).emitsExactly(foo_2, bar_2);
115 assertThat(repository.findAll(Example.of(new MessageTo(null, null, 3l, null, null, null)))).emitsExactly(bar_3);