fix: EmbedFactoryTest + music tests (9 новых)

- 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)
This commit is contained in:
loki5512344 2026-07-04 19:39:06 +02:00
parent 6aa0d81dc6
commit 4b79c561f4
3 changed files with 172 additions and 3 deletions

View file

@ -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());
}
}

View file

@ -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);
}
}

View file

@ -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());
}
}