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(
30 Clock.systemDefaultZone(),
33 Message.MessageKey key = Message.MessageKey.of(user, messageId);
34 LocalDateTime timestamp = LocalDateTime.now();
35 Message message = new Message(key, 0l, timestamp, "Bar");
36 when(chatRoomService.getMessage(any(Message.MessageKey.class))).thenReturn(Mono.just(message));
39 Mono<Message> mono = chatRoom.getMessage(user, messageId);
42 assertThat(mono).emitsExactly(message);
46 @DisplayName("Assert, that Mono if empty, if message does not exists")
47 void testGetNonExistentMessage()
52 ChatRoomService chatRoomService = mock(ChatRoomService.class);
53 ChatRoom chatRoom = new ChatRoom(
56 Clock.systemDefaultZone(),
59 when(chatRoomService.getMessage(any(Message.MessageKey.class))).thenReturn(Mono.empty());
62 Mono<Message> mono = chatRoom.getMessage(user, messageId);
65 assertThat(mono).emitsCount(0);
69 @DisplayName("Assert, that Mono emits expected message, if a new message is added")
70 void testAddNewMessage()
75 ChatRoomService chatRoomService = mock(ChatRoomService.class);
76 ChatRoom chatRoom = new ChatRoom(
79 Clock.systemDefaultZone(),
82 Message.MessageKey key = Message.MessageKey.of(user, messageId);
83 Clock now = Clock.fixed(Instant.now(), ZoneId.systemDefault());
84 LocalDateTime timestamp = LocalDateTime.now(now);
85 String messageText = "Bar";
86 Message message = new Message(key, 0l, timestamp, messageText);
87 when(chatRoomService.getMessage(any(Message.MessageKey.class))).thenReturn(Mono.empty());
88 when(chatRoomService.persistMessage(any(Message.MessageKey.class), any(LocalDateTime.class), any(String.class))).thenReturn(message);
91 Mono<Message> mono = chatRoom.addMessage(messageId, user, messageText);
94 assertThat(mono).emitsExactly(message);
98 @DisplayName("Assert, that Mono emits expected message, if an unchanged message is added")
99 void testAddUnchangedMessage()
104 ChatRoomService chatRoomService = mock(ChatRoomService.class);
105 ChatRoom chatRoom = new ChatRoom(
108 Clock.systemDefaultZone(),
111 Message.MessageKey key = Message.MessageKey.of(user, messageId);
112 Clock now = Clock.fixed(Instant.now(), ZoneId.systemDefault());
113 LocalDateTime timestamp = LocalDateTime.now(now);
114 String messageText = "Bar";
115 Message message = new Message(key, 0l, timestamp, messageText);
116 when(chatRoomService.getMessage(any(Message.MessageKey.class))).thenReturn(Mono.just(message));
117 when(chatRoomService.persistMessage(any(Message.MessageKey.class), any(LocalDateTime.class), any(String.class))).thenReturn(message);
120 Mono<Message> mono = chatRoom.addMessage(messageId, user, messageText);
123 assertThat(mono).emitsExactly(message);
127 @DisplayName("Assert, that Mono sends an error, if a message is added again with mutated text")
128 void testAddMutatedMessage()
133 ChatRoomService chatRoomService = mock(ChatRoomService.class);
134 ChatRoom chatRoom = new ChatRoom(
137 Clock.systemDefaultZone(),
140 Message.MessageKey key = Message.MessageKey.of(user, messageId);
141 Clock now = Clock.fixed(Instant.now(), ZoneId.systemDefault());
142 LocalDateTime timestamp = LocalDateTime.now(now);
143 String messageText = "Bar";
144 String mutatedText = "Boom!";
145 Message message = new Message(key, 0l, timestamp, messageText);
146 when(chatRoomService.getMessage(any(Message.MessageKey.class))).thenReturn(Mono.just(message));
147 when(chatRoomService.persistMessage(any(Message.MessageKey.class), any(LocalDateTime.class), any(String.class))).thenReturn(message);
150 Mono<Message> mono = chatRoom.addMessage(messageId, user, mutatedText);
153 assertThat(mono).sendsError();