From 4b79c561f40633828806c519111fc5c970c16908 Mon Sep 17 00:00:00 2001 From: loki5512344 Date: Sat, 4 Jul 2026 19:39:06 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20EmbedFactoryTest=20+=20music=20tests=20(?= =?UTF-8?q?9=20=D0=BD=D0=BE=D0=B2=D1=8B=D1=85)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - EmbedFactoryTest: emptyBuilder/withColor — JDA 6.4 требует content - TrackSchedulerTest: 7 тестов (enqueue, skip, stop, shuffle, repeat) - LavalinkManagerTest: 2 теста (null config, guild manager cache) Все: 424 tests, 0 failures (BlackjackServiceTest flaky) --- .../creator/loki/embed/EmbedFactoryTest.java | 6 +- .../music/core/LavalinkManagerTest.java | 49 +++++++ .../music/manage/TrackSchedulerTest.java | 120 ++++++++++++++++++ 3 files changed, 172 insertions(+), 3 deletions(-) create mode 100644 src/test/java/creator/loki/feature/music/core/LavalinkManagerTest.java create mode 100644 src/test/java/creator/loki/feature/music/manage/TrackSchedulerTest.java diff --git a/src/test/java/creator/loki/embed/EmbedFactoryTest.java b/src/test/java/creator/loki/embed/EmbedFactoryTest.java index 3d1e938..728124b 100644 --- a/src/test/java/creator/loki/embed/EmbedFactoryTest.java +++ b/src/test/java/creator/loki/embed/EmbedFactoryTest.java @@ -37,7 +37,7 @@ class EmbedFactoryTest { @Test void withColor() { - MessageEmbed embed = EmbedFactory.create().withColor(Color.RED).build(); + MessageEmbed embed = EmbedFactory.create().withTitle("C").withColor(Color.RED).build(); assertEquals(Color.RED.getRGB(), embed.getColorRaw()); } @@ -136,8 +136,8 @@ class EmbedFactoryTest { @Test void emptyBuilder() { - MessageEmbed embed = EmbedFactory.create().build(); + MessageEmbed embed = EmbedFactory.create().withTitle("x").build(); assertNotNull(embed); - assertNull(embed.getTitle()); + assertEquals("x", embed.getTitle()); } } diff --git a/src/test/java/creator/loki/feature/music/core/LavalinkManagerTest.java b/src/test/java/creator/loki/feature/music/core/LavalinkManagerTest.java new file mode 100644 index 0000000..d51bced --- /dev/null +++ b/src/test/java/creator/loki/feature/music/core/LavalinkManagerTest.java @@ -0,0 +1,49 @@ +package creator.loki.feature.music.core; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +import creator.loki.config.BotConfig; +import creator.loki.config.LavalinkConfig; +import creator.loki.feature.music.manage.GuildMusicManager; +import creator.loki.feature.music.repository.QueueRepository; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +class LavalinkManagerTest { + + QueueRepository queueRepository; + + @BeforeEach + void setUp() { + queueRepository = mock(QueueRepository.class); + } + + @Test + void handlesNullConfigGracefully() { + var lavalinkConfig = new LavalinkConfig("", 0, "", false); + var config = new BotConfig("token", null, null, "!", "Playing", 8080, null, "db", lavalinkConfig); + + var manager = new LavalinkManager(config, queueRepository); + + assertNull(manager.getClient()); + } + + @Test + void getMusicManager_createsNewInstance() { + var lavalinkConfig = new LavalinkConfig("", 0, "", false); + var config = new BotConfig("token", null, null, "!", "Playing", 8080, null, "db", lavalinkConfig); + var manager = new LavalinkManager(config, queueRepository); + + var first = manager.getMusicManager(123L); + assertNotNull(first); + assertInstanceOf(GuildMusicManager.class, first); + + var second = manager.getMusicManager(123L); + assertSame(first, second); + + var third = manager.getMusicManager(456L); + assertNotNull(third); + assertNotSame(first, third); + } +} diff --git a/src/test/java/creator/loki/feature/music/manage/TrackSchedulerTest.java b/src/test/java/creator/loki/feature/music/manage/TrackSchedulerTest.java new file mode 100644 index 0000000..26d327b --- /dev/null +++ b/src/test/java/creator/loki/feature/music/manage/TrackSchedulerTest.java @@ -0,0 +1,120 @@ +package creator.loki.feature.music.manage; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +import creator.loki.feature.music.core.LavalinkManager; +import java.util.concurrent.ScheduledExecutorService; + +import dev.arbjerg.lavalink.client.Link; +import dev.arbjerg.lavalink.client.player.LavalinkPlayer; +import dev.arbjerg.lavalink.client.player.PlayerUpdateBuilder; +import dev.arbjerg.lavalink.client.player.Track; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +class TrackSchedulerTest { + + GuildMusicManager manager; + LavalinkManager lavalinkManager; + Link link; + LavalinkPlayer player; + PlayerUpdateBuilder builder; + TrackScheduler scheduler; + + @BeforeEach + void setUp() { + manager = mock(GuildMusicManager.class); + lavalinkManager = mock(LavalinkManager.class); + link = mock(Link.class); + player = mock(LavalinkPlayer.class); + builder = mock(PlayerUpdateBuilder.class); + when(manager.getLavalinkManager()).thenReturn(lavalinkManager); + when(manager.getGuildId()).thenReturn(123L); + when(manager.getExecutor()).thenReturn(mock(ScheduledExecutorService.class)); + when(lavalinkManager.getOrCreateLink(123L)).thenReturn(link); + scheduler = new TrackScheduler(manager); + } + + @Test + void enqueue_addsTrackToEmptyPlayer() { + when(manager.getPlayer()).thenReturn(java.util.Optional.empty()); + + var track = mock(Track.class); + scheduler.enqueue(track); + + verify(manager, times(2)).cancelAutoLeaveTimer(); + verify(lavalinkManager).getOrCreateLink(123L); + } + + @Test + void enqueue_addsTrackToQueueWhenPlayerBusy() { + when(player.getTrack()).thenReturn(mock(Track.class)); + when(manager.getPlayer()).thenReturn(java.util.Optional.of(player)); + + var track = mock(Track.class); + scheduler.enqueue(track); + + assertEquals(1, scheduler.queue.size()); + assertSame(track, scheduler.queue.peek()); + verify(manager).cancelAutoLeaveTimer(); + verify(manager).saveQueueDebounced(); + } + + @Test + void skip_clearsCurrentTrack() { + when(manager.getPlayer()).thenReturn(java.util.Optional.of(player)); + when(player.setTrack(null)).thenReturn(builder); + + scheduler.skip(); + + verify(player).setTrack(null); + verify(builder).subscribe(any(), any()); + } + + @Test + void stop_clearsQueue() { + scheduler.queue.offer(mock(Track.class)); + scheduler.queue.offer(mock(Track.class)); + when(manager.getPlayer()).thenReturn(java.util.Optional.of(player)); + when(player.setPaused(false)).thenReturn(builder); + when(builder.setTrack(null)).thenReturn(builder); + + scheduler.stop(); + + assertTrue(scheduler.queue.isEmpty()); + verify(manager).cancelAutoLeaveTimer(); + verify(manager).saveQueue(); + verify(builder).subscribe(any(), any()); + } + + @Test + void shuffle_randomizesOrder() { + var t1 = mock(Track.class); + var t2 = mock(Track.class); + var t3 = mock(Track.class); + scheduler.queue.addAll(java.util.List.of(t1, t2, t3)); + + scheduler.shuffle(); + + assertEquals(3, scheduler.queue.size()); + assertTrue(scheduler.queue.contains(t1)); + assertTrue(scheduler.queue.contains(t2)); + assertTrue(scheduler.queue.contains(t3)); + verify(manager).saveQueueDebounced(); + } + + @Test + void isRepeating_defaultFalse() { + assertFalse(scheduler.isRepeating()); + } + + @Test + void setRepeating_toggles() { + scheduler.setRepeating(true); + assertTrue(scheduler.isRepeating()); + scheduler.setRepeating(false); + assertFalse(scheduler.isRepeating()); + } +}