dc998ab4f52ae8c631a01a2cc3d4fb67d17f66a8
[demos/kafka/chat] / src / test / java / de / juplo / kafka / chat / backend / persistence / AbstractStorageStrategyIT.java
1 package de.juplo.kafka.chat.backend.persistence;
2
3 import de.juplo.kafka.chat.backend.domain.ChatHome;
4 import de.juplo.kafka.chat.backend.domain.ChatHomeService;
5 import de.juplo.kafka.chat.backend.domain.ChatRoom;
6 import de.juplo.kafka.chat.backend.domain.Message;
7 import lombok.extern.slf4j.Slf4j;
8 import org.junit.jupiter.api.Test;
9
10 import java.util.List;
11 import java.util.function.Supplier;
12
13 import static pl.rzrz.assertj.reactor.Assertions.*;
14
15
16 @Slf4j
17 public abstract class AbstractStorageStrategyIT
18 {
19   protected ChatHome chathome;
20
21
22   protected abstract StorageStrategy getStorageStrategy();
23   protected abstract Supplier<ChatHomeService> getChatHomeServiceSupplier();
24
25   protected void start()
26   {
27     chathome = new ChatHome(getChatHomeServiceSupplier().get());
28   }
29
30   protected void stop()
31   {
32     getStorageStrategy().write(chathome.getChatRooms());
33   }
34
35   @Test
36   protected void testStoreAndRecreate()
37   {
38     start();
39
40     assertThat(chathome.getChatRooms().toStream()).hasSize(0);
41
42     ChatRoom chatroom = chathome.createChatroom("FOO").block();
43     Message m1 = chatroom.addMessage(1l,"peter", "Hallo, ich heiße Peter!").block();
44     Message m2 = chatroom.addMessage(1l, "ute", "Ich bin Ute...").block();
45     Message m3 = chatroom.addMessage(2l, "peter", "Willst du mit mir gehen?").block();
46     Message m4 = chatroom.addMessage(1l, "klaus", "Ja? Nein? Vielleicht??").block();
47
48     assertThat(chathome.getChatRooms().toStream()).containsExactlyElementsOf(List.of(chatroom));
49     assertThat(chathome.getChatRoom(chatroom.getId())).emitsExactly(chatroom);
50     assertThat(chathome
51         .getChatRoom(chatroom.getId())
52         .flatMapMany(cr -> cr.getMessages())).emitsExactly(m1, m2, m3, m4);
53
54     stop();
55     start();
56
57     assertThat(chathome.getChatRooms().toStream()).containsExactlyElementsOf(List.of(chatroom));
58     assertThat(chathome.getChatRoom(chatroom.getId())).emitsExactly(chatroom);
59     assertThat(chathome
60         .getChatRoom(chatroom.getId())
61         .flatMapMany(cr -> cr.getMessages())).emitsExactly(m1, m2, m3, m4);
62   }
63 }