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;
12 import static org.mockito.Mockito.*;
13 import static pl.rzrz.assertj.reactor.Assertions.assertThat;
16 public class ChatRoomDataTest
19 @DisplayName("Assert, that Mono emits expected message, if it exists")
20 void testGetExistingMessage()
25 ChatMessageService chatMessageService = mock(ChatMessageService.class);
26 ChatRoomData chatRoomData = new ChatRoomData(
27 Clock.systemDefaultZone(),
30 Message.MessageKey key = Message.MessageKey.of(user, messageId);
31 LocalDateTime timestamp = LocalDateTime.now();
32 Message message = new Message(key, 0l, timestamp, "Bar");
33 when(chatMessageService.getMessage(any(Message.MessageKey.class))).thenReturn(Mono.just(message));
36 Mono<Message> mono = chatRoomData.getMessage(user, messageId);
39 assertThat(mono).emitsExactly(message);
43 @DisplayName("Assert, that Mono if empty, if message does not exists")
44 void testGetNonExistentMessage()
49 ChatMessageService chatMessageService = mock(ChatMessageService.class);
50 ChatRoomData chatRoomData = new ChatRoomData(
51 Clock.systemDefaultZone(),
54 when(chatMessageService.getMessage(any(Message.MessageKey.class))).thenReturn(Mono.empty());
57 Mono<Message> mono = chatRoomData.getMessage(user, messageId);
60 assertThat(mono).emitsCount(0);
64 @DisplayName("Assert, that Mono emits expected message, if a new message is added")
65 void testAddNewMessage()
70 ChatMessageService chatMessageService = mock(ChatMessageService.class);
71 ChatRoomData chatRoomData = new ChatRoomData(
72 Clock.systemDefaultZone(),
75 Message.MessageKey key = Message.MessageKey.of(user, messageId);
76 Clock now = Clock.fixed(Instant.now(), ZoneId.systemDefault());
77 LocalDateTime timestamp = LocalDateTime.now(now);
78 String messageText = "Bar";
79 Message message = new Message(key, 0l, timestamp, messageText);
80 when(chatMessageService.getMessage(any(Message.MessageKey.class))).thenReturn(Mono.empty());
81 when(chatMessageService.persistMessage(any(Message.MessageKey.class), any(LocalDateTime.class), any(String.class))).thenReturn(Mono.just(message));
84 Mono<Message> mono = chatRoomData.addMessage(messageId, user, messageText);
87 assertThat(mono).emitsExactly(message);
91 @DisplayName("Assert, that Mono emits expected message, if an unchanged message is added")
92 void testAddUnchangedMessage()
97 ChatMessageService chatMessageService = mock(ChatMessageService.class);
98 ChatRoomData chatRoomData = new ChatRoomData(
99 Clock.systemDefaultZone(),
102 Message.MessageKey key = Message.MessageKey.of(user, messageId);
103 Clock now = Clock.fixed(Instant.now(), ZoneId.systemDefault());
104 LocalDateTime timestamp = LocalDateTime.now(now);
105 String messageText = "Bar";
106 Message message = new Message(key, 0l, timestamp, messageText);
107 when(chatMessageService.getMessage(any(Message.MessageKey.class))).thenReturn(Mono.just(message));
108 when(chatMessageService.persistMessage(any(Message.MessageKey.class), any(LocalDateTime.class), any(String.class))).thenReturn(Mono.just(message));
111 Mono<Message> mono = chatRoomData.addMessage(messageId, user, messageText);
114 assertThat(mono).emitsExactly(message);
118 @DisplayName("Assert, that Mono sends an error, if a message is added again with mutated text")
119 void testAddMutatedMessage()
124 ChatMessageService chatMessageService = mock(ChatMessageService.class);
125 ChatRoomData chatRoomData = new ChatRoomData(
126 Clock.systemDefaultZone(),
129 Message.MessageKey key = Message.MessageKey.of(user, messageId);
130 Clock now = Clock.fixed(Instant.now(), ZoneId.systemDefault());
131 LocalDateTime timestamp = LocalDateTime.now(now);
132 String messageText = "Bar";
133 String mutatedText = "Boom!";
134 Message message = new Message(key, 0l, timestamp, messageText);
135 when(chatMessageService.getMessage(any(Message.MessageKey.class))).thenReturn(Mono.just(message));
136 when(chatMessageService.persistMessage(any(Message.MessageKey.class), any(LocalDateTime.class), any(String.class))).thenReturn(Mono.just(message));
139 Mono<Message> mono = chatRoomData.addMessage(messageId, user, mutatedText);
142 assertThat(mono).sendsError();