test: Added IT for `ChatRoomRepository` and `MessageRepository`
[demos/kafka/chat] / src / test / java / de / juplo / kafka / chat / backend / storage / mongodb / MessageRepositoryIT.java
1 package de.juplo.kafka.chat.backend.storage.mongodb;
2
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;
13
14 import java.time.Clock;
15 import java.time.LocalDateTime;
16 import java.util.UUID;
17
18 import static pl.rzrz.assertj.reactor.Assertions.assertThat;
19
20
21 @SpringBootTest(
22     webEnvironment = SpringBootTest.WebEnvironment.NONE,
23     properties = {
24         "spring.data.mongodb.host=localhost",
25         "spring.data.mongodb.database=test",
26         "chat.backend.inmemory.storage-strategy=mongodb" })
27 @Testcontainers
28 public class MessageRepositoryIT
29 {
30
31   @Container
32   @ServiceConnection
33   static MongoDBContainer MONGO_DB = new MongoDBContainer("mongo:6");
34
35   @Autowired
36   MessageRepository repository;
37
38   UUID foo, bar;
39   MessageTo foo_1, foo_2, bar_1, bar_2, bar_3;
40
41   @BeforeEach
42   public void setUp()
43   {
44     repository.deleteAll();
45
46     foo = UUID.randomUUID();
47     bar = UUID.randomUUID();
48
49     long serial = 0;
50     LocalDateTime now = LocalDateTime.now(Clock.systemDefaultZone());
51
52     foo_1 = repository.save(MessageTo.from(
53         foo,
54         new Message(
55             Message.MessageKey.of("peter", 1l),
56             serial++,
57             now.plusSeconds(serial),
58             "Nachricht #" + serial)));
59     foo_2 = repository.save(MessageTo.from(
60         foo,
61         new Message(
62             Message.MessageKey.of("ute", 2l),
63             serial++,
64             now.plusSeconds(serial),
65             "Nachricht #" + serial)));
66     bar_1 = repository.save(MessageTo.from(
67         bar,
68         new Message(
69             Message.MessageKey.of("klaus", 1l),
70             serial++,
71             now.plusSeconds(serial),
72             "Nachricht #" + serial)));
73     bar_2 = repository.save(MessageTo.from(
74         bar,
75         new Message(
76             Message.MessageKey.of("beate", 2l),
77             serial++,
78             now.plusSeconds(serial),
79             "Nachricht #" + serial)));
80     bar_3 = repository.save(MessageTo.from(
81         bar,
82         new Message(
83             Message.MessageKey.of("peter", 3l),
84             serial++,
85             now.plusSeconds(serial),
86             "Nachricht #" + serial)));
87   }
88
89   @Test
90   public void findsAll()
91   {
92     assertThat(repository.findAll()).containsExactly(foo_1, foo_2, bar_1, bar_2, bar_3);
93   }
94
95   @Test
96   public void findsByExample_chatRoomId()
97   {
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);
100   }
101
102   @Test
103   public void findsByExample_user()
104   {
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);
109   }
110
111   @Test
112   public void findsByExample_id()
113   {
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);
117   }
118 }