refactor: Moved exceptions into package `exceptions` - Aligned Code
[demos/kafka/chat] / src / test / java / de / juplo / kafka / chat / backend / domain / ChatHomeTest.java
index 655c1b8..6282643 100644 (file)
@@ -1,35 +1,45 @@
 package de.juplo.kafka.chat.backend.domain;
 
+import de.juplo.kafka.chat.backend.domain.exceptions.LoadInProgressException;
+import de.juplo.kafka.chat.backend.domain.exceptions.UnknownChatroomException;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
-import reactor.core.publisher.Flux;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
 import reactor.core.publisher.Mono;
+import reactor.util.retry.Retry;
 
-import java.time.Clock;
+import java.time.Duration;
 import java.util.UUID;
 
-import static org.mockito.Mockito.mock;
 import static pl.rzrz.assertj.reactor.Assertions.assertThat;
 
 
-public class ChatHomeTest
+@ExtendWith(SpringExtension.class)
+public abstract class ChatHomeTest
 {
+  @Autowired
+  ChatHome chatHome;
+
+
   @Test
   @DisplayName("Assert chatroom is delivered, if it exists")
   void testGetExistingChatroom()
   {
     // Given
-    ChatHomeService chatHomeService = mock(ChatHomeService.class);
-    ChatRoomService chatRoomService = mock(ChatRoomService.class);
-    UUID chatroomId = UUID.randomUUID();
-    ChatRoom chatRoom = new ChatRoom(chatroomId, "Foo", Clock.systemDefaultZone(), chatRoomService, 8);
-    ChatHome chatHome = new ChatHome(chatHomeService, Flux.just(chatRoom));
+    UUID chatRoomId = UUID.fromString("5c73531c-6fc4-426c-adcb-afc5c140a0f7");
 
     // When
-    Mono<ChatRoom> mono = chatHome.getChatroom(chatroomId);
+    Mono<ChatRoomData> mono = Mono
+        .defer(() -> chatHome.getChatRoomData(chatRoomId))
+        .log("testGetExistingChatroom")
+        .retryWhen(Retry
+            .backoff(5, Duration.ofSeconds(1))
+            .filter(throwable -> throwable instanceof LoadInProgressException));
 
     // Then
-    assertThat(mono).emitsExactly(chatRoom);
+    assertThat(mono).emitsCount(1);
   }
 
   @Test
@@ -37,13 +47,22 @@ public class ChatHomeTest
   void testGetNonExistentChatroom()
   {
     // Given
-    ChatHomeService chatHomeService = mock(ChatHomeService.class);
-    ChatHome chatHome = new ChatHome(chatHomeService, Flux.empty());
+    UUID chatRoomId = UUID.fromString("7f59ec77-832e-4a17-8d22-55ef46242c17");
 
     // When
-    Mono<ChatRoom> mono = chatHome.getChatroom(UUID.randomUUID());
+    Mono<ChatRoomData> mono = Mono
+        .defer(() -> chatHome.getChatRoomData(chatRoomId))
+        .log("testGetNonExistentChatroom")
+        .retryWhen(Retry
+            .backoff(5, Duration.ofSeconds(1))
+            .filter(throwable -> throwable instanceof LoadInProgressException));
 
     // Then
-    assertThat(mono).sendsError();
+    assertThat(mono).sendsError(e ->
+    {
+      assertThat(e).isInstanceOf(UnknownChatroomException.class);
+      UnknownChatroomException unknownChatroomException = (UnknownChatroomException) e;
+      assertThat(unknownChatroomException.getChatroomId()).isEqualTo(chatRoomId);
+    });
   }
 }