feat(participation): highlight opted-out players
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
package games.dmg.spigottyrant;
|
||||
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scoreboard.Scoreboard;
|
||||
import org.bukkit.scoreboard.ScoreboardManager;
|
||||
import org.bukkit.scoreboard.Team;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
final class OptOutGlowControllerTest {
|
||||
private static final UUID TYRANT = UUID.fromString(
|
||||
"11111111-1111-1111-1111-111111111111"
|
||||
);
|
||||
private static final UUID OUT = UUID.fromString(
|
||||
"22222222-2222-2222-2222-222222222222"
|
||||
);
|
||||
|
||||
@Test
|
||||
void appliesGreenGlowAndRestoresPreviousTeamAfterLeavingRange() {
|
||||
TyrantStateManager stateManager = mock(TyrantStateManager.class);
|
||||
Server server = mock(Server.class);
|
||||
PluginSettings settings = mock(PluginSettings.class);
|
||||
ScoreboardManager manager = mock(ScoreboardManager.class);
|
||||
Scoreboard scoreboard = mock(Scoreboard.class);
|
||||
Team green = mock(Team.class);
|
||||
Team previous = mock(Team.class);
|
||||
Player tyrant = player(TYRANT, "Tyrant");
|
||||
Player optedOut = player(OUT, "Out");
|
||||
World world = mock(World.class);
|
||||
Location tyrantLocation = mock(Location.class);
|
||||
Location outLocation = mock(Location.class);
|
||||
when(server.getScoreboardManager()).thenReturn(manager);
|
||||
when(manager.getMainScoreboard()).thenReturn(scoreboard);
|
||||
when(scoreboard.getTeam("tyrant-optout")).thenReturn(null);
|
||||
when(scoreboard.registerNewTeam("tyrant-optout")).thenReturn(green);
|
||||
when(scoreboard.getEntryTeam("Out")).thenReturn(previous);
|
||||
when(server.getPlayer(TYRANT)).thenReturn(tyrant);
|
||||
doReturn(Set.of(tyrant, optedOut)).when(server).getOnlinePlayers();
|
||||
when(settings.tyrantRangeBlocks()).thenReturn(50.0);
|
||||
when(tyrant.getWorld()).thenReturn(world);
|
||||
when(optedOut.getWorld()).thenReturn(world);
|
||||
when(tyrant.getLocation()).thenReturn(tyrantLocation);
|
||||
when(optedOut.getLocation()).thenReturn(outLocation);
|
||||
when(outLocation.distanceSquared(tyrantLocation)).thenReturn(25.0, 2601.0);
|
||||
when(stateManager.game()).thenReturn(running());
|
||||
when(stateManager.players()).thenReturn(Map.of(OUT, optedOut()));
|
||||
OptOutGlowController controller = new OptOutGlowController(
|
||||
stateManager, server, settings
|
||||
);
|
||||
|
||||
controller.run();
|
||||
controller.run();
|
||||
|
||||
verify(green).setColor(ChatColor.GREEN);
|
||||
verify(green).addEntry("Out");
|
||||
verify(optedOut).setGlowing(true);
|
||||
verify(green).removeEntry("Out");
|
||||
verify(previous).addEntry("Out");
|
||||
verify(optedOut).setGlowing(false);
|
||||
}
|
||||
|
||||
private static Player player(UUID id, String name) {
|
||||
Player player = mock(Player.class);
|
||||
when(player.getUniqueId()).thenReturn(id);
|
||||
when(player.getName()).thenReturn(name);
|
||||
return player;
|
||||
}
|
||||
|
||||
private static PlayerState optedOut() {
|
||||
return new PlayerState(
|
||||
OUT, "Out", Optional.empty(), Optional.of(Instant.MAX), TyrantClass.NONE,
|
||||
Optional.empty(), Map.of(), Set.of(), java.util.List.of()
|
||||
);
|
||||
}
|
||||
|
||||
private static GameState running() {
|
||||
return new GameState(
|
||||
GameLifecycle.RUNNING, Optional.of(TYRANT), Optional.empty(),
|
||||
Optional.empty(), Optional.empty(), Optional.empty(), Duration.ZERO,
|
||||
0, 0, Set.of()
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user