WIP:refactor: Refined channel-states, introduced `ChannelState` -- ALIGN
[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   @Container
31   @ServiceConnection
32   static MongoDBContainer MONGODB = new MongoDBContainer("mongo:6");
33
34   @Autowired
35   MessageRepository repository;
36
37   UUID foo, bar;
38   MessageTo foo_1, foo_2, bar_1, bar_2, bar_3;
39
40   @BeforeEach
41   public void setUp()
42   {
43     repository.deleteAll().block();
44
45     foo = UUID.randomUUID();
46     bar = UUID.randomUUID();
47
48     long serial = 0;
49     LocalDateTime now = LocalDateTime.now(Clock.systemDefaultZone());
50
51     foo_1 = repository.save(MessageTo.from(
52         foo,
53         new Message(
54             Message.MessageKey.of("peter", 1l),
55             serial++,
56             now.plusSeconds(serial),
57             "Nachricht #" + serial))).block();
58     foo_2 = repository.save(MessageTo.from(
59         foo,
60         new Message(
61             Message.MessageKey.of("ute", 2l),
62             serial++,
63             now.plusSeconds(serial),
64             "Nachricht #" + serial))).block();
65     bar_1 = repository.save(MessageTo.from(
66         bar,
67         new Message(
68             Message.MessageKey.of("klaus", 1l),
69             serial++,
70             now.plusSeconds(serial),
71             "Nachricht #" + serial))).block();
72     bar_2 = repository.save(MessageTo.from(
73         bar,
74         new Message(
75             Message.MessageKey.of("beate", 2l),
76             serial++,
77             now.plusSeconds(serial),
78             "Nachricht #" + serial))).block();
79     bar_3 = repository.save(MessageTo.from(
80         bar,
81         new Message(
82             Message.MessageKey.of("peter", 3l),
83             serial++,
84             now.plusSeconds(serial),
85             "Nachricht #" + serial))).block();
86   }
87
88   @Test
89   public void findsAll()
90   {
91     assertThat(repository.findAll()).emitsExactly(foo_1, foo_2, bar_1, bar_2, bar_3);
92   }
93
94   @Test
95   public void findsByExample_chatRoomId()
96   {
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);
99   }
100
101   @Test
102   public void findsByExample_user()
103   {
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);
108   }
109
110   @Test
111   public void findsByExample_id()
112   {
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);
116   }
117 }