diff --git a/src/test/java/com/example/library/BookEventServiceTest.java b/src/test/java/com/example/library/BookEventServiceTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..84ff50923a37114dd93ba9ac7d2330ba83e8eabd
--- /dev/null
+++ b/src/test/java/com/example/library/BookEventServiceTest.java
@@ -0,0 +1,46 @@
+package com.example.library;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.mockito.Mockito.verify;
+
+@ExtendWith(MockitoExtension.class)
+public class BookEventServiceTest {
+
+  @Mock
+  private BookEventRegistry registry;
+
+  @Captor
+  private ArgumentCaptor<BookEventListener> listenerCaptor;
+
+  @InjectMocks
+  private BookEventService service;
+
+  @Test
+  void shouldRegisterListenerAndReactToEvent() {
+    // Arrange
+    // vyvoláme ručně @PostConstruct (mimo Spring)
+    service.register();
+
+    // Verify registrace listeneru
+    verify(registry).registerListener(listenerCaptor.capture());
+
+    // Simulujeme událost
+    Book testBook = new Book("TestovacĂ­ kniha", "TestovacĂ­ autor", true);
+    BookEventListener capturedListener = listenerCaptor.getValue();
+
+    // Act
+    capturedListener.onBookCreated(testBook);
+
+    // Assert – zde místo `System.out` bys typicky měl mock služby, která na to reaguje
+    // nebo jinou verifikaci, např. kontrolu DB volání nebo logiky
+    assertNotNull(capturedListener);
+  }
+}
\ No newline at end of file