diff --git a/changelog.md b/changelog.md index 579ded0..9c3e74d 100644 --- a/changelog.md +++ b/changelog.md @@ -31,6 +31,7 @@ These changes will (most likely) be included in the next version. - Zombies, husks, drowned, zombie villagers, piglins, hoglins, and zoglins without the `baby` prefix are now forced into adulthood to prevent them from occasionally spawning as babies. - Reward groups with `nothing` in them no longer cause errors when earned/granted. - The title-based announcer and the title-based boss health bar have been fixed to work with the breaking change to the Title API in Spigot 1.17. +- Arena Signs now correctly update for arenas that don't have `kebab-case` names in the config-file. ## [0.106] - 2021-05-09 ### Added diff --git a/src/main/java/com/garbagemule/MobArena/signs/HandlesArenaUpdates.java b/src/main/java/com/garbagemule/MobArena/signs/HandlesArenaUpdates.java index 966b6a4..71bb384 100644 --- a/src/main/java/com/garbagemule/MobArena/signs/HandlesArenaUpdates.java +++ b/src/main/java/com/garbagemule/MobArena/signs/HandlesArenaUpdates.java @@ -71,7 +71,7 @@ class HandlesArenaUpdates implements Listener { private void handle(Arena arena) { scheduler.runTask(plugin, () -> { - List signs = signStore.findByArenaId(arena.configName()); + List signs = signStore.findByArenaId(arena.getSlug()); signs.forEach(signRenderer::render); }); } diff --git a/src/test/java/com/garbagemule/MobArena/signs/HandlesArenaUpdatesTest.java b/src/test/java/com/garbagemule/MobArena/signs/HandlesArenaUpdatesTest.java new file mode 100644 index 0000000..e219648 --- /dev/null +++ b/src/test/java/com/garbagemule/MobArena/signs/HandlesArenaUpdatesTest.java @@ -0,0 +1,60 @@ +package com.garbagemule.MobArena.signs; + +import com.garbagemule.MobArena.MobArena; +import com.garbagemule.MobArena.events.ArenaPlayerJoinEvent; +import com.garbagemule.MobArena.framework.Arena; +import org.bukkit.Server; +import org.bukkit.scheduler.BukkitScheduler; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.junit.MockitoJUnitRunner; + +import java.util.Collections; + +import static org.mockito.Mockito.*; + +@SuppressWarnings("WeakerAccess") +@RunWith(MockitoJUnitRunner.StrictStubs.class) +public class HandlesArenaUpdatesTest { + + SignStore signStore; + SignRenderer signRenderer; + BukkitScheduler scheduler; + + HandlesArenaUpdates subject; + + @Before + public void setup() { + signStore = mock(SignStore.class); + signRenderer = mock(SignRenderer.class); + scheduler = mock(BukkitScheduler.class); + + MobArena plugin = mock(MobArena.class); + Server server = mock(Server.class); + when(plugin.getServer()).thenReturn(server); + when(server.getScheduler()).thenReturn(scheduler); + + subject = new HandlesArenaUpdates(signStore, signRenderer, plugin); + } + + @Test + public void usesArenaSlugForLookups() { + String slug = "angry-dingo"; + Arena arena = mock(Arena.class); + ArenaSign sign = new ArenaSign(null, "cool-sign", slug, "info"); + when(scheduler.runTask(any(), any(Runnable.class))).thenAnswer(i -> { + Runnable task = i.getArgument(1); + task.run(); + return null; + }); + when(arena.getSlug()).thenReturn(slug); + when(signStore.findByArenaId(slug)).thenReturn(Collections.singletonList(sign)); + ArenaPlayerJoinEvent event = new ArenaPlayerJoinEvent(null, arena); + + subject.on(event); + + verify(signRenderer).render(sign); + } + +}