1 package de.juplo.kafka.chat.backend.domain;
3 import org.junit.jupiter.api.DisplayName;
4 import org.junit.jupiter.api.Test;
5 import reactor.core.publisher.Mono;
7 import java.time.Clock;
8 import java.time.Instant;
9 import java.time.LocalDateTime;
10 import java.time.ZoneId;
11 import java.util.UUID;
13 import static org.mockito.Mockito.*;
14 import static pl.rzrz.assertj.reactor.Assertions.assertThat;
17 public class ChatRoomTest
20 @DisplayName("Assert, that Mono emits expected message, if it exists")
21 void testGetExistingMessage()
26 ChatRoomService chatRoomService = mock(ChatRoomService.class);
27 ChatRoom chatRoom = new ChatRoom(
31 Clock.systemDefaultZone(),
34 Message.MessageKey key = Message.MessageKey.of(user, messageId);
35 LocalDateTime timestamp = LocalDateTime.now();
36 Message message = new Message(key, 0l, timestamp, "Bar");
37 when(chatRoomService.getMessage(any(Message.MessageKey.class))).thenReturn(Mono.just(message));
40 Mono<Message> mono = chatRoom.getMessage(user, messageId);
43 assertThat(mono).emitsExactly(message);
47 @DisplayName("Assert, that Mono if empty, if message does not exists")
48 void testGetNonExistentMessage()
53 ChatRoomService chatRoomService = mock(ChatRoomService.class);
54 ChatRoom chatRoom = new ChatRoom(
58 Clock.systemDefaultZone(),
61 when(chatRoomService.getMessage(any(Message.MessageKey.class))).thenReturn(Mono.empty());
64 Mono<Message> mono = chatRoom.getMessage(user, messageId);
67 assertThat(mono).emitsCount(0);
71 @DisplayName("Assert, that Mono emits expected message, if a new message is added")
72 void testAddNewMessage()
77 ChatRoomService chatRoomService = mock(ChatRoomService.class);
78 ChatRoom chatRoom = new ChatRoom(
82 Clock.systemDefaultZone(),
85 Message.MessageKey key = Message.MessageKey.of(user, messageId);
86 Clock now = Clock.fixed(Instant.now(), ZoneId.systemDefault());
87 LocalDateTime timestamp = LocalDateTime.now(now);
88 String messageText = "Bar";
89 Message message = new Message(key, 0l, timestamp, messageText);
90 when(chatRoomService.getMessage(any(Message.MessageKey.class))).thenReturn(Mono.empty());
91 when(chatRoomService.persistMessage(any(Message.MessageKey.class), any(LocalDateTime.class), any(String.class))).thenReturn(message);
94 Mono<Message> mono = chatRoom.addMessage(messageId, user, messageText);
97 assertThat(mono).emitsExactly(message);
101 @DisplayName("Assert, that Mono emits expected message, if an unchanged message is added")
102 void testAddUnchangedMessage()
107 ChatRoomService chatRoomService = mock(ChatRoomService.class);
108 ChatRoom chatRoom = new ChatRoom(
112 Clock.systemDefaultZone(),
115 Message.MessageKey key = Message.MessageKey.of(user, messageId);
116 Clock now = Clock.fixed(Instant.now(), ZoneId.systemDefault());
117 LocalDateTime timestamp = LocalDateTime.now(now);
118 String messageText = "Bar";
119 Message message = new Message(key, 0l, timestamp, messageText);
120 when(chatRoomService.getMessage(any(Message.MessageKey.class))).thenReturn(Mono.just(message));
121 when(chatRoomService.persistMessage(any(Message.MessageKey.class), any(LocalDateTime.class), any(String.class))).thenReturn(message);
124 Mono<Message> mono = chatRoom.addMessage(messageId, user, messageText);
127 assertThat(mono).emitsExactly(message);
131 @DisplayName("Assert, that Mono sends an error, if a message is added again with mutated text")
132 void testAddMutatedMessage()
137 ChatRoomService chatRoomService = mock(ChatRoomService.class);
138 ChatRoom chatRoom = new ChatRoom(
142 Clock.systemDefaultZone(),
145 Message.MessageKey key = Message.MessageKey.of(user, messageId);
146 Clock now = Clock.fixed(Instant.now(), ZoneId.systemDefault());
147 LocalDateTime timestamp = LocalDateTime.now(now);
148 String messageText = "Bar";
149 String mutatedText = "Boom!";
150 Message message = new Message(key, 0l, timestamp, messageText);
151 when(chatRoomService.getMessage(any(Message.MessageKey.class))).thenReturn(Mono.just(message));
152 when(chatRoomService.persistMessage(any(Message.MessageKey.class), any(LocalDateTime.class), any(String.class))).thenReturn(message);
155 Mono<Message> mono = chatRoom.addMessage(messageId, user, mutatedText);
158 assertThat(mono).sendsError();